@r5n/hydra 0.3.2 → 0.3.3
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/cli.js +25 -25
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
var zt=Object.create;var{getPrototypeOf:Kt,defineProperty:Wn,getOwnPropertyNames:Jt}=Object;var Yt=Object.prototype.hasOwnProperty;var mn=(t,r,o)=>{o=t!=null?zt(Kt(t)):{};let e=r||!t||!t.__esModule?Wn(o,"default",{value:t,enumerable:!0}):o;for(let s of Jt(t))if(!Yt.call(e,s))Wn(e,s,{get:()=>t[s],enumerable:!0});return e};var zn=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var On=zn((Co,Kn)=>{var Rn={to(t,r){if(!r)return`\x1B[${t+1}G`;return`\x1B[${r+1};${t+1}H`},move(t,r){let o="";if(t<0)o+=`\x1B[${-t}D`;else if(t>0)o+=`\x1B[${t}C`;if(r<0)o+=`\x1B[${-r}A`;else if(r>0)o+=`\x1B[${r}B`;return o},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Qt={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Zt={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let r="";for(let o=0;o<t;o++)r+=this.line+(o<t-1?Rn.up():"");if(t)r+=Rn.left;return r}};Kn.exports={cursor:Rn,scroll:Qt,erase:Zt,beep:"\x07"}});var Tn=zn((No,Sn)=>{var gn=process||{},Jn=gn.argv||[],ln=gn.env||{},Vt=!(!!ln.NO_COLOR||Jn.includes("--no-color"))&&(!!ln.FORCE_COLOR||Jn.includes("--color")||gn.platform==="win32"||(gn.stdout||{}).isTTY&&ln.TERM!=="dumb"||!!ln.CI),Ft=(t,r,o=t)=>(e)=>{let s=""+e,i=s.indexOf(r,t.length);return~i?t+Dt(s,r,o,i)+r:t+s+r},Dt=(t,r,o,e)=>{let s="",i=0;do s+=t.substring(i,e)+o,i=e+r.length,e=t.indexOf(r,i);while(~e);return s+t.substring(i)},Yn=(t=Vt)=>{let r=t?Ft:()=>String;return{isColorSupported:t,reset:r("\x1B[0m","\x1B[0m"),bold:r("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:r("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:r("\x1B[3m","\x1B[23m"),underline:r("\x1B[4m","\x1B[24m"),inverse:r("\x1B[7m","\x1B[27m"),hidden:r("\x1B[8m","\x1B[28m"),strikethrough:r("\x1B[9m","\x1B[29m"),black:r("\x1B[30m","\x1B[39m"),red:r("\x1B[31m","\x1B[39m"),green:r("\x1B[32m","\x1B[39m"),yellow:r("\x1B[33m","\x1B[39m"),blue:r("\x1B[34m","\x1B[39m"),magenta:r("\x1B[35m","\x1B[39m"),cyan:r("\x1B[36m","\x1B[39m"),white:r("\x1B[37m","\x1B[39m"),gray:r("\x1B[90m","\x1B[39m"),bgBlack:r("\x1B[40m","\x1B[49m"),bgRed:r("\x1B[41m","\x1B[49m"),bgGreen:r("\x1B[42m","\x1B[49m"),bgYellow:r("\x1B[43m","\x1B[49m"),bgBlue:r("\x1B[44m","\x1B[49m"),bgMagenta:r("\x1B[45m","\x1B[49m"),bgCyan:r("\x1B[46m","\x1B[49m"),bgWhite:r("\x1B[47m","\x1B[49m"),blackBright:r("\x1B[90m","\x1B[39m"),redBright:r("\x1B[91m","\x1B[39m"),greenBright:r("\x1B[92m","\x1B[39m"),yellowBright:r("\x1B[93m","\x1B[39m"),blueBright:r("\x1B[94m","\x1B[39m"),magentaBright:r("\x1B[95m","\x1B[39m"),cyanBright:r("\x1B[96m","\x1B[39m"),whiteBright:r("\x1B[97m","\x1B[39m"),bgBlackBright:r("\x1B[100m","\x1B[49m"),bgRedBright:r("\x1B[101m","\x1B[49m"),bgGreenBright:r("\x1B[102m","\x1B[49m"),bgYellowBright:r("\x1B[103m","\x1B[49m"),bgBlueBright:r("\x1B[104m","\x1B[49m"),bgMagentaBright:r("\x1B[105m","\x1B[49m"),bgCyanBright:r("\x1B[106m","\x1B[49m"),bgWhiteBright:r("\x1B[107m","\x1B[49m")}};Sn.exports=Yn();Sn.exports.createColors=Yn});var O=mn(On(),1),et=mn(Tn(),1);import{stdin as rt,stdout as ot}from"process";import*as I from"readline";import Qn from"readline";import{Writable as nr}from"stream";function tr({onlyFirst:t=!1}={}){let r=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(r,t?void 0:"g")}var rr=tr();function st(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(rr,"")}function it(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var at={exports:{}};(function(t){var r={};t.exports=r,r.eastAsianWidth=function(e){var s=e.charCodeAt(0),i=e.length==2?e.charCodeAt(1):0,n=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,n=s<<10|i,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?"F":n==8361||65377<=n&&n<=65470||65474<=n&&n<=65479||65482<=n&&n<=65487||65490<=n&&n<=65495||65498<=n&&n<=65500||65512<=n&&n<=65518?"H":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?"W":32<=n&&n<=126||162<=n&&n<=163||165<=n&&n<=166||n==172||n==175||10214<=n&&n<=10221||10629<=n&&n<=10630?"Na":n==161||n==164||167<=n&&n<=168||n==170||173<=n&&n<=174||176<=n&&n<=180||182<=n&&n<=186||188<=n&&n<=191||n==198||n==208||215<=n&&n<=216||222<=n&&n<=225||n==230||232<=n&&n<=234||236<=n&&n<=237||n==240||242<=n&&n<=243||247<=n&&n<=250||n==252||n==254||n==257||n==273||n==275||n==283||294<=n&&n<=295||n==299||305<=n&&n<=307||n==312||319<=n&&n<=322||n==324||328<=n&&n<=331||n==333||338<=n&&n<=339||358<=n&&n<=359||n==363||n==462||n==464||n==466||n==468||n==470||n==472||n==474||n==476||n==593||n==609||n==708||n==711||713<=n&&n<=715||n==717||n==720||728<=n&&n<=731||n==733||n==735||768<=n&&n<=879||913<=n&&n<=929||931<=n&&n<=937||945<=n&&n<=961||963<=n&&n<=969||n==1025||1040<=n&&n<=1103||n==1105||n==8208||8211<=n&&n<=8214||8216<=n&&n<=8217||8220<=n&&n<=8221||8224<=n&&n<=8226||8228<=n&&n<=8231||n==8240||8242<=n&&n<=8243||n==8245||n==8251||n==8254||n==8308||n==8319||8321<=n&&n<=8324||n==8364||n==8451||n==8453||n==8457||n==8467||n==8470||8481<=n&&n<=8482||n==8486||n==8491||8531<=n&&n<=8532||8539<=n&&n<=8542||8544<=n&&n<=8555||8560<=n&&n<=8569||n==8585||8592<=n&&n<=8601||8632<=n&&n<=8633||n==8658||n==8660||n==8679||n==8704||8706<=n&&n<=8707||8711<=n&&n<=8712||n==8715||n==8719||n==8721||n==8725||n==8730||8733<=n&&n<=8736||n==8739||n==8741||8743<=n&&n<=8748||n==8750||8756<=n&&n<=8759||8764<=n&&n<=8765||n==8776||n==8780||n==8786||8800<=n&&n<=8801||8804<=n&&n<=8807||8810<=n&&n<=8811||8814<=n&&n<=8815||8834<=n&&n<=8835||8838<=n&&n<=8839||n==8853||n==8857||n==8869||n==8895||n==8978||9312<=n&&n<=9449||9451<=n&&n<=9547||9552<=n&&n<=9587||9600<=n&&n<=9615||9618<=n&&n<=9621||9632<=n&&n<=9633||9635<=n&&n<=9641||9650<=n&&n<=9651||9654<=n&&n<=9655||9660<=n&&n<=9661||9664<=n&&n<=9665||9670<=n&&n<=9672||n==9675||9678<=n&&n<=9681||9698<=n&&n<=9701||n==9711||9733<=n&&n<=9734||n==9737||9742<=n&&n<=9743||9748<=n&&n<=9749||n==9756||n==9758||n==9792||n==9794||9824<=n&&n<=9825||9827<=n&&n<=9829||9831<=n&&n<=9834||9836<=n&&n<=9837||n==9839||9886<=n&&n<=9887||9918<=n&&n<=9919||9924<=n&&n<=9933||9935<=n&&n<=9953||n==9955||9960<=n&&n<=9983||n==10045||n==10071||10102<=n&&n<=10111||11093<=n&&n<=11097||12872<=n&&n<=12879||57344<=n&&n<=63743||65024<=n&&n<=65039||n==65533||127232<=n&&n<=127242||127248<=n&&n<=127277||127280<=n&&n<=127337||127344<=n&&n<=127386||917760<=n&&n<=917999||983040<=n&&n<=1048573||1048576<=n&&n<=1114109?"A":"N"},r.characterLength=function(e){var s=this.eastAsianWidth(e);return s=="F"||s=="W"||s=="A"?2:1};function o(e){return e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}r.length=function(e){for(var s=o(e),i=0,n=0;n<s.length;n++)i=i+this.characterLength(s[n]);return i},r.slice=function(e,s,i){textLen=r.length(e),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var n="",a=0,c=o(e),l=0;l<c.length;l++){var f=c[l],m=r.length(f);if(a>=s-(m==2?1:0))if(a+m<=i)n+=f;else break;a+=m}return n}})(at);var or=at.exports,er=it(or),sr=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},ir=it(sr);function tn(t,r={}){if(typeof t!="string"||t.length===0||(r={ambiguousIsNarrow:!0,...r},t=st(t),t.length===0))return 0;t=t.replace(ir()," ");let o=r.ambiguousIsNarrow?1:2,e=0;for(let s of t){let i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(er.eastAsianWidth(s)){case"F":case"W":e+=2;break;case"A":e+=o;break;default:e+=1}}return e}var Cn=10,Zn=(t=0)=>(r)=>`\x1B[${r+t}m`,Vn=(t=0)=>(r)=>`\x1B[${38+t};5;${r}m`,Fn=(t=0)=>(r,o,e)=>`\x1B[${38+t};2;${r};${o};${e}m`,x={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(x.modifier);var ar=Object.keys(x.color),cr=Object.keys(x.bgColor);[...ar];function fr(){let t=new Map;for(let[r,o]of Object.entries(x)){for(let[e,s]of Object.entries(o))x[e]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},o[e]=x[e],t.set(s[0],s[1]);Object.defineProperty(x,r,{value:o,enumerable:!1})}return Object.defineProperty(x,"codes",{value:t,enumerable:!1}),x.color.close="\x1B[39m",x.bgColor.close="\x1B[49m",x.color.ansi=Zn(),x.color.ansi256=Vn(),x.color.ansi16m=Fn(),x.bgColor.ansi=Zn(Cn),x.bgColor.ansi256=Vn(Cn),x.bgColor.ansi16m=Fn(Cn),Object.defineProperties(x,{rgbToAnsi256:{value:(r,o,e)=>r===o&&o===e?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(o/255*5)+Math.round(e/255*5),enumerable:!1},hexToRgb:{value:(r)=>{let o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(r.toString(16));if(!o)return[0,0,0];let[e]=o;e.length===3&&(e=[...e].map((i)=>i+i).join(""));let s=Number.parseInt(e,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:(r)=>x.rgbToAnsi256(...x.hexToRgb(r)),enumerable:!1},ansi256ToAnsi:{value:(r)=>{if(r<8)return 30+r;if(r<16)return 90+(r-8);let o,e,s;if(r>=232)o=((r-232)*10+8)/255,e=o,s=o;else{r-=16;let a=r%36;o=Math.floor(r/36)/5,e=Math.floor(a/6)/5,s=a%6/5}let i=Math.max(o,e,s)*2;if(i===0)return 30;let n=30+(Math.round(s)<<2|Math.round(e)<<1|Math.round(o));return i===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(r,o,e)=>x.ansi256ToAnsi(x.rgbToAnsi256(r,o,e)),enumerable:!1},hexToAnsi:{value:(r)=>x.ansi256ToAnsi(x.hexToAnsi256(r)),enumerable:!1}}),x}var mr=fr(),hn=new Set(["\x1B","\x9B"]),lr=39,kn="\x07",ct="[",gr="]",ft="m",Mn=`${gr}8;;`,Dn=(t)=>`${hn.values().next().value}${ct}${t}${ft}`,nt=(t)=>`${hn.values().next().value}${Mn}${t}${kn}`,pr=(t)=>t.split(" ").map((r)=>tn(r)),Nn=(t,r,o)=>{let e=[...r],s=!1,i=!1,n=tn(st(t[t.length-1]));for(let[a,c]of e.entries()){let l=tn(c);if(n+l<=o?t[t.length-1]+=c:(t.push(c),n=0),hn.has(c)&&(s=!0,i=e.slice(a+1).join("").startsWith(Mn)),s){i?c===kn&&(s=!1,i=!1):c===ft&&(s=!1);continue}n+=l,n===o&&a<e.length-1&&(t.push(""),n=0)}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},ur=(t)=>{let r=t.split(" "),o=r.length;for(;o>0&&!(tn(r[o-1])>0);)o--;return o===r.length?t:r.slice(0,o).join(" ")+r.slice(o).join("")},hr=(t,r,o={})=>{if(o.trim!==!1&&t.trim()==="")return"";let e="",s,i,n=pr(t),a=[""];for(let[l,f]of t.split(" ").entries()){o.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let m=tn(a[a.length-1]);if(l!==0&&(m>=r&&(o.wordWrap===!1||o.trim===!1)&&(a.push(""),m=0),(m>0||o.trim===!1)&&(a[a.length-1]+=" ",m++)),o.hard&&n[l]>r){let g=r-m,d=1+Math.floor((n[l]-g-1)/r);Math.floor((n[l]-1)/r)<d&&a.push(""),Nn(a,f,r);continue}if(m+n[l]>r&&m>0&&n[l]>0){if(o.wordWrap===!1&&m<r){Nn(a,f,r);continue}a.push("")}if(m+n[l]>r&&o.wordWrap===!1){Nn(a,f,r);continue}a[a.length-1]+=f}o.trim!==!1&&(a=a.map((l)=>ur(l)));let c=[...a.join(`
|
|
3
|
-
`)];for(let[l,f]of c.entries()){if(e+=f,hn.has(f)){let{groups:g}=new RegExp(`(?:\\${ct}(?<code>\\d+)m|\\${
|
|
2
|
+
var Kt=Object.create;var{getPrototypeOf:Jt,defineProperty:Wn,getOwnPropertyNames:Yt}=Object;var Qt=Object.prototype.hasOwnProperty;var mn=(t,r,o)=>{o=t!=null?Kt(Jt(t)):{};let e=r||!t||!t.__esModule?Wn(o,"default",{value:t,enumerable:!0}):o;for(let s of Yt(t))if(!Qt.call(e,s))Wn(e,s,{get:()=>t[s],enumerable:!0});return e};var zn=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var On=zn((No,Kn)=>{var Rn={to(t,r){if(!r)return`\x1B[${t+1}G`;return`\x1B[${r+1};${t+1}H`},move(t,r){let o="";if(t<0)o+=`\x1B[${-t}D`;else if(t>0)o+=`\x1B[${t}C`;if(r<0)o+=`\x1B[${-r}A`;else if(r>0)o+=`\x1B[${r}B`;return o},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Zt={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Vt={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let r="";for(let o=0;o<t;o++)r+=this.line+(o<t-1?Rn.up():"");if(t)r+=Rn.left;return r}};Kn.exports={cursor:Rn,scroll:Zt,erase:Vt,beep:"\x07"}});var Cn=zn((vo,Sn)=>{var gn=process||{},Jn=gn.argv||[],ln=gn.env||{},Ft=!(!!ln.NO_COLOR||Jn.includes("--no-color"))&&(!!ln.FORCE_COLOR||Jn.includes("--color")||gn.platform==="win32"||(gn.stdout||{}).isTTY&&ln.TERM!=="dumb"||!!ln.CI),Dt=(t,r,o=t)=>(e)=>{let s=""+e,i=s.indexOf(r,t.length);return~i?t+nr(s,r,o,i)+r:t+s+r},nr=(t,r,o,e)=>{let s="",i=0;do s+=t.substring(i,e)+o,i=e+r.length,e=t.indexOf(r,i);while(~e);return s+t.substring(i)},Yn=(t=Ft)=>{let r=t?Dt:()=>String;return{isColorSupported:t,reset:r("\x1B[0m","\x1B[0m"),bold:r("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:r("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:r("\x1B[3m","\x1B[23m"),underline:r("\x1B[4m","\x1B[24m"),inverse:r("\x1B[7m","\x1B[27m"),hidden:r("\x1B[8m","\x1B[28m"),strikethrough:r("\x1B[9m","\x1B[29m"),black:r("\x1B[30m","\x1B[39m"),red:r("\x1B[31m","\x1B[39m"),green:r("\x1B[32m","\x1B[39m"),yellow:r("\x1B[33m","\x1B[39m"),blue:r("\x1B[34m","\x1B[39m"),magenta:r("\x1B[35m","\x1B[39m"),cyan:r("\x1B[36m","\x1B[39m"),white:r("\x1B[37m","\x1B[39m"),gray:r("\x1B[90m","\x1B[39m"),bgBlack:r("\x1B[40m","\x1B[49m"),bgRed:r("\x1B[41m","\x1B[49m"),bgGreen:r("\x1B[42m","\x1B[49m"),bgYellow:r("\x1B[43m","\x1B[49m"),bgBlue:r("\x1B[44m","\x1B[49m"),bgMagenta:r("\x1B[45m","\x1B[49m"),bgCyan:r("\x1B[46m","\x1B[49m"),bgWhite:r("\x1B[47m","\x1B[49m"),blackBright:r("\x1B[90m","\x1B[39m"),redBright:r("\x1B[91m","\x1B[39m"),greenBright:r("\x1B[92m","\x1B[39m"),yellowBright:r("\x1B[93m","\x1B[39m"),blueBright:r("\x1B[94m","\x1B[39m"),magentaBright:r("\x1B[95m","\x1B[39m"),cyanBright:r("\x1B[96m","\x1B[39m"),whiteBright:r("\x1B[97m","\x1B[39m"),bgBlackBright:r("\x1B[100m","\x1B[49m"),bgRedBright:r("\x1B[101m","\x1B[49m"),bgGreenBright:r("\x1B[102m","\x1B[49m"),bgYellowBright:r("\x1B[103m","\x1B[49m"),bgBlueBright:r("\x1B[104m","\x1B[49m"),bgMagentaBright:r("\x1B[105m","\x1B[49m"),bgCyanBright:r("\x1B[106m","\x1B[49m"),bgWhiteBright:r("\x1B[107m","\x1B[49m")}};Sn.exports=Yn();Sn.exports.createColors=Yn});var O=mn(On(),1),et=mn(Cn(),1);import{stdin as rt,stdout as ot}from"process";import*as I from"readline";import Qn from"readline";import{Writable as tr}from"stream";function rr({onlyFirst:t=!1}={}){let r=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(r,t?void 0:"g")}var or=rr();function st(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(or,"")}function it(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var at={exports:{}};(function(t){var r={};t.exports=r,r.eastAsianWidth=function(e){var s=e.charCodeAt(0),i=e.length==2?e.charCodeAt(1):0,n=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,n=s<<10|i,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?"F":n==8361||65377<=n&&n<=65470||65474<=n&&n<=65479||65482<=n&&n<=65487||65490<=n&&n<=65495||65498<=n&&n<=65500||65512<=n&&n<=65518?"H":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?"W":32<=n&&n<=126||162<=n&&n<=163||165<=n&&n<=166||n==172||n==175||10214<=n&&n<=10221||10629<=n&&n<=10630?"Na":n==161||n==164||167<=n&&n<=168||n==170||173<=n&&n<=174||176<=n&&n<=180||182<=n&&n<=186||188<=n&&n<=191||n==198||n==208||215<=n&&n<=216||222<=n&&n<=225||n==230||232<=n&&n<=234||236<=n&&n<=237||n==240||242<=n&&n<=243||247<=n&&n<=250||n==252||n==254||n==257||n==273||n==275||n==283||294<=n&&n<=295||n==299||305<=n&&n<=307||n==312||319<=n&&n<=322||n==324||328<=n&&n<=331||n==333||338<=n&&n<=339||358<=n&&n<=359||n==363||n==462||n==464||n==466||n==468||n==470||n==472||n==474||n==476||n==593||n==609||n==708||n==711||713<=n&&n<=715||n==717||n==720||728<=n&&n<=731||n==733||n==735||768<=n&&n<=879||913<=n&&n<=929||931<=n&&n<=937||945<=n&&n<=961||963<=n&&n<=969||n==1025||1040<=n&&n<=1103||n==1105||n==8208||8211<=n&&n<=8214||8216<=n&&n<=8217||8220<=n&&n<=8221||8224<=n&&n<=8226||8228<=n&&n<=8231||n==8240||8242<=n&&n<=8243||n==8245||n==8251||n==8254||n==8308||n==8319||8321<=n&&n<=8324||n==8364||n==8451||n==8453||n==8457||n==8467||n==8470||8481<=n&&n<=8482||n==8486||n==8491||8531<=n&&n<=8532||8539<=n&&n<=8542||8544<=n&&n<=8555||8560<=n&&n<=8569||n==8585||8592<=n&&n<=8601||8632<=n&&n<=8633||n==8658||n==8660||n==8679||n==8704||8706<=n&&n<=8707||8711<=n&&n<=8712||n==8715||n==8719||n==8721||n==8725||n==8730||8733<=n&&n<=8736||n==8739||n==8741||8743<=n&&n<=8748||n==8750||8756<=n&&n<=8759||8764<=n&&n<=8765||n==8776||n==8780||n==8786||8800<=n&&n<=8801||8804<=n&&n<=8807||8810<=n&&n<=8811||8814<=n&&n<=8815||8834<=n&&n<=8835||8838<=n&&n<=8839||n==8853||n==8857||n==8869||n==8895||n==8978||9312<=n&&n<=9449||9451<=n&&n<=9547||9552<=n&&n<=9587||9600<=n&&n<=9615||9618<=n&&n<=9621||9632<=n&&n<=9633||9635<=n&&n<=9641||9650<=n&&n<=9651||9654<=n&&n<=9655||9660<=n&&n<=9661||9664<=n&&n<=9665||9670<=n&&n<=9672||n==9675||9678<=n&&n<=9681||9698<=n&&n<=9701||n==9711||9733<=n&&n<=9734||n==9737||9742<=n&&n<=9743||9748<=n&&n<=9749||n==9756||n==9758||n==9792||n==9794||9824<=n&&n<=9825||9827<=n&&n<=9829||9831<=n&&n<=9834||9836<=n&&n<=9837||n==9839||9886<=n&&n<=9887||9918<=n&&n<=9919||9924<=n&&n<=9933||9935<=n&&n<=9953||n==9955||9960<=n&&n<=9983||n==10045||n==10071||10102<=n&&n<=10111||11093<=n&&n<=11097||12872<=n&&n<=12879||57344<=n&&n<=63743||65024<=n&&n<=65039||n==65533||127232<=n&&n<=127242||127248<=n&&n<=127277||127280<=n&&n<=127337||127344<=n&&n<=127386||917760<=n&&n<=917999||983040<=n&&n<=1048573||1048576<=n&&n<=1114109?"A":"N"},r.characterLength=function(e){var s=this.eastAsianWidth(e);return s=="F"||s=="W"||s=="A"?2:1};function o(e){return e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}r.length=function(e){for(var s=o(e),i=0,n=0;n<s.length;n++)i=i+this.characterLength(s[n]);return i},r.slice=function(e,s,i){textLen=r.length(e),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var n="",a=0,c=o(e),l=0;l<c.length;l++){var f=c[l],m=r.length(f);if(a>=s-(m==2?1:0))if(a+m<=i)n+=f;else break;a+=m}return n}})(at);var er=at.exports,sr=it(er),ir=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},ar=it(ir);function tn(t,r={}){if(typeof t!="string"||t.length===0||(r={ambiguousIsNarrow:!0,...r},t=st(t),t.length===0))return 0;t=t.replace(ar()," ");let o=r.ambiguousIsNarrow?1:2,e=0;for(let s of t){let i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(sr.eastAsianWidth(s)){case"F":case"W":e+=2;break;case"A":e+=o;break;default:e+=1}}return e}var Tn=10,Zn=(t=0)=>(r)=>`\x1B[${r+t}m`,Vn=(t=0)=>(r)=>`\x1B[${38+t};5;${r}m`,Fn=(t=0)=>(r,o,e)=>`\x1B[${38+t};2;${r};${o};${e}m`,x={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(x.modifier);var cr=Object.keys(x.color),fr=Object.keys(x.bgColor);[...cr];function mr(){let t=new Map;for(let[r,o]of Object.entries(x)){for(let[e,s]of Object.entries(o))x[e]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},o[e]=x[e],t.set(s[0],s[1]);Object.defineProperty(x,r,{value:o,enumerable:!1})}return Object.defineProperty(x,"codes",{value:t,enumerable:!1}),x.color.close="\x1B[39m",x.bgColor.close="\x1B[49m",x.color.ansi=Zn(),x.color.ansi256=Vn(),x.color.ansi16m=Fn(),x.bgColor.ansi=Zn(Tn),x.bgColor.ansi256=Vn(Tn),x.bgColor.ansi16m=Fn(Tn),Object.defineProperties(x,{rgbToAnsi256:{value:(r,o,e)=>r===o&&o===e?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(o/255*5)+Math.round(e/255*5),enumerable:!1},hexToRgb:{value:(r)=>{let o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(r.toString(16));if(!o)return[0,0,0];let[e]=o;e.length===3&&(e=[...e].map((i)=>i+i).join(""));let s=Number.parseInt(e,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:(r)=>x.rgbToAnsi256(...x.hexToRgb(r)),enumerable:!1},ansi256ToAnsi:{value:(r)=>{if(r<8)return 30+r;if(r<16)return 90+(r-8);let o,e,s;if(r>=232)o=((r-232)*10+8)/255,e=o,s=o;else{r-=16;let a=r%36;o=Math.floor(r/36)/5,e=Math.floor(a/6)/5,s=a%6/5}let i=Math.max(o,e,s)*2;if(i===0)return 30;let n=30+(Math.round(s)<<2|Math.round(e)<<1|Math.round(o));return i===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(r,o,e)=>x.ansi256ToAnsi(x.rgbToAnsi256(r,o,e)),enumerable:!1},hexToAnsi:{value:(r)=>x.ansi256ToAnsi(x.hexToAnsi256(r)),enumerable:!1}}),x}var lr=mr(),hn=new Set(["\x1B","\x9B"]),gr=39,vn="\x07",ct="[",pr="]",ft="m",Pn=`${pr}8;;`,Dn=(t)=>`${hn.values().next().value}${ct}${t}${ft}`,nt=(t)=>`${hn.values().next().value}${Pn}${t}${vn}`,ur=(t)=>t.split(" ").map((r)=>tn(r)),kn=(t,r,o)=>{let e=[...r],s=!1,i=!1,n=tn(st(t[t.length-1]));for(let[a,c]of e.entries()){let l=tn(c);if(n+l<=o?t[t.length-1]+=c:(t.push(c),n=0),hn.has(c)&&(s=!0,i=e.slice(a+1).join("").startsWith(Pn)),s){i?c===vn&&(s=!1,i=!1):c===ft&&(s=!1);continue}n+=l,n===o&&a<e.length-1&&(t.push(""),n=0)}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},hr=(t)=>{let r=t.split(" "),o=r.length;for(;o>0&&!(tn(r[o-1])>0);)o--;return o===r.length?t:r.slice(0,o).join(" ")+r.slice(o).join("")},dr=(t,r,o={})=>{if(o.trim!==!1&&t.trim()==="")return"";let e="",s,i,n=ur(t),a=[""];for(let[l,f]of t.split(" ").entries()){o.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let m=tn(a[a.length-1]);if(l!==0&&(m>=r&&(o.wordWrap===!1||o.trim===!1)&&(a.push(""),m=0),(m>0||o.trim===!1)&&(a[a.length-1]+=" ",m++)),o.hard&&n[l]>r){let g=r-m,d=1+Math.floor((n[l]-g-1)/r);Math.floor((n[l]-1)/r)<d&&a.push(""),kn(a,f,r);continue}if(m+n[l]>r&&m>0&&n[l]>0){if(o.wordWrap===!1&&m<r){kn(a,f,r);continue}a.push("")}if(m+n[l]>r&&o.wordWrap===!1){kn(a,f,r);continue}a[a.length-1]+=f}o.trim!==!1&&(a=a.map((l)=>hr(l)));let c=[...a.join(`
|
|
3
|
+
`)];for(let[l,f]of c.entries()){if(e+=f,hn.has(f)){let{groups:g}=new RegExp(`(?:\\${ct}(?<code>\\d+)m|\\${Pn}(?<uri>.*)${vn})`).exec(c.slice(l).join(""))||{groups:{}};if(g.code!==void 0){let d=Number.parseFloat(g.code);s=d===gr?void 0:d}else g.uri!==void 0&&(i=g.uri.length===0?void 0:g.uri)}let m=lr.codes.get(Number(s));c[l+1]===`
|
|
4
4
|
`?(i&&(e+=nt("")),s&&m&&(e+=Dn(m))):f===`
|
|
5
5
|
`&&(s&&m&&(e+=Dn(s)),i&&(e+=nt(i)))}return e};function tt(t,r,o){return String(t).normalize().replace(/\r\n/g,`
|
|
6
6
|
`).split(`
|
|
7
|
-
`).map((e)=>
|
|
8
|
-
`)}var
|
|
7
|
+
`).map((e)=>dr(e,r,o)).join(`
|
|
8
|
+
`)}var br=["up","down","left","right","space","enter","cancel"],un={actions:new Set(br),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]])};function Mn(t,r){if(typeof t=="string")return un.aliases.get(t)===r;for(let o of t)if(o!==void 0&&Mn(o,r))return!0;return!1}function yr(t,r){if(t===r)return;let o=t.split(`
|
|
9
9
|
`),e=r.split(`
|
|
10
|
-
`),s=[];for(let i=0;i<Math.max(o.length,e.length);i++)o[i]!==e[i]&&s.push(i);return s}var
|
|
10
|
+
`),s=[];for(let i=0;i<Math.max(o.length,e.length);i++)o[i]!==e[i]&&s.push(i);return s}var xr=globalThis.process.platform.startsWith("win"),Nn=Symbol("clack:cancel");function S(t){return t===Nn}function pn(t,r){let o=t;o.isTTY&&o.setRawMode(r)}function mt({input:t=rt,output:r=ot,overwrite:o=!0,hideCursor:e=!0}={}){let s=I.createInterface({input:t,output:r,prompt:"",tabSize:1});I.emitKeypressEvents(t,s),t.isTTY&&t.setRawMode(!0);let i=(n,{name:a,sequence:c})=>{let l=String(n);if(Mn([l,a,c],"cancel")){e&&r.write(O.cursor.show),process.exit(0);return}if(!o)return;I.moveCursor(r,a==="return"?0:-1,a==="return"?-1:0,()=>{I.clearLine(r,1,()=>{t.once("keypress",i)})})};return e&&r.write(O.cursor.hide),t.once("keypress",i),()=>{t.off("keypress",i),e&&r.write(O.cursor.show),t.isTTY&&!xr&&t.setRawMode(!1),s.terminal=!1,s.close()}}var $r=Object.defineProperty,wr=(t,r,o)=>(r in t)?$r(t,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[r]=o,k=(t,r,o)=>(wr(t,typeof r!="symbol"?r+"":r,o),o);class Gn{constructor(t,r=!0){k(this,"input"),k(this,"output"),k(this,"_abortSignal"),k(this,"rl"),k(this,"opts"),k(this,"_render"),k(this,"_track",!1),k(this,"_prevFrame",""),k(this,"_subscribers",new Map),k(this,"_cursor",0),k(this,"state","initial"),k(this,"error",""),k(this,"value");let{input:o=rt,output:e=ot,render:s,signal:i,...n}=t;this.opts=n,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=s.bind(this),this._track=r,this._abortSignal=i,this.input=o,this.output=e}unsubscribe(){this._subscribers.clear()}setSubscriber(t,r){let o=this._subscribers.get(t)??[];o.push(r),this._subscribers.set(t,o)}on(t,r){this.setSubscriber(t,{cb:r})}once(t,r){this.setSubscriber(t,{cb:r,once:!0})}emit(t,...r){let o=this._subscribers.get(t)??[],e=[];for(let s of o)s.cb(...r),s.once&&e.push(()=>o.splice(o.indexOf(s),1));for(let s of e)s()}prompt(){return new Promise((t,r)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(Nn);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let o=new tr;o._write=(e,s,i)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),i()},this.input.pipe(o),this.rl=Qn.createInterface({input:this.input,output:o,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),Qn.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),pn(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(O.cursor.show),this.output.off("resize",this.render),pn(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(O.cursor.show),this.output.off("resize",this.render),pn(this.input,!1),t(Nn)})})}onKeypress(t,r){if(this.state==="error"&&(this.state="active"),r?.name&&(!this._track&&un.aliases.has(r.name)&&this.emit("cursor",un.aliases.get(r.name)),un.actions.has(r.name)&&this.emit("cursor",r.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),t==="\t"&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),t&&this.emit("key",t.toLowerCase()),r?.name==="return"){if(this.opts.validate){let o=this.opts.validate(this.value);o&&(this.error=o instanceof Error?o.message:o,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}Mn([t,r?.name,r?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
11
11
|
`),pn(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=tt(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
|
|
12
|
-
`).length-1;this.output.write(O.cursor.move(-999,t*-1))}render(){let t=tt(this._render(this)??"",process.stdout.columns,{hard:!0});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(O.cursor.hide);else{let r=
|
|
12
|
+
`).length-1;this.output.write(O.cursor.move(-999,t*-1))}render(){let t=tt(this._render(this)??"",process.stdout.columns,{hard:!0});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(O.cursor.hide);else{let r=yr(this._prevFrame,t);if(this.restoreCursor(),r&&r?.length===1){let o=r[0];this.output.write(O.cursor.move(0,o)),this.output.write(O.erase.lines(1));let e=t.split(`
|
|
13
13
|
`);this.output.write(e[o]),this._prevFrame=t,this.output.write(O.cursor.move(0,e.length-o-1));return}if(r&&r?.length>1){let o=r[0];this.output.write(O.cursor.move(0,o)),this.output.write(O.erase.down());let e=t.split(`
|
|
14
14
|
`).slice(o);this.output.write(e.join(`
|
|
15
|
-
`)),this._prevFrame=t;return}this.output.write(O.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}class Xn extends Gn{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(r)=>{this.output.write(O.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var
|
|
15
|
+
`)),this._prevFrame=t;return}this.output.write(O.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}class Xn extends Gn{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(r)=>{this.output.write(O.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var Er;Er=new WeakMap;class _n extends Gn{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}\u2588`;let t=this.value.slice(0,this.cursor),[r,...o]=this.value.slice(this.cursor);return`${t}${et.default.inverse(r)}${o.join("")}`}get cursor(){return this._cursor}constructor(t){super(t),this.on("finalize",()=>{this.value||(this.value=t.defaultValue)})}}var u=mn(Cn(),1),dn=mn(On(),1);import G from"process";function Rr(){return G.platform!=="win32"?G.env.TERM!=="linux":!!G.env.CI||!!G.env.WT_SESSION||!!G.env.TERMINUS_SUBLIME||G.env.ConEmuTask==="{cmd::Cmder}"||G.env.TERM_PROGRAM==="Terminus-Sublime"||G.env.TERM_PROGRAM==="vscode"||G.env.TERM==="xterm-256color"||G.env.TERM==="alacritty"||G.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var An=Rr(),E=(t,r)=>An?t:r,Or=E("\u25C6","*"),pt=E("\u25A0","x"),ut=E("\u25B2","x"),Un=E("\u25C7","o"),Sr=E("\u250C","T"),R=E("\u2502","|"),rn=E("\u2514","\u2014"),lt=E("\u25CF",">"),gt=E("\u25CB"," "),jo=E("\u25FB","[\u2022]"),Wo=E("\u25FC","[+]"),zo=E("\u25FB","[ ]"),Ko=E("\u25AA","\u2022"),Jo=E("\u2500","-"),Yo=E("\u256E","+"),Qo=E("\u251C","+"),Zo=E("\u256F","+"),Cr=E("\u25CF","\u2022"),Tr=E("\u25C6","*"),kr=E("\u25B2","!"),Nr=E("\u25A0","x"),ht=(t)=>{switch(t){case"initial":case"active":return u.default.cyan(Or);case"cancel":return u.default.red(pt);case"error":return u.default.yellow(ut);case"submit":return u.default.green(Un)}};var N=(t)=>new _n({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){let r=`${u.default.gray(R)}
|
|
16
16
|
${ht(this.state)} ${t.message}
|
|
17
17
|
`,o=t.placeholder?u.default.inverse(t.placeholder[0])+u.default.dim(t.placeholder.slice(1)):u.default.inverse(u.default.hidden("_")),e=this.value?this.valueWithCursor:o;switch(this.state){case"error":return`${r.trim()}
|
|
18
18
|
${u.default.yellow(R)} ${e}
|
|
@@ -27,20 +27,20 @@ ${u.default.gray(R)}`;default:return`${e}${u.default.cyan(R)} ${this.value?`${u
|
|
|
27
27
|
${u.default.cyan(rn)}
|
|
28
28
|
`}}}).prompt()};var qn=(t="")=>{process.stdout.write(`${u.default.gray(rn)} ${u.default.red(t)}
|
|
29
29
|
|
|
30
|
-
`)},dt=(t="")=>{process.stdout.write(`${u.default.gray(
|
|
30
|
+
`)},dt=(t="")=>{process.stdout.write(`${u.default.gray(Sr)} ${t}
|
|
31
31
|
`)},bt=(t="")=>{process.stdout.write(`${u.default.gray(R)}
|
|
32
32
|
${u.default.gray(rn)} ${t}
|
|
33
33
|
|
|
34
34
|
`)},X={message:(t="",{symbol:r=u.default.gray(R)}={})=>{let o=[`${u.default.gray(R)}`];if(t){let[e,...s]=t.split(`
|
|
35
35
|
`);o.push(`${r} ${e}`,...s.map((i)=>`${u.default.gray(R)} ${i}`))}process.stdout.write(`${o.join(`
|
|
36
36
|
`)}
|
|
37
|
-
`)},info:(t)=>{X.message(t,{symbol:u.default.blue(
|
|
37
|
+
`)},info:(t)=>{X.message(t,{symbol:u.default.blue(Cr)})},success:(t)=>{X.message(t,{symbol:u.default.green(Tr)})},step:(t)=>{X.message(t,{symbol:u.default.green(Un)})},warn:(t)=>{X.message(t,{symbol:u.default.yellow(kr)})},warning:(t)=>{X.warn(t)},error:(t)=>{X.message(t,{symbol:u.default.red(Nr)})}},Vo=`${u.default.gray(R)} `;var yt=({indicator:t="dots"}={})=>{let r=An?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],o=An?80:120,e=process.env.CI==="true",s,i,n=!1,a="",c,l=performance.now(),f=(y)=>{let $=y>1?"Something went wrong":"Canceled";n&&H($,y)},m=()=>f(2),g=()=>f(1),d=()=>{process.on("uncaughtExceptionMonitor",m),process.on("unhandledRejection",m),process.on("SIGINT",g),process.on("SIGTERM",g),process.on("exit",f)},h=()=>{process.removeListener("uncaughtExceptionMonitor",m),process.removeListener("unhandledRejection",m),process.removeListener("SIGINT",g),process.removeListener("SIGTERM",g),process.removeListener("exit",f)},w=()=>{if(c===void 0)return;e&&process.stdout.write(`
|
|
38
38
|
`);let y=c.split(`
|
|
39
|
-
`);process.stdout.write(dn.cursor.move(-999,y.length-1)),process.stdout.write(dn.erase.down(y.length))},
|
|
40
|
-
`);let $=0,
|
|
41
|
-
`):process.stdout.write(`${
|
|
42
|
-
`),h(),s()};return{start:b,stop:H,message:(y="")=>{a=
|
|
43
|
-
${d}`});if(S(h)||!h)throw new Error("Token is required to create runners");
|
|
39
|
+
`);process.stdout.write(dn.cursor.move(-999,y.length-1)),process.stdout.write(dn.erase.down(y.length))},C=(y)=>y.replace(/\.+$/,""),A=(y)=>{let $=(performance.now()-y)/1000,T=Math.floor($/60),L=Math.floor($%60);return T>0?`[${T}m ${L}s]`:`[${L}s]`},b=(y="")=>{n=!0,s=mt(),a=C(y),l=performance.now(),process.stdout.write(`${u.default.gray(R)}
|
|
40
|
+
`);let $=0,T=0;d(),i=setInterval(()=>{if(e&&a===c)return;w(),c=a;let L=u.default.magenta(r[$]);if(e)process.stdout.write(`${L} ${a}...`);else if(t==="timer")process.stdout.write(`${L} ${a} ${A(l)}`);else{let K=".".repeat(Math.floor(T)).slice(0,3);process.stdout.write(`${L} ${a}${K}`)}$=$+1<r.length?$+1:0,T=T<r.length?T+0.125:0},o)},H=(y="",$=0)=>{n=!1,clearInterval(i),w();let T=$===0?u.default.green(Un):$===1?u.default.red(pt):u.default.red(ut);a=C(y??a),t==="timer"?process.stdout.write(`${T} ${a} ${A(l)}
|
|
41
|
+
`):process.stdout.write(`${T} ${a}
|
|
42
|
+
`),h(),s()};return{start:b,stop:H,message:(y="")=>{a=C(y??a)}}},xt=async(t,r)=>{let o={},e=Object.keys(t);for(let s of e){let i=t[s],n=await i({results:o})?.catch((a)=>{throw a});if(typeof r?.onCancel=="function"&&S(n)){o[s]="canceled",r.onCancel({results:o});continue}o[s]=n}return o};var vr=!process.env.NO_COLOR&&(process.env.FORCE_COLOR||process.stdout.isTTY),Pr=["blue","cyan","gray","green","magenta","red","white","yellow"],Mr=["bold","dim","italic","underline","reset"],wt={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",reset:"\x1B[0m",underline:"\x1B[4m"},Gr={"\x1B[30m":"\x1B[90m","\x1B[31m":"\x1B[91m","\x1B[32m":"\x1B[92m","\x1B[33m":"\x1B[93m","\x1B[34m":"\x1B[94m","\x1B[35m":"\x1B[95m","\x1B[36m":"\x1B[96m","\x1B[37m":"\x1B[97m"};function Hn(t){return(r)=>vr?`${t}${r}${wt.reset}`:r}function $t({bright:t=!1,color:r}){let o=Bun.color(r,"ansi");if(!o)return"";return t?Gr[o]||o:o}var Xr=Pr.reduce((t,r)=>{return t[r]=Hn($t({color:r})),t[`${r}Bright`]=Hn($t({bright:!0,color:r})),t},{}),_r=Mr.reduce((t,r)=>{return t[r]=Hn(wt[r]),t},{}),p={...Xr,..._r};var _=({prefix:t="",level:r=process.env.DEBUG?0:1}={})=>{function o(...a){if(r<=0){let c=a.join(" ");console.log(bn({level:p.dim("DEBUG"),message:c,prefix:t}))}}function e(...a){if(r<=1){let c=a.join(" ");console.info(bn({level:p.cyan("INFO "),message:c,prefix:t}))}}function s(...a){if(r<=2){let c=a.join(" ");console.warn(bn({level:p.yellow("WARN "),message:c,prefix:t}))}}function i(...a){if(r<=3){let c=a.join(" ");console.error(bn({level:p.red("ERROR"),message:c,prefix:t}))}}function n(a){return _({level:r,prefix:`${t}:${a}`})}return{child:n,debug:o,error:i,info:e,warn:s}},Ln=_();function bn({prefix:t,level:r,message:o}){let e=new Date().toISOString().split("T")[1]?.split(".")[0]||"",s=t?`[${t}] `:"";return`${p.dim(e||"")} ${r} ${s}${o}`}var B=new Uint32Array(65536),Ar=(t,r)=>{let o=t.length,e=r.length,s=1<<o-1,i=-1,n=0,a=o,c=o;while(c--)B[t.charCodeAt(c)]|=1<<c;for(c=0;c<e;c++){let l=B[r.charCodeAt(c)],f=l|n;if(l|=(l&i)+i^i,n|=~(l|i),i&=l,n&s)a++;if(i&s)a--;n=n<<1|1,i=i<<1|~(f|n),n&=f}c=o;while(c--)B[t.charCodeAt(c)]=0;return a},Ur=(t,r)=>{let o=r.length,e=t.length,s=[],i=[],n=Math.ceil(o/32),a=Math.ceil(e/32);for(let h=0;h<n;h++)i[h]=-1,s[h]=0;let c=0;for(;c<a-1;c++){let h=0,w=-1,C=c*32,A=Math.min(32,e)+C;for(let b=C;b<A;b++)B[t.charCodeAt(b)]|=1<<b;for(let b=0;b<o;b++){let H=B[r.charCodeAt(b)],y=i[b/32|0]>>>b&1,$=s[b/32|0]>>>b&1,T=H|h,L=((H|$)&w)+w^w|H|$,K=h|~(L|w),fn=w&L;if(K>>>31^y)i[b/32|0]^=1<<b;if(fn>>>31^$)s[b/32|0]^=1<<b;K=K<<1|y,fn=fn<<1|$,w=fn|~(T|K),h=K&T}for(let b=C;b<A;b++)B[t.charCodeAt(b)]=0}let l=0,f=-1,m=c*32,g=Math.min(32,e-m)+m;for(let h=m;h<g;h++)B[t.charCodeAt(h)]|=1<<h;let d=e;for(let h=0;h<o;h++){let w=B[r.charCodeAt(h)],C=i[h/32|0]>>>h&1,A=s[h/32|0]>>>h&1,b=w|l,H=((w|A)&f)+f^f|w|A,y=l|~(H|f),$=f&H;if(d+=y>>>e-1&1,d-=$>>>e-1&1,y>>>31^C)i[h/32|0]^=1<<h;if($>>>31^A)s[h/32|0]^=1<<h;y=y<<1|C,$=$<<1|A,f=$|~(b|y),l=y&b}for(let h=m;h<g;h++)B[t.charCodeAt(h)]=0;return d},Et=(t,r)=>{if(t.length<r.length){let o=r;r=t,t=o}if(r.length===0)return t.length;if(t.length<=32)return Ar(t,r);return Ur(t,r)};function Rt(t,r,o=3){return r.map((i)=>({distance:Et(t.toLowerCase(),i.toLowerCase()),option:i})).filter(({distance:i})=>i<=Math.max(3,t.length/2)).sort((i,n)=>i.distance-n.distance).slice(0,o).map(({option:i})=>i)}function Ot(t,r){return r[t.toLowerCase()]||null}async function F(t,r={}){let{fallback:o,logLevel:e="warn",message:s="Operation failed gracefully"}=r;try{return await t()}catch(i){let n=i instanceof Error?i.message:String(i);if(console[e](`${s}: ${n}`),o)try{await o()}catch(a){console.error(`Fallback also failed: ${a instanceof Error?a.message:String(a)}`)}return}}var qr={backoffMultiplier:2,initialDelay:1000,maxAttempts:3,maxDelay:30000,onRetry:(t,r)=>{Ln.warn(`Retry attempt ${t}: ${r.message}`)},retryableErrors:["ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENOTFOUND","rate limit","429","503","502","504","npm ERR!","EPUBLISHCONFLICT"]};async function on(t,r={}){let o={...qr,...r},e=new Error("Operation failed");for(let s=1;s<=o.maxAttempts;s++)try{return await t()}catch(i){if(e=i instanceof Error?i:new Error(String(i)),!o.retryableErrors.some((c)=>e.message.toLowerCase().includes(c.toLowerCase()))||s===o.maxAttempts)throw e;o.onRetry(s,e);let a=Math.min(o.initialDelay*o.backoffMultiplier**(s-1),o.maxDelay);await new Promise((c)=>setTimeout(c,a))}throw e}var U=(t)=>{return t.map=(r)=>U((o)=>r(t(o))),t.or=(r)=>U((o)=>{try{return t(o)}catch(e){return r(o)}}),t},yn=()=>"bad banditype"();var St=(t)=>U((r)=>t.includes(r)?r:yn()),xn=(t)=>U((r)=>typeof r===typeof t?r:yn()),en=()=>xn(""),Ct=()=>xn(0),Tt=()=>xn(!0);var kt=()=>xn();var Nt=(t)=>U((r)=>r instanceof t?r:yn()),Bn=(t)=>Nt(Object).map((r)=>{let o={};for(let e in r){let s=t(r[e]);s!==void 0&&(o[e]=s)}return o}),D=(t)=>Nt(Object).map((r)=>{let o={};for(let e in t){let s=t[e](r[e]);s!==void 0&&(o[e]=s)}return o});function Hr(t,r){return U((o)=>{try{return t(o)}catch{try{return r(o)}catch{throw new Error("No matching schema in union")}}})}function J(t,r){return(o)=>{if(o===void 0)return r;return t(o)}}function vt(){return U((t)=>{let r=Ct()(t);if(!Number.isInteger(r)||r<=0)throw new Error("Must be a positive integer");return r})}function Pt(){return U((t)=>{let r=en()(t);try{return new URL(r),r}catch{throw new Error("Must be a valid URL")}})}function Mt(t,r){return U((o)=>{let e=en()(o);if(!t.test(e))throw new Error(r||`Must match pattern ${t}`);return e})}function sn(t){return{parse(r){try{return t(r)}catch(o){throw new Error(o instanceof Error?o.message:"Validation failed")}},safeParse(r){try{return{data:t(r),success:!0}}catch(o){return{error:o instanceof Error?o:new Error("Validation failed"),success:!1}}},validator:t}}function Y(){return Hr(kt(),en())}function Q(t){return J(en(),t)}function nn(t){return J(Tt(),t)}function $n(t,r){return J(St(t),r)}import{parseArgs as Vr}from"util";var{$:M}=globalThis.Bun;import{join as At}from"path";var{$:_t}=globalThis.Bun;import{tmpdir as Lr}from"os";var Gt={MACHINES_DIR:"machines",TEMP_DIR:Lr()};var Br=D({directory:Q("./gh-runners"),labels:Y(),name:Q("runner"),numberOfMachines:J(vt(),1),os:$n(["osx","linux","windows"],"osx"),overwrite:nn(!1),run:nn(!1),runnerGroup:Y(),url:Y()}),Ir=sn(Br),Xt=sn(D({defaultProfile:Y(),profiles:Bn(Ir.validator)}));var jr=["hydra.json",".hydra.json","hydra.toml",".hydra.toml"];async function Wr(t=process.cwd()){for(let r of jr){let o=At(t,r);if(await Bun.file(o).exists())return o}return null}async function W(t){let r=t?.configPath||await Wr();if(!r)return null;let o=Bun.file(r);if(!await o.exists())return null;try{let e=await o.text(),s=r.endsWith(".toml")?await zr(e):JSON.parse(e);return Xt.parse(s)}catch(e){if(e instanceof Error)throw new Error(`Invalid config file: ${e.message}`);throw e}}async function z(t,r){if(!t)return null;let o=r||t.defaultProfile;if(!o)return null;return t.profiles[o]||null}async function zr(t){let r=At(Gt.TEMP_DIR,`hydra-config-${Date.now()}.toml`);await Bun.write(r,t);try{let o=await import(r);return await _t`rm -f ${r}`.quiet(),o.default}catch(o){throw await _t`rm -f ${r}`.quiet(),new Error(`Failed to parse TOML configuration: ${o}`)}}function an(){let t=import.meta.path,r=t.substring(0,t.lastIndexOf("/"));return r.substring(0,r.lastIndexOf("/"))}var Kr=D({directory:Q(`${process.cwd()}/gh-runners`),labels:Y(),name:Q("runner"),numberOfMachines:J(Mt(/^\d+$/,"Number of machines must be a positive integer"),"1"),os:$n(["osx","linux","windows"],"osx"),overwrite:nn(!1),run:nn(!1),token:Q(process.env.GITHUB_PERSONAL_ACCESS_TOKEN??""),url:Pt()}),Ie=sn(Kr);var Z=_({prefix:"WorkerManager"}),v=new Set,Ut=!1;function Jr(){if(Ut)return;Ut=!0;let t=()=>{if(v.size>0)Z.info("Cleaning up workers...");qt()};process.on("exit",t),process.on("SIGINT",t),process.on("SIGTERM",t),process.on("uncaughtException",(r)=>{Z.error("Uncaught exception:",r),t(),process.exit(1)})}function Yr(t){v.add(t),Z.debug(`Worker added. Total workers: ${v.size}`),t.addEventListener("exit",()=>{v.delete(t),Z.debug(`Worker exited. Remaining workers: ${v.size}`)})}function Qr(t){if(v.has(t))t.terminate(),v.delete(t),Z.debug(`Worker removed. Remaining workers: ${v.size}`)}function qt(){if(v.size>0){Z.info(`Terminating ${v.size} workers...`);for(let t of v)try{t.terminate()}catch(r){Z.error("Failed to terminate worker:",r)}v.clear()}}function Zr(){return v.size}Jr();var wn={add:Yr,remove:Qr,get size(){return Zr()},terminateAll:qt};var P=_({prefix:"createMachines"});async function Ht(){let t=await Dr(),{overwrite:r,directory:o,numberOfMachines:e,os:s,run:i,name:n,labels:a,runnerGroup:c}=t,{token:l,url:f}=t;if(!f)throw new Error("URL (-u) parameter is required");if(!l){let d=Fr(f),h=await j({message:`No token provided. Would you like to open GitHub to get a runner token?
|
|
43
|
+
${d}`});if(S(h)||!h)throw new Error("Token is required to create runners");P.info("Opening GitHub runner settings..."),await M`open ${d}`.quiet();let w=await N({message:"Enter the runner registration token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(C)=>{if(!C||C.trim().length===0)return"Token is required";return}});if(S(w))throw new Error("Token is required to create runners");l=w.trim()}if(P.info(`Creating ${e} runners in ${o}`),P.debug(`OS: ${s}, Name: ${n}, Labels: ${a||"none"}`),await Bun.file(o).exists())if(r)P.warn(`Directory ${o} exists, removing...`),await M`rm -rf ${o}`;else throw new Error(`Directory ${o} already exists`);let g=await no({directory:o,os:s});if(await to({directory:o,numberOfMachines:e,overwrite:r,runnerBase:g}),!i){P.info("Runners created but not started");return}ro({directory:o,labels:a,name:n,numberOfMachines:e,runnerGroup:c,token:l,url:f})}function Fr(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners/new`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners/new`;return t}catch{return t}}async function Dr(){let{values:t}=Vr({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},labels:{short:"l",type:"string"},name:{default:"runner",short:"n",type:"string"},numberOfMachines:{default:"1",short:"m",type:"string"},os:{default:"osx",short:"s",type:"string"},overwrite:{default:!1,short:"f",type:"boolean"},profile:{short:"p",type:"string"},run:{default:!1,short:"r",type:"boolean"},runnerGroup:{short:"g",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,labels:t.labels,name:t.name,numberOfMachines:t.numberOfMachines,os:t.os,overwrite:t.overwrite,run:t.run,runnerGroup:t.runnerGroup,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,labels:e.labels??o.labels,name:e.name??o.name??"runner",numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",os:e.os??o.os??"osx",overwrite:e.overwrite??o.overwrite??!1,run:e.run??o.run??!1,runnerGroup:e.runnerGroup??o.runnerGroup,token:e.token,url:e.url??o.url};return{directory:e.directory,labels:e.labels,name:e.name,numberOfMachines:e.numberOfMachines,os:e.os,overwrite:e.overwrite,run:e.run,runnerGroup:e.runnerGroup,token:e.token,url:e.url}}async function no({directory:t,os:r}){let o=P.child("download");o.info(`Fetching latest runner version for ${r}...`);let e=await on(async()=>(await M`curl -Ls -o /dev/null -w "%{url_effective}" https://github.com/actions/runner/releases/latest`).text(),{onRetry:(l,f)=>{o.warn(`Retrying GitHub API call (attempt ${l}): ${f.message}`)}}),i=(await M`basename ${e}`).text().trim().replace("v",""),n=`actions-runner-${r}-x64-${i}.tar.gz`,a=`https://github.com/actions/runner/releases/download/v${i}/${n}`;if(o.debug(`Runner version: ${i}`),o.debug(`Download URL: ${a}`),await M`mkdir -p ${t}`,await M`mkdir -p ${t}/machines`,!await Bun.file(`${t}/${n}`).exists())o.info("Downloading runner image..."),await on(async()=>await M`curl -o ${t}/${n} -L ${a}`,{maxAttempts:5,onRetry:(l,f)=>{o.warn(`Retrying runner download (attempt ${l}): ${f.message}`)}}),o.info("Download complete");else o.info("Runner image already exists, skipping download");return n}async function to({overwrite:t,numberOfMachines:r,directory:o,runnerBase:e}){let s=P.child("extract"),i=Number(r),n=(()=>{try{let f=Bun.spawnSync(["nproc"]);return Number.parseInt(f.stdout.toString().trim(),10)||4}catch{try{let f=Bun.spawnSync(["sysctl","-n","hw.ncpu"]);return Number.parseInt(f.stdout.toString().trim(),10)||4}catch{return 4}}})(),a=Math.min(Math.max(2,Math.floor(n/2)),i,8);s.info(`Extracting ${i} runners with concurrency of ${a}`);let c=Array.from({length:i},(f,m)=>m+1).map((f)=>({execute:async()=>{let m=`${o}/machines/${f}`;if(await Bun.file(m).exists())if(t)s.debug(`Machine ${f} already exists, removing...`),await M`rm -rf ${m}`;else{s.debug(`Machine ${f} already exists, skipping...`);return}await M`mkdir -p ${m}`,await M`tar xzf ${e} -C ${m.replace(`${o}/`,"")}`.cwd(o);let d=`${an()}/src/runner`;await M`cp -R ${d}/hooks ${m}`,await M`cp -R ${d}/.runner-env ${m}/.runner-env`,s.debug(`Machine ${f} extracted successfully`)},runnerIndex:f})),l=[];for(let f=0;f<c.length;f+=a){let m=c.slice(f,f+a),g=await Promise.allSettled(m.map((d)=>d.execute()));for(let[d,h]of g.entries())if(h.status==="rejected")throw s.error(`Failed to extract runner ${m[d]?.runnerIndex}: ${h.reason}`),h.reason;l.push(...g)}s.info(`Successfully extracted ${i} runners`)}function ro({directory:t,numberOfMachines:r,token:o,url:e,name:s,labels:i,runnerGroup:n}){P.info(`Starting ${r} runners...`);for(let a=1;a<=Number(r);a++){let c=`${an()}/src/runner-worker.ts`,l=`${s}-${a}`,f=new Worker(c,{name:l,ref:!0});f.addEventListener("open",()=>{P.info(`Worker ${l} started`),f.postMessage({index:a,labels:i,machineCwd:`${t}/machines/${a}`,name:s,runnerGroup:n,token:o,url:e})}),f.addEventListener("message",({data:m})=>{let g=m.type==="error"?"error":"info";P[g](`${l}: ${m.message}`)}),f.addEventListener("error",(m)=>{P.error(`Worker ${l} error:`,m)}),f.addEventListener("exit",(m)=>{P.info(`Worker ${l} exited with code ${m}`)}),wn.add(f)}P.info("All workers started. Press Ctrl+C to stop all machines")}var Lt="0.3.3";var Bt={create:`
|
|
44
44
|
hydra create - Create and register new GitHub runner machines
|
|
45
45
|
|
|
46
46
|
USAGE
|
|
@@ -151,10 +151,10 @@ EXAMPLES
|
|
|
151
151
|
|
|
152
152
|
# Status using profile
|
|
153
153
|
hydra status -p production
|
|
154
|
-
`};function cn(t){if(t&&
|
|
154
|
+
`};function cn(t){if(t&&Bt[t]){let o=Bt[t].split(`
|
|
155
155
|
`).map((e)=>{if(e.startsWith("hydra"))return p.bold(e);if(e==="USAGE"||e==="OPTIONS"||e==="EXAMPLES")return p.bold(e);if(e.startsWith(" -")){let s=e.match(/^(\s+-\w,\s--\w+)\s+(.+)$/);if(s){let[,i="",n=""]=s,a=n.replace("(required)",p.red("(required)")).replace(/\(default: ([^)]+)\)/g,(c,l)=>p.dim(`(default: ${l})`)).replace(/\[boolean\]/g,p.cyan("[boolean]")).replace(/\[string\]/g,p.green("[string]")).replace(/\[number\]/g,p.magenta("[number]"));return` ${p.yellow(i.padEnd(26))} ${a}`}}if(e.startsWith(" # "))return p.dim(e);if(e.startsWith(" hydra"))return` ${p.cyan(e.trim())}`;return e}).join(`
|
|
156
156
|
`);console.info(o);return}console.info(`
|
|
157
|
-
${p.bold(
|
|
157
|
+
${p.bold(`Hydra@${Lt} - GitHub self-hosted runner manager`)}
|
|
158
158
|
|
|
159
159
|
${p.bold("USAGE")}
|
|
160
160
|
hydra <command> [options]
|
|
@@ -168,17 +168,17 @@ ${p.bold("COMMANDS")}
|
|
|
168
168
|
${p.green("help")} Show this help message
|
|
169
169
|
|
|
170
170
|
Use ${p.cyan("hydra <command> --help")} for more information about a command.
|
|
171
|
-
`)}import{resolve as
|
|
172
|
-
`));let s=await xt({profileName:()=>
|
|
171
|
+
`)}import{resolve as eo}from"path";import{parseArgs as so}from"util";var{$:In}=globalThis.Bun;async function It(){let{toml:t}=ao(),r=t?"hydra.toml":"hydra.json",o=eo(process.cwd(),r);if(await Bun.file(o).exists()){let m=await j({initialValue:!1,message:`Configuration file ${r} already exists. Overwrite?`});if(S(m)||!m)qn("Configuration cancelled"),process.exit(0)}dt(p.cyan("\uD83D\uDE80 Hydra Configuration Setup")),console.info(p.dim("This will create a configuration file with your runner settings.")),console.info(p.dim(`You can always edit the file later or create additional profiles.
|
|
172
|
+
`));let s=await xt({profileName:()=>N({message:"Profile name?",placeholder:"default"}),directory:()=>N({defaultValue:"./gh-runners",message:"Directory to store runners?",placeholder:"./gh-runners"}),name:()=>N({defaultValue:"runner",message:"Runner name prefix?",placeholder:"runner"}),labels:({results:m})=>{let g=m.name||"runner";return N({defaultValue:g,message:"Runner labels (comma-separated)?",placeholder:g})},numberOfMachines:()=>N({defaultValue:"1",message:"Number of runner machines?",placeholder:"1",validate:(m)=>{let g=Number.parseInt(m,10);if(Number.isNaN(g)||g<1)return"Please enter a valid number greater than 0";return}}),url:()=>N({message:"GitHub repository or organization URL? (optional)",placeholder:"https://github.com/org/repo"})},{onCancel:()=>{qn("Configuration cancelled"),process.exit(0)}}),{profileName:i,labels:n,numberOfMachines:a,...c}=s,l={defaultProfile:i,profiles:{[i]:{...c,labels:n,numberOfMachines:Number.parseInt(a,10),os:"osx",overwrite:!1,run:!1}}},f=JSON.stringify(l,null,2);if(await Bun.write(o,f),await F(async()=>{await In`chmod 600 ${o}`.quiet()},{logLevel:"warn",message:"Could not set secure file permissions"}),bt(p.green(`\u2713 Configuration saved to ${r}`)),console.info(`
|
|
173
173
|
Example usage:`),console.info(p.cyan(` hydra create -p ${i} --token YOUR_TOKEN${s.url?"":" --url REPO_URL"}`)),console.info(`
|
|
174
|
-
You can add more profiles by editing the configuration file.`),s.url)await
|
|
174
|
+
You can add more profiles by editing the configuration file.`),s.url)await io(s.url)}async function io(t){let r=/github\.com[:/]([^/]+)(?:\/([^/.]+))?/,o=t.match(r);if(!o)return;let[,e,s]=o,n=`https://github.com/${s?`${e}/${s}`:`organizations/${e}`}/settings/actions/runners`;console.info(`
|
|
175
175
|
Opening GitHub settings: ${p.cyan(n)}`),await F(async()=>{await In`open ${n}`.quiet()},{fallback:async()=>{await F(async()=>{await In`xdg-open ${n}`.quiet()},{fallback:()=>{console.info(`
|
|
176
|
-
Please open the URL manually to add a new runner token.`)},logLevel:"info",message:"Alternative browser open method also failed"})},logLevel:"info",message:"Could not open browser automatically"})}function
|
|
177
|
-
${c}`});if(S(l)||!l)throw console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token is required to unregister runners (or use --force)");jn.info("Opening GitHub runner settings..."),await V`open ${c}`.quiet();let f=await
|
|
178
|
-
${l}`});if(S(f)||!f)throw new Error("Token is required to run machines");q.info("Opening GitHub runner settings..."),await
|
|
179
|
-
`).filter(Boolean)},{fallback:()=>{},logLevel:"debug",message:"No local runners found"})||[]}async function
|
|
176
|
+
Please open the URL manually to add a new runner token.`)},logLevel:"info",message:"Alternative browser open method also failed"})},logLevel:"info",message:"Could not open browser automatically"})}function ao(){let{values:t}=so({allowPositionals:!0,args:Bun.argv,options:{toml:{default:!1,short:"t",type:"boolean"}},strict:!0});return t}import{parseArgs as co}from"util";var{$:V}=globalThis.Bun;var jn=_({prefix:"removeMachines"});async function jt(){let t=await fo(),{directory:r,numberOfMachines:o,force:e}=t,{token:s,url:i}=t,n=`${r}/machines`;if(!await Bun.file(n).exists())throw new Error(`Machines directory not found at ${n}. Nothing to remove.`);if(!s&&!e){if(!i)throw console.warn(p.yellow("\u26A0\uFE0F No token or URL provided. Runners will not be unregistered from GitHub.")),console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token (-t) and URL (-u) parameters are required or use --force");let c=go(i),l=await j({message:`No token provided. Would you like to open GitHub to get a runner token for unregistration?
|
|
177
|
+
${c}`});if(S(l)||!l)throw console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token is required to unregister runners (or use --force)");jn.info("Opening GitHub runner settings..."),await V`open ${c}`.quiet();let f=await N({message:"Enter the runner removal token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(m)=>{if(!m||m.trim().length===0)return"Token is required";return}});if(S(f))throw console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token is required to unregister runners (or use --force)");s=f.trim()}if(s&&i)console.info(p.cyan("Unregistering runners from GitHub...")),await mo({directory:r,numberOfMachines:o,token:s});else if(!e)throw console.warn(p.yellow("\u26A0\uFE0F No token or URL provided. Runners will not be unregistered from GitHub.")),console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token (-t) and URL (-u) parameters are required or use --force");await lo({directory:r,numberOfMachines:o}),console.info(p.green("\u2713 Runners successfully removed"))}async function fo(){let{values:t}=co({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},force:{default:!1,short:"f",type:"boolean"},numberOfMachines:{default:"1",short:"m",type:"string"},profile:{short:"p",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,force:t.force,numberOfMachines:t.numberOfMachines,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,force:e.force,numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",token:e.token,url:e.url??o.url};return e}async function mo({directory:t,numberOfMachines:r,token:o}){let e=jn.child("unregister"),s=Number(r),i=(()=>{try{let g=Bun.spawnSync(["nproc"]);return Number.parseInt(g.stdout.toString().trim(),10)||4}catch{try{let g=Bun.spawnSync(["sysctl","-n","hw.ncpu"]);return Number.parseInt(g.stdout.toString().trim(),10)||4}catch{return 4}}})(),n=Math.min(Math.max(2,Math.floor(i/2)),s,8);e.info(`Unregistering ${s} runners with concurrency of ${n}`);let a=Array.from({length:s},(g,d)=>d+1).map((g)=>({execute:async()=>{let d=`${t}/machines/${g}`;if(!await Bun.file(d).exists())return e.debug(`Machine ${g} doesn't exist, skipping...`),{runnerIndex:g,status:"skipped"};try{return e.debug(`Unregistering machine ${g}...`),await V`${d}/config.sh remove --token ${o}`.quiet(),e.info(`Successfully unregistered machine ${g} from GitHub`),{runnerIndex:g,status:"success"}}catch(w){return e.warn(`Unable to unregister machine ${g}: ${w}`),{error:w,runnerIndex:g,status:"failed"}}},runnerIndex:g})),c=[];for(let g=0;g<a.length;g+=n){let d=a.slice(g,g+n),h=await Promise.allSettled(d.map((w)=>w.execute()));c.push(...h)}let l=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="success").length,f=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="failed").length,m=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="skipped").length;e.info(`Unregistration complete: ${l} successful, ${f} failed, ${m} skipped`)}async function lo({directory:t,numberOfMachines:r}){let o=jn.child("removeDirectories"),e=Number(r),s=Array.from({length:e},(c,l)=>l+1).map((c)=>({execute:async()=>{let l=`${t}/machines/${c}`;if(!await Bun.file(l).exists())return{runnerIndex:c,status:"skipped"};try{return await V`rm -rf ${l}`.quiet(),o.debug(`Removed machine ${c} directory`),{runnerIndex:c,status:"success"}}catch(m){return o.error(`Error removing machine ${c} directory: ${m}`),{error:m,runnerIndex:c,status:"failed"}}},runnerIndex:c})),i=await Promise.allSettled(s.map((c)=>c.execute())),n=i.filter((c)=>c.status==="fulfilled"&&c.value?.status==="success").length,a=i.filter((c)=>c.status==="fulfilled"&&c.value?.status==="failed").length;if(o.info(`Directory removal complete: ${n} removed, ${a} failed`),a>0)throw new Error(`Failed to remove ${a} runner directories`);try{let c=`${t}/machines`;if(!(await V`ls -A ${c}`.text()).trim()){if(await V`rm -rf ${c}`.quiet(),!(await V`ls -A ${t}`.text()).trim())await V`rm -rf ${t}`.quiet();console.info(p.green("\u2713 Removed empty directories"))}}catch(c){}}function go(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners`;return t}catch{return t}}import{parseArgs as po}from"util";var{$:uo}=globalThis.Bun;var q=_({prefix:"runMachines"});async function Wt(){let t=await ho(),{directory:r,numberOfMachines:o,name:e,labels:s,runnerGroup:i}=t,{token:n,url:a}=t;if(!a)throw new Error("URL (-u) parameter is required");if(!n){let l=yo(a),f=await j({message:`No token provided. Would you like to open GitHub to get a runner token?
|
|
178
|
+
${l}`});if(S(f)||!f)throw new Error("Token is required to run machines");q.info("Opening GitHub runner settings..."),await uo`open ${l}`.quiet();let m=await N({message:"Enter the runner registration token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(g)=>{if(!g||g.trim().length===0)return"Token is required";return}});if(S(m))throw new Error("Token is required to run machines");n=m.trim()}if(q.info(`Starting ${o} runners from ${r}`),q.debug(`Name: ${e}, Labels: ${s||"none"}`),!await Bun.file(`${r}/machines`).exists())throw new Error(`Machines directory not found at ${r}/machines. Run 'hydra create' first.`);await bo({directory:r,labels:s,name:e,numberOfMachines:o,runnerGroup:i,token:n,url:a})}async function ho(){let{values:t}=po({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},labels:{short:"l",type:"string"},name:{default:"runner",short:"n",type:"string"},numberOfMachines:{default:"1",short:"m",type:"string"},profile:{short:"p",type:"string"},runnerGroup:{short:"g",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,labels:t.labels,name:t.name,numberOfMachines:t.numberOfMachines,runnerGroup:t.runnerGroup,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,labels:e.labels??o.labels,name:e.name??o.name??"runner",numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",runnerGroup:e.runnerGroup??o.runnerGroup,token:e.token,url:e.url??o.url};return e}async function bo({directory:t,numberOfMachines:r,token:o,url:e,name:s,labels:i,runnerGroup:n}){q.info(`Starting ${r} workers...`);for(let a=1;a<=Number(r);a++){let c=`${t}/machines/${a}`;if(!await Bun.file(c).exists()){q.warn(`Machine ${a} doesn't exist, skipping...`);continue}let f=`${an()}/src/runner-worker.ts`,m=`${s}-${a}`,g=new Worker(f,{name:m,ref:!0});g.addEventListener("message",({data:d})=>{let h=d.type==="error"?"error":"info";q[h](`${m}: ${d.message}`)}),g.addEventListener("error",(d)=>{q.error(`Worker ${m} error:`,d)}),g.addEventListener("exit",(d)=>{q.info(`Worker ${m} exited with code ${d}`)}),g.postMessage({index:a,labels:i,machineCwd:c,name:s,runnerGroup:n,token:o,url:e}),q.info(`Worker ${m} starting...`),wn.add(g)}q.info("All workers started. Press Ctrl+C to stop all machines")}function yo(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners/new`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners/new`;return t}catch{return t}}import{parseArgs as xo}from"util";var{$:$o}=globalThis.Bun;async function zt(){let t=await wo(),{directory:r,token:o,url:e,json:s}=t;if(!o||!e)throw new Error("Token (-t) and URL (-u) parameters are required");let i=yt();i.start("Fetching runner status...");try{let n=await Eo(r),a=await Ro(e,o),c=Oo(n,a);if(i.stop("Runner status fetched"),s)console.log(JSON.stringify(c,null,2));else So(c)}catch(n){throw i.stop("Failed to fetch runner status"),n}}async function wo(){let{values:t}=xo({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},json:{default:!1,short:"j",type:"boolean"},profile:{short:"p",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile);return{directory:t.directory||o?.directory||`${process.cwd()}/gh-runners`,json:t.json,token:t.token,url:t.url||o?.url}}async function Eo(t){let r=`${t}/machines`;return await F(async()=>{return(await $o`ls ${r} 2>/dev/null || true`.quiet()).stdout.toString().trim().split(`
|
|
179
|
+
`).filter(Boolean)},{fallback:()=>{},logLevel:"debug",message:"No local runners found"})||[]}async function Ro(t,r){let o=t.match(/github\.com[:/]([^/]+)(?:\/([^/.]+))?/);if(!o)throw new Error("Invalid GitHub URL");let[,e,s]=o,i=s?`https://api.github.com/repos/${e}/${s}/actions/runners`:`https://api.github.com/orgs/${e}/actions/runners`;return on(async()=>{let n={Accept:"application/vnd.github.v3+json",Authorization:`Bearer ${r}`},a=await fetch(i,{headers:n});if(!a.ok)throw new Error(`GitHub API error: ${a.status} ${a.statusText}`);return await a.json()},{onRetry:(n,a)=>{X.warn(`Retrying GitHub API call (attempt ${n}): ${a.message}`)}})}function Oo(t,r){let o=[],e=new Map(r.runners.map((s)=>[s.name,s]));for(let s of t){let i=`runner-${s}`,n=e.get(i);if(n)o.push({busy:n.busy,labels:n.labels.map((a)=>a.name),name:i,os:n.os,status:n.busy?"busy":n.status==="online"?"online":"offline"});else o.push({busy:!1,labels:[],name:i,os:"unknown",status:"offline"})}return o}function So(t){if(t.length===0){X.info("No runners found");return}console.log(`
|
|
180
180
|
${p.bold("Runner Status:")}`),console.log("\u2500".repeat(80));let r={busy:p.yellow,offline:p.red,online:p.green};for(let e of t){let s=r[e.status],i=e.status.toUpperCase().padEnd(7);console.log(`${s("\u25CF")} ${s(i)} ${p.cyan(e.name.padEnd(20))} ${p.dim(`OS: ${e.os.padEnd(10)}`)} ${e.labels.length>0?p.dim(`Labels: ${e.labels.join(", ")}`):""}`)}console.log("\u2500".repeat(80));let o={busy:t.filter((e)=>e.status==="busy").length,offline:t.filter((e)=>e.status==="offline").length,online:t.filter((e)=>e.status==="online").length,total:t.length};console.log(`
|
|
181
181
|
${p.bold("Summary:")} Total: ${o.total} | ${p.green(`Online: ${o.online}`)} | ${p.yellow(`Busy: ${o.busy}`)} | ${p.red(`Offline: ${o.offline}`)}
|
|
182
|
-
`)}var En=["init","create","run","remove","status","help"],
|
|
182
|
+
`)}var En=["init","create","run","remove","status","help"],Co={c:"create",ceate:"create",craete:"create",cretae:"create",del:"remove",delete:"remove",h:"help",i:"init",info:"status",initialise:"init",inti:"init",intialize:"init",list:"status",ls:"status",new:"create",r:"run",remvoe:"remove",rm:"remove",rmove:"remove",rnu:"run",runn:"run",s:"status",start:"run",stat:"status",stop:"remove",sttaus:"status",t:"troubleshoot"};async function To(){try{let[,,t,...r]=process.argv;if(!t||t==="--help"||t==="-h")cn(),process.exit(0);let o=t;if(!En.includes(t)){let e=Ot(t,Co);if(e&&En.includes(e))o=e,console.log(p.yellow(`Assuming you meant '${e}'
|
|
183
183
|
`))}if(!En.includes(o)){console.error(p.red(`Unknown command: ${t}`));let e=Rt(t,En);if(e.length>0){console.error(`
|
|
184
|
-
Did you mean one of these?`);for(let s of e)console.error(` ${p.cyan(s)}`);console.error()}cn(),process.exit(1)}if(r.includes("--help")||r.includes("-h"))cn(o),process.exit(0);switch(o){case"init":await
|
|
184
|
+
Did you mean one of these?`);for(let s of e)console.error(` ${p.cyan(s)}`);console.error()}cn(),process.exit(1)}if(r.includes("--help")||r.includes("-h"))cn(o),process.exit(0);switch(o){case"init":await It();break;case"create":await Ht();break;case"run":await Wt();break;case"remove":await jt();break;case"status":await zt();break;case"help":{let e=r[0];cn(e);break}default:throw new Error(`Unknown command: ${o}`)}process.exit(0)}catch(t){let r=t instanceof Error?t:new Error(String(t));X.error(r.message),process.exit(1)}}await To();
|
package/package.json
CHANGED