country-flag-cli 0.0.3 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
package/dist/cli.js CHANGED
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env node
2
- var k=Object.create;var v=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var I=t=>v(t,"__esModule",{value:!0});var L=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var U=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of H(e))!j.call(t,r)&&(n||r!=="default")&&v(t,r,{get:()=>e[r],enumerable:!(i=q(e,r))||i.enumerable});return t},F=(t,e)=>U(I(v(t!=null?k(N(t)):{},"default",!e&&t&&t.__esModule?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var A=L((d,E)=>{var M=require("events").EventEmitter,_=require("child_process").spawn,m=require("path"),D=m.dirname,b=m.basename,w=require("fs");require("util").inherits(s,M);d=E.exports=new s;d.Command=s;d.Option=c;function c(t,e){this.flags=t,this.required=t.indexOf("<")>=0,this.optional=t.indexOf("[")>=0,this.bool=t.indexOf("-no-")===-1,t=t.split(/[ ,|]+/),t.length>1&&!/^[[<]/.test(t[1])&&(this.short=t.shift()),this.long=t.shift(),this.description=e||""}c.prototype.name=function(){return this.long.replace("--","").replace("no-","")};c.prototype.attributeName=function(){return G(this.name())};c.prototype.is=function(t){return this.short===t||this.long===t};function s(t){this.commands=[],this.options=[],this._execs={},this._allowUnknownOption=!1,this._args=[],this._name=t||""}s.prototype.command=function(t,e,n){typeof e=="object"&&e!==null&&(n=e,e=null),n=n||{};var i=t.split(/ +/),r=new s(i.shift());return e&&(r.description(e),this.executables=!0,this._execs[r._name]=!0,n.isDefault&&(this.defaultExecutable=r._name)),r._noHelp=!!n.noHelp,this.commands.push(r),r.parseExpectedArgs(i),r.parent=this,e?this:r};s.prototype.arguments=function(t){return this.parseExpectedArgs(t.split(/ +/))};s.prototype.addImplicitHelpCommand=function(){this.command("help [cmd]","display help for [cmd]")};s.prototype.parseExpectedArgs=function(t){if(!!t.length){var e=this;return t.forEach(function(n){var i={required:!1,name:"",variadic:!1};switch(n[0]){case"<":i.required=!0,i.name=n.slice(1,-1);break;case"[":i.name=n.slice(1,-1);break}i.name.length>3&&i.name.slice(-3)==="..."&&(i.variadic=!0,i.name=i.name.slice(0,-3)),i.name&&e._args.push(i)}),this}};s.prototype.action=function(t){var e=this,n=function(o,h){o=o||[],h=h||[];var a=e.parseOptions(h);O(e,a.unknown),a.unknown.length>0&&e.unknownOption(a.unknown[0]),a.args.length&&(o=a.args.concat(o)),e._args.forEach(function(p,u){p.required&&o[u]==null?e.missingArgument(p.name):p.variadic&&(u!==e._args.length-1&&e.variadicArgNotLast(p.name),o[u]=o.splice(u))}),e._args.length?o[e._args.length]=e:o.push(e),t.apply(e,o)},i=this.parent||this,r=i===this?"*":this._name;return i.on("command:"+r,n),this._alias&&i.on("command:"+this._alias,n),this};s.prototype.option=function(t,e,n,i){var r=this,o=new c(t,e),h=o.name(),a=o.attributeName();if(typeof n!="function")if(n instanceof RegExp){var p=n;n=function(u,g){var l=p.exec(u);return l?l[0]:g}}else i=n,n=null;return(!o.bool||o.optional||o.required)&&(o.bool||(i=!0),i!==void 0&&(r[a]=i,o.defaultValue=i)),this.options.push(o),this.on("option:"+h,function(u){u!==null&&n&&(u=n(u,r[a]===void 0?i:r[a])),typeof r[a]=="boolean"||typeof r[a]=="undefined"?u==null?r[a]=o.bool?i||!0:!1:r[a]=u:u!==null&&(r[a]=u)}),this};s.prototype.allowUnknownOption=function(t){return this._allowUnknownOption=arguments.length===0||t,this};s.prototype.parse=function(t){this.executables&&this.addImplicitHelpCommand(),this.rawArgs=t,this._name=this._name||b(t[1],".js"),this.executables&&t.length<3&&!this.defaultExecutable&&t.push("--help");var e=this.parseOptions(this.normalize(t.slice(2))),n=this.args=e.args,i=this.parseArgs(this.args,e.unknown),r=i.args[0],o=null;return r&&(o=this.commands.filter(function(h){return h.alias()===r})[0]),this._execs[r]&&typeof this._execs[r]!="function"?this.executeSubCommand(t,n,e.unknown):o?(n[0]=o._name,this.executeSubCommand(t,n,e.unknown)):this.defaultExecutable?(n.unshift(this.defaultExecutable),this.executeSubCommand(t,n,e.unknown)):i};s.prototype.executeSubCommand=function(t,e,n){e=e.concat(n),e.length||this.help(),e[0]==="help"&&e.length===1&&this.help(),e[0]==="help"&&(e[0]=e[1],e[1]="--help");var i=t[1],r=b(i,m.extname(i))+"-"+e[0],o,h=w.realpathSync(i);o=D(h);var a=m.join(o,r),p=!1;y(a+".js")?(r=a+".js",p=!0):y(a+".ts")?(r=a+".ts",p=!0):y(a)&&(r=a),e=e.slice(1);var u;process.platform!=="win32"?p?(e.unshift(r),e=(process.execArgv||[]).concat(e),u=_(process.argv[0],e,{stdio:"inherit",customFds:[0,1,2]})):u=_(r,e,{stdio:"inherit",customFds:[0,1,2]}):(e.unshift(r),u=_(process.execPath,e,{stdio:"inherit"}));var g=["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"];g.forEach(function(l){process.on(l,function(){u.killed===!1&&u.exitCode===null&&u.kill(l)})}),u.on("close",process.exit.bind(process)),u.on("error",function(l){l.code==="ENOENT"?console.error("error: %s(1) does not exist, try --help",r):l.code==="EACCES"&&console.error("error: %s(1) not executable. try chmod or run with root",r),process.exit(1)}),this.runningCommand=u};s.prototype.normalize=function(t){for(var e=[],n,i,r,o=0,h=t.length;o<h;++o)if(n=t[o],o>0&&(i=this.optionFor(t[o-1])),n==="--"){e=e.concat(t.slice(o));break}else i&&i.required?e.push(n):n.length>1&&n[0]==="-"&&n[1]!=="-"?n.slice(1).split("").forEach(function(a){e.push("-"+a)}):/^--/.test(n)&&~(r=n.indexOf("="))?e.push(n.slice(0,r),n.slice(r+1)):e.push(n);return e};s.prototype.parseArgs=function(t,e){var n;return t.length?(n=t[0],this.listeners("command:"+n).length?this.emit("command:"+t.shift(),t,e):this.emit("command:*",t)):(O(this,e),e.length>0&&this.unknownOption(e[0]),this.commands.length===0&&this._args.filter(function(i){return i.required}).length===0&&this.emit("command:*")),this};s.prototype.optionFor=function(t){for(var e=0,n=this.options.length;e<n;++e)if(this.options[e].is(t))return this.options[e]};s.prototype.parseOptions=function(t){for(var e=[],n=t.length,i,r,o,h=[],a=0;a<n;++a){if(o=t[a],i){e.push(o);continue}if(o==="--"){i=!0;continue}if(r=this.optionFor(o),r){if(r.required){if(o=t[++a],o==null)return this.optionMissingArgument(r);this.emit("option:"+r.name(),o)}else r.optional?(o=t[a+1],o==null||o[0]==="-"&&o!=="-"?o=null:++a,this.emit("option:"+r.name(),o)):this.emit("option:"+r.name());continue}if(o.length>1&&o[0]==="-"){h.push(o),a+1<t.length&&t[a+1][0]!=="-"&&h.push(t[++a]);continue}e.push(o)}return{args:e,unknown:h}};s.prototype.opts=function(){for(var t={},e=this.options.length,n=0;n<e;n++){var i=this.options[n].attributeName();t[i]=i===this._versionOptionName?this._version:this[i]}return t};s.prototype.missingArgument=function(t){console.error("error: missing required argument `%s'",t),process.exit(1)};s.prototype.optionMissingArgument=function(t,e){e?console.error("error: option `%s' argument missing, got `%s'",t.flags,e):console.error("error: option `%s' argument missing",t.flags),process.exit(1)};s.prototype.unknownOption=function(t){this._allowUnknownOption||(console.error("error: unknown option `%s'",t),process.exit(1))};s.prototype.variadicArgNotLast=function(t){console.error("error: variadic arguments must be last `%s'",t),process.exit(1)};s.prototype.version=function(t,e){if(arguments.length===0)return this._version;this._version=t,e=e||"-V, --version";var n=new c(e,"output the version number");return this._versionOptionName=n.long.substr(2)||"version",this.options.push(n),this.on("option:"+this._versionOptionName,function(){process.stdout.write(t+`
2
+ var k=Object.create;var v=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var I=t=>v(t,"__esModule",{value:!0});var L=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var U=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of H(e))!j.call(t,o)&&(n||o!=="default")&&v(t,o,{get:()=>e[o],enumerable:!(i=q(e,o))||i.enumerable});return t},F=(t,e)=>U(I(v(t!=null?k(N(t)):{},"default",!e&&t&&t.__esModule?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var A=L((d,E)=>{var M=require("events").EventEmitter,_=require("child_process").spawn,m=require("path"),D=m.dirname,b=m.basename,w=require("fs");require("util").inherits(s,M);d=E.exports=new s;d.Command=s;d.Option=c;function c(t,e){this.flags=t,this.required=t.indexOf("<")>=0,this.optional=t.indexOf("[")>=0,this.bool=t.indexOf("-no-")===-1,t=t.split(/[ ,|]+/),t.length>1&&!/^[[<]/.test(t[1])&&(this.short=t.shift()),this.long=t.shift(),this.description=e||""}c.prototype.name=function(){return this.long.replace("--","").replace("no-","")};c.prototype.attributeName=function(){return G(this.name())};c.prototype.is=function(t){return this.short===t||this.long===t};function s(t){this.commands=[],this.options=[],this._execs={},this._allowUnknownOption=!1,this._args=[],this._name=t||""}s.prototype.command=function(t,e,n){typeof e=="object"&&e!==null&&(n=e,e=null),n=n||{};var i=t.split(/ +/),o=new s(i.shift());return e&&(o.description(e),this.executables=!0,this._execs[o._name]=!0,n.isDefault&&(this.defaultExecutable=o._name)),o._noHelp=!!n.noHelp,this.commands.push(o),o.parseExpectedArgs(i),o.parent=this,e?this:o};s.prototype.arguments=function(t){return this.parseExpectedArgs(t.split(/ +/))};s.prototype.addImplicitHelpCommand=function(){this.command("help [cmd]","display help for [cmd]")};s.prototype.parseExpectedArgs=function(t){if(!!t.length){var e=this;return t.forEach(function(n){var i={required:!1,name:"",variadic:!1};switch(n[0]){case"<":i.required=!0,i.name=n.slice(1,-1);break;case"[":i.name=n.slice(1,-1);break}i.name.length>3&&i.name.slice(-3)==="..."&&(i.variadic=!0,i.name=i.name.slice(0,-3)),i.name&&e._args.push(i)}),this}};s.prototype.action=function(t){var e=this,n=function(r,h){r=r||[],h=h||[];var a=e.parseOptions(h);O(e,a.unknown),a.unknown.length>0&&e.unknownOption(a.unknown[0]),a.args.length&&(r=a.args.concat(r)),e._args.forEach(function(p,u){p.required&&r[u]==null?e.missingArgument(p.name):p.variadic&&(u!==e._args.length-1&&e.variadicArgNotLast(p.name),r[u]=r.splice(u))}),e._args.length?r[e._args.length]=e:r.push(e),t.apply(e,r)},i=this.parent||this,o=i===this?"*":this._name;return i.on("command:"+o,n),this._alias&&i.on("command:"+this._alias,n),this};s.prototype.option=function(t,e,n,i){var o=this,r=new c(t,e),h=r.name(),a=r.attributeName();if(typeof n!="function")if(n instanceof RegExp){var p=n;n=function(u,g){var l=p.exec(u);return l?l[0]:g}}else i=n,n=null;return(!r.bool||r.optional||r.required)&&(r.bool||(i=!0),i!==void 0&&(o[a]=i,r.defaultValue=i)),this.options.push(r),this.on("option:"+h,function(u){u!==null&&n&&(u=n(u,o[a]===void 0?i:o[a])),typeof o[a]=="boolean"||typeof o[a]=="undefined"?u==null?o[a]=r.bool?i||!0:!1:o[a]=u:u!==null&&(o[a]=u)}),this};s.prototype.allowUnknownOption=function(t){return this._allowUnknownOption=arguments.length===0||t,this};s.prototype.parse=function(t){this.executables&&this.addImplicitHelpCommand(),this.rawArgs=t,this._name=this._name||b(t[1],".js"),this.executables&&t.length<3&&!this.defaultExecutable&&t.push("--help");var e=this.parseOptions(this.normalize(t.slice(2))),n=this.args=e.args,i=this.parseArgs(this.args,e.unknown),o=i.args[0],r=null;return o&&(r=this.commands.filter(function(h){return h.alias()===o})[0]),this._execs[o]===!0?this.executeSubCommand(t,n,e.unknown):r?(n[0]=r._name,this.executeSubCommand(t,n,e.unknown)):this.defaultExecutable?(n.unshift(this.defaultExecutable),this.executeSubCommand(t,n,e.unknown)):i};s.prototype.executeSubCommand=function(t,e,n){e=e.concat(n),e.length||this.help(),e[0]==="help"&&e.length===1&&this.help(),e[0]==="help"&&(e[0]=e[1],e[1]="--help");var i=t[1],o=b(i,m.extname(i))+"-"+e[0],r,h=w.realpathSync(i);r=D(h);var a=m.join(r,o),p=!1;y(a+".js")?(o=a+".js",p=!0):y(a+".ts")?(o=a+".ts",p=!0):y(a)&&(o=a),e=e.slice(1);var u;process.platform!=="win32"?p?(e.unshift(o),e=(process.execArgv||[]).concat(e),u=_(process.argv[0],e,{stdio:"inherit",customFds:[0,1,2]})):u=_(o,e,{stdio:"inherit",customFds:[0,1,2]}):(e.unshift(o),u=_(process.execPath,e,{stdio:"inherit"}));var g=["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"];g.forEach(function(l){process.on(l,function(){u.killed===!1&&u.exitCode===null&&u.kill(l)})}),u.on("close",process.exit.bind(process)),u.on("error",function(l){l.code==="ENOENT"?console.error("error: %s(1) does not exist, try --help",o):l.code==="EACCES"&&console.error("error: %s(1) not executable. try chmod or run with root",o),process.exit(1)}),this.runningCommand=u};s.prototype.normalize=function(t){for(var e=[],n,i,o,r=0,h=t.length;r<h;++r)if(n=t[r],r>0&&(i=this.optionFor(t[r-1])),n==="--"){e=e.concat(t.slice(r));break}else i&&i.required?e.push(n):n.length>1&&n[0]==="-"&&n[1]!=="-"?n.slice(1).split("").forEach(function(a){e.push("-"+a)}):/^--/.test(n)&&~(o=n.indexOf("="))?e.push(n.slice(0,o),n.slice(o+1)):e.push(n);return e};s.prototype.parseArgs=function(t,e){var n;return t.length?(n=t[0],this.listeners("command:"+n).length?this.emit("command:"+t.shift(),t,e):this.emit("command:*",t)):(O(this,e),e.length>0&&this.unknownOption(e[0]),this.commands.length===0&&this._args.filter(function(i){return i.required}).length===0&&this.emit("command:*")),this};s.prototype.optionFor=function(t){for(var e=0,n=this.options.length;e<n;++e)if(this.options[e].is(t))return this.options[e]};s.prototype.parseOptions=function(t){for(var e=[],n=t.length,i,o,r,h=[],a=0;a<n;++a){if(r=t[a],i){e.push(r);continue}if(r==="--"){i=!0;continue}if(o=this.optionFor(r),o){if(o.required){if(r=t[++a],r==null)return this.optionMissingArgument(o);this.emit("option:"+o.name(),r)}else o.optional?(r=t[a+1],r==null||r[0]==="-"&&r!=="-"?r=null:++a,this.emit("option:"+o.name(),r)):this.emit("option:"+o.name());continue}if(r.length>1&&r[0]==="-"){h.push(r),a+1<t.length&&t[a+1][0]!=="-"&&h.push(t[++a]);continue}e.push(r)}return{args:e,unknown:h}};s.prototype.opts=function(){for(var t={},e=this.options.length,n=0;n<e;n++){var i=this.options[n].attributeName();t[i]=i===this._versionOptionName?this._version:this[i]}return t};s.prototype.missingArgument=function(t){console.error("error: missing required argument `%s'",t),process.exit(1)};s.prototype.optionMissingArgument=function(t,e){e?console.error("error: option `%s' argument missing, got `%s'",t.flags,e):console.error("error: option `%s' argument missing",t.flags),process.exit(1)};s.prototype.unknownOption=function(t){this._allowUnknownOption||(console.error("error: unknown option `%s'",t),process.exit(1))};s.prototype.variadicArgNotLast=function(t){console.error("error: variadic arguments must be last `%s'",t),process.exit(1)};s.prototype.version=function(t,e){if(arguments.length===0)return this._version;this._version=t,e=e||"-V, --version";var n=new c(e,"output the version number");return this._versionOptionName=n.long.substr(2)||"version",this.options.push(n),this.on("option:"+this._versionOptionName,function(){process.stdout.write(t+`
3
3
  `),process.exit(0)}),this};s.prototype.description=function(t,e){return arguments.length===0?this._description:(this._description=t,this._argsDescription=e,this)};s.prototype.alias=function(t){var e=this;if(this.commands.length!==0&&(e=this.commands[this.commands.length-1]),arguments.length===0)return e._alias;if(t===e._name)throw new Error("Command alias can't be the same as its name");return e._alias=t,this};s.prototype.usage=function(t){var e=this._args.map(function(i){return C(i)}),n="[options]"+(this.commands.length?" [command]":"")+(this._args.length?" "+e.join(" "):"");return arguments.length===0?this._usage||n:(this._usage=t,this)};s.prototype.name=function(t){return arguments.length===0?this._name:(this._name=t,this)};s.prototype.prepareCommands=function(){return this.commands.filter(function(t){return!t._noHelp}).map(function(t){var e=t._args.map(function(n){return C(n)}).join(" ");return[t._name+(t._alias?"|"+t._alias:"")+(t.options.length?" [options]":"")+(e?" "+e:""),t._description]})};s.prototype.largestCommandLength=function(){var t=this.prepareCommands();return t.reduce(function(e,n){return Math.max(e,n[0].length)},0)};s.prototype.largestOptionLength=function(){var t=[].slice.call(this.options);return t.push({flags:"-h, --help"}),t.reduce(function(e,n){return Math.max(e,n.flags.length)},0)};s.prototype.largestArgLength=function(){return this._args.reduce(function(t,e){return Math.max(t,e.name.length)},0)};s.prototype.padWidth=function(){var t=this.largestOptionLength();return this._argsDescription&&this._args.length&&this.largestArgLength()>t&&(t=this.largestArgLength()),this.commands&&this.commands.length&&this.largestCommandLength()>t&&(t=this.largestCommandLength()),t};s.prototype.optionHelp=function(){var t=this.padWidth();return this.options.map(function(e){return f(e.flags,t)+" "+e.description+(e.bool&&e.defaultValue!==void 0?" (default: "+JSON.stringify(e.defaultValue)+")":"")}).concat([f("-h, --help",t)+" output usage information"]).join(`
4
4
  `)};s.prototype.commandHelp=function(){if(!this.commands.length)return"";var t=this.prepareCommands(),e=this.padWidth();return["Commands:",t.map(function(n){var i=n[1]?" "+n[1]:"";return(i?f(n[0],e):n[0])+i}).join(`
5
5
  `).replace(/^/gm," "),""].join(`
6
- `)};s.prototype.helpInformation=function(){var t=[];if(this._description){t=[this._description,""];var e=this._argsDescription;if(e&&this._args.length){var n=this.padWidth();t.push("Arguments:"),t.push(""),this._args.forEach(function(p){t.push(" "+f(p.name,n)+" "+e[p.name])}),t.push("")}}var i=this._name;this._alias&&(i=i+"|"+this._alias);var r=["Usage: "+i+" "+this.usage(),""],o=[],h=this.commandHelp();h&&(o=[h]);var a=["Options:",""+this.optionHelp().replace(/^/gm," "),""];return r.concat(t).concat(a).concat(o).join(`
6
+ `)};s.prototype.helpInformation=function(){var t=[];if(this._description){t=[this._description,""];var e=this._argsDescription;if(e&&this._args.length){var n=this.padWidth();t.push("Arguments:"),t.push(""),this._args.forEach(function(p){t.push(" "+f(p.name,n)+" "+e[p.name])}),t.push("")}}var i=this._name;this._alias&&(i=i+"|"+this._alias);var o=["Usage: "+i+" "+this.usage(),""],r=[],h=this.commandHelp();h&&(r=[h]);var a=["Options:",""+this.optionHelp().replace(/^/gm," "),""];return o.concat(t).concat(a).concat(r).join(`
7
7
  `)};s.prototype.outputHelp=function(t){t||(t=function(e){return e}),process.stdout.write(t(this.helpInformation())),this.emit("--help")};s.prototype.help=function(t){this.outputHelp(t),process.exit()};function G(t){return t.split("-").reduce(function(e,n){return e+n[0].toUpperCase()+n.slice(1)})}function f(t,e){var n=Math.max(0,e-t.length);return t+Array(n+1).join(" ")}function O(t,e){e=e||[];for(var n=0;n<e.length;n++)(e[n]==="--help"||e[n]==="-h")&&(t.outputHelp(),process.exit(0))}function C(t){var e=t.name+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}function y(t){try{if(w.statSync(t).isFile())return!0}catch{return!1}}});var x=F(A());function S(t){if(t.length==2)return t.toUpperCase().replace(/./g,e=>String.fromCodePoint(127397+e.charCodeAt(0)))}x.default.version("0.1.0").name("country-flag-cli").command("get <flag>").action(t=>{let e=S(t);console.log(e)});x.default.parse(process.argv);
8
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9pbmRleC5qcyIsICIuLi9zcmMvY2xpLnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgc3Bhd24gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuc3Bhd247XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBkaXJuYW1lID0gcGF0aC5kaXJuYW1lO1xudmFyIGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbi8qKlxuICogSW5oZXJpdCBgQ29tbWFuZGAgZnJvbSBgRXZlbnRFbWl0dGVyLnByb3RvdHlwZWAuXG4gKi9cblxucmVxdWlyZSgndXRpbCcpLmluaGVyaXRzKENvbW1hbmQsIEV2ZW50RW1pdHRlcik7XG5cbi8qKlxuICogRXhwb3NlIHRoZSByb290IGNvbW1hbmQuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gbmV3IENvbW1hbmQoKTtcblxuLyoqXG4gKiBFeHBvc2UgYENvbW1hbmRgLlxuICovXG5cbmV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7XG5cbi8qKlxuICogRXhwb3NlIGBPcHRpb25gLlxuICovXG5cbmV4cG9ydHMuT3B0aW9uID0gT3B0aW9uO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYE9wdGlvbmAgd2l0aCB0aGUgZ2l2ZW4gYGZsYWdzYCBhbmQgYGRlc2NyaXB0aW9uYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxhZ3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvblxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgdGhpcy5yZXF1aXJlZCA9IGZsYWdzLmluZGV4T2YoJzwnKSA+PSAwO1xuICB0aGlzLm9wdGlvbmFsID0gZmxhZ3MuaW5kZXhPZignWycpID49IDA7XG4gIHRoaXMuYm9vbCA9IGZsYWdzLmluZGV4T2YoJy1uby0nKSA9PT0gLTE7XG4gIGZsYWdzID0gZmxhZ3Muc3BsaXQoL1sgLHxdKy8pO1xuICBpZiAoZmxhZ3MubGVuZ3RoID4gMSAmJiAhL15bWzxdLy50ZXN0KGZsYWdzWzFdKSkgdGhpcy5zaG9ydCA9IGZsYWdzLnNoaWZ0KCk7XG4gIHRoaXMubG9uZyA9IGZsYWdzLnNoaWZ0KCk7XG4gIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnJztcbn1cblxuLyoqXG4gKiBSZXR1cm4gb3B0aW9uIG5hbWUuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuT3B0aW9uLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmxvbmdcbiAgICAucmVwbGFjZSgnLS0nLCAnJylcbiAgICAucmVwbGFjZSgnbm8tJywgJycpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gb3B0aW9uIG5hbWUsIGluIGEgY2FtZWxjYXNlIGZvcm1hdCB0aGF0IGNhbiBiZSB1c2VkXG4gKiBhcyBhIG9iamVjdCBhdHRyaWJ1dGUga2V5LlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk9wdGlvbi5wcm90b3R5cGUuYXR0cmlidXRlTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY2FtZWxjYXNlKHRoaXMubmFtZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYGFyZ2AgbWF0Y2hlcyB0aGUgc2hvcnQgb3IgbG9uZyBmbGFnLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcmdcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5PcHRpb24ucHJvdG90eXBlLmlzID0gZnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0aGlzLnNob3J0ID09PSBhcmcgfHwgdGhpcy5sb25nID09PSBhcmc7XG59O1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYENvbW1hbmRgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIENvbW1hbmQobmFtZSkge1xuICB0aGlzLmNvbW1hbmRzID0gW107XG4gIHRoaXMub3B0aW9ucyA9IFtdO1xuICB0aGlzLl9leGVjcyA9IHt9O1xuICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSBmYWxzZTtcbiAgdGhpcy5fYXJncyA9IFtdO1xuICB0aGlzLl9uYW1lID0gbmFtZSB8fCAnJztcbn1cblxuLyoqXG4gKiBBZGQgY29tbWFuZCBgbmFtZWAuXG4gKlxuICogVGhlIGAuYWN0aW9uKClgIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbiB0aGVcbiAqIGNvbW1hbmQgYG5hbWVgIGlzIHNwZWNpZmllZCB2aWEgX19BUkdWX18sXG4gKiBhbmQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGFwcGxpZWQgdG8gdGhlXG4gKiBmdW5jdGlvbiBmb3IgYWNjZXNzLlxuICpcbiAqIFdoZW4gdGhlIGBuYW1lYCBpcyBcIipcIiBhbiB1bi1tYXRjaGVkIGNvbW1hbmRcbiAqIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmcsIGZvbGxvd2VkIGJ5XG4gKiB0aGUgcmVzdCBvZiBfX0FSR1ZfXyByZW1haW5pbmcuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBwcm9ncmFtXG4gKiAgICAgICAgLnZlcnNpb24oJzAuMC4xJylcbiAqICAgICAgICAub3B0aW9uKCctQywgLS1jaGRpciA8cGF0aD4nLCAnY2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeScpXG4gKiAgICAgICAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxwYXRoPicsICdzZXQgY29uZmlnIHBhdGguIGRlZmF1bHRzIHRvIC4vZGVwbG95LmNvbmYnKVxuICogICAgICAgIC5vcHRpb24oJy1ULCAtLW5vLXRlc3RzJywgJ2lnbm9yZSB0ZXN0IGhvb2snKVxuICpcbiAqICAgICAgcHJvZ3JhbVxuICogICAgICAgIC5jb21tYW5kKCdzZXR1cCcpXG4gKiAgICAgICAgLmRlc2NyaXB0aW9uKCdydW4gcmVtb3RlIHNldHVwIGNvbW1hbmRzJylcbiAqICAgICAgICAuYWN0aW9uKGZ1bmN0aW9uKCkge1xuICogICAgICAgICAgY29uc29sZS5sb2coJ3NldHVwJyk7XG4gKiAgICAgICAgfSk7XG4gKlxuICogICAgICBwcm9ncmFtXG4gKiAgICAgICAgLmNvbW1hbmQoJ2V4ZWMgPGNtZD4nKVxuICogICAgICAgIC5kZXNjcmlwdGlvbigncnVuIHRoZSBnaXZlbiByZW1vdGUgY29tbWFuZCcpXG4gKiAgICAgICAgLmFjdGlvbihmdW5jdGlvbihjbWQpIHtcbiAqICAgICAgICAgIGNvbnNvbGUubG9nKCdleGVjIFwiJXNcIicsIGNtZCk7XG4gKiAgICAgICAgfSk7XG4gKlxuICogICAgICBwcm9ncmFtXG4gKiAgICAgICAgLmNvbW1hbmQoJ3RlYXJkb3duIDxkaXI+IFtvdGhlckRpcnMuLi5dJylcbiAqICAgICAgICAuZGVzY3JpcHRpb24oJ3J1biB0ZWFyZG93biBjb21tYW5kcycpXG4gKiAgICAgICAgLmFjdGlvbihmdW5jdGlvbihkaXIsIG90aGVyRGlycykge1xuICogICAgICAgICAgY29uc29sZS5sb2coJ2RpciBcIiVzXCInLCBkaXIpO1xuICogICAgICAgICAgaWYgKG90aGVyRGlycykge1xuICogICAgICAgICAgICBvdGhlckRpcnMuZm9yRWFjaChmdW5jdGlvbiAob0Rpcikge1xuICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkaXIgXCIlc1wiJywgb0Rpcik7XG4gKiAgICAgICAgICAgIH0pO1xuICogICAgICAgICAgfVxuICogICAgICAgIH0pO1xuICpcbiAqICAgICAgcHJvZ3JhbVxuICogICAgICAgIC5jb21tYW5kKCcqJylcbiAqICAgICAgICAuZGVzY3JpcHRpb24oJ2RlcGxveSB0aGUgZ2l2ZW4gZW52JylcbiAqICAgICAgICAuYWN0aW9uKGZ1bmN0aW9uKGVudikge1xuICogICAgICAgICAgY29uc29sZS5sb2coJ2RlcGxveWluZyBcIiVzXCInLCBlbnYpO1xuICogICAgICAgIH0pO1xuICpcbiAqICAgICAgcHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IFtkZXNjXSBmb3IgZ2l0LXN0eWxlIHN1Yi1jb21tYW5kc1xuICogQHJldHVybiB7Q29tbWFuZH0gdGhlIG5ldyBjb21tYW5kXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmNvbW1hbmQgPSBmdW5jdGlvbihuYW1lLCBkZXNjLCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgZGVzYyA9PT0gJ29iamVjdCcgJiYgZGVzYyAhPT0gbnVsbCkge1xuICAgIG9wdHMgPSBkZXNjO1xuICAgIGRlc2MgPSBudWxsO1xuICB9XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgYXJncyA9IG5hbWUuc3BsaXQoLyArLyk7XG4gIHZhciBjbWQgPSBuZXcgQ29tbWFuZChhcmdzLnNoaWZ0KCkpO1xuXG4gIGlmIChkZXNjKSB7XG4gICAgY21kLmRlc2NyaXB0aW9uKGRlc2MpO1xuICAgIHRoaXMuZXhlY3V0YWJsZXMgPSB0cnVlO1xuICAgIHRoaXMuX2V4ZWNzW2NtZC5fbmFtZV0gPSB0cnVlO1xuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5kZWZhdWx0RXhlY3V0YWJsZSA9IGNtZC5fbmFtZTtcbiAgfVxuICBjbWQuX25vSGVscCA9ICEhb3B0cy5ub0hlbHA7XG4gIHRoaXMuY29tbWFuZHMucHVzaChjbWQpO1xuICBjbWQucGFyc2VFeHBlY3RlZEFyZ3MoYXJncyk7XG4gIGNtZC5wYXJlbnQgPSB0aGlzO1xuXG4gIGlmIChkZXNjKSByZXR1cm4gdGhpcztcbiAgcmV0dXJuIGNtZDtcbn07XG5cbi8qKlxuICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgdGhlIHRvcC1sZXZlbCBjb21tYW5kLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuYXJndW1lbnRzID0gZnVuY3Rpb24oZGVzYykge1xuICByZXR1cm4gdGhpcy5wYXJzZUV4cGVjdGVkQXJncyhkZXNjLnNwbGl0KC8gKy8pKTtcbn07XG5cbi8qKlxuICogQWRkIGFuIGltcGxpY2l0IGBoZWxwIFtjbWRdYCBzdWJjb21tYW5kXG4gKiB3aGljaCBpbnZva2VzIGAtLWhlbHBgIGZvciB0aGUgZ2l2ZW4gY29tbWFuZC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY29tbWFuZCgnaGVscCBbY21kXScsICdkaXNwbGF5IGhlbHAgZm9yIFtjbWRdJyk7XG59O1xuXG4vKipcbiAqIFBhcnNlIGV4cGVjdGVkIGBhcmdzYC5cbiAqXG4gKiBGb3IgZXhhbXBsZSBgW1wiW3R5cGVdXCJdYCBiZWNvbWVzIGBbeyByZXF1aXJlZDogZmFsc2UsIG5hbWU6ICd0eXBlJyB9XWAuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHJldHVybiB7Q29tbWFuZH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnBhcnNlRXhwZWN0ZWRBcmdzID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAoIWFyZ3MubGVuZ3RoKSByZXR1cm47XG4gIHZhciBzZWxmID0gdGhpcztcbiAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uKGFyZykge1xuICAgIHZhciBhcmdEZXRhaWxzID0ge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgbmFtZTogJycsXG4gICAgICB2YXJpYWRpYzogZmFsc2VcbiAgICB9O1xuXG4gICAgc3dpdGNoIChhcmdbMF0pIHtcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBhcmdEZXRhaWxzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgYXJnRGV0YWlscy5uYW1lID0gYXJnLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgYXJnRGV0YWlscy5uYW1lID0gYXJnLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGFyZ0RldGFpbHMubmFtZS5sZW5ndGggPiAzICYmIGFyZ0RldGFpbHMubmFtZS5zbGljZSgtMykgPT09ICcuLi4nKSB7XG4gICAgICBhcmdEZXRhaWxzLnZhcmlhZGljID0gdHJ1ZTtcbiAgICAgIGFyZ0RldGFpbHMubmFtZSA9IGFyZ0RldGFpbHMubmFtZS5zbGljZSgwLCAtMyk7XG4gICAgfVxuICAgIGlmIChhcmdEZXRhaWxzLm5hbWUpIHtcbiAgICAgIHNlbGYuX2FyZ3MucHVzaChhcmdEZXRhaWxzKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgY2FsbGJhY2sgYGZuYCBmb3IgdGhlIGNvbW1hbmQuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBwcm9ncmFtXG4gKiAgICAgICAgLmNvbW1hbmQoJ2hlbHAnKVxuICogICAgICAgIC5kZXNjcmlwdGlvbignZGlzcGxheSB2ZXJib3NlIGhlbHAnKVxuICogICAgICAgIC5hY3Rpb24oZnVuY3Rpb24oKSB7XG4gKiAgICAgICAgICAgLy8gb3V0cHV0IGhlbHAgaGVyZVxuICogICAgICAgIH0pO1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtDb21tYW5kfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuYWN0aW9uID0gZnVuY3Rpb24oZm4pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbihhcmdzLCB1bmtub3duKSB7XG4gICAgLy8gUGFyc2UgYW55IHNvLWZhciB1bmtub3duIG9wdGlvbnNcbiAgICBhcmdzID0gYXJncyB8fCBbXTtcbiAgICB1bmtub3duID0gdW5rbm93biB8fCBbXTtcblxuICAgIHZhciBwYXJzZWQgPSBzZWxmLnBhcnNlT3B0aW9ucyh1bmtub3duKTtcblxuICAgIC8vIE91dHB1dCBoZWxwIGlmIG5lY2Vzc2FyeVxuICAgIG91dHB1dEhlbHBJZk5lY2Vzc2FyeShzZWxmLCBwYXJzZWQudW5rbm93bik7XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgc3RpbGwgYW55IHVua25vd24gb3B0aW9ucywgdGhlbiB3ZSBzaW1wbHlcbiAgICAvLyBkaWUsIHVubGVzcyBzb21lb25lIGFza2VkIGZvciBoZWxwLCBpbiB3aGljaCBjYXNlIHdlIGdpdmUgaXRcbiAgICAvLyB0byB0aGVtLCBhbmQgdGhlbiB3ZSBkaWUuXG4gICAgaWYgKHBhcnNlZC51bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgIHNlbGYudW5rbm93bk9wdGlvbihwYXJzZWQudW5rbm93blswXSk7XG4gICAgfVxuXG4gICAgLy8gTGVmdG92ZXIgYXJndW1lbnRzIG5lZWQgdG8gYmUgcHVzaGVkIGJhY2suIEZpeGVzIGlzc3VlICM1NlxuICAgIGlmIChwYXJzZWQuYXJncy5sZW5ndGgpIGFyZ3MgPSBwYXJzZWQuYXJncy5jb25jYXQoYXJncyk7XG5cbiAgICBzZWxmLl9hcmdzLmZvckVhY2goZnVuY3Rpb24oYXJnLCBpKSB7XG4gICAgICBpZiAoYXJnLnJlcXVpcmVkICYmIGFyZ3NbaV0gPT0gbnVsbCkge1xuICAgICAgICBzZWxmLm1pc3NpbmdBcmd1bWVudChhcmcubmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFyZy52YXJpYWRpYykge1xuICAgICAgICBpZiAoaSAhPT0gc2VsZi5fYXJncy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgc2VsZi52YXJpYWRpY0FyZ05vdExhc3QoYXJnLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJnc1tpXSA9IGFyZ3Muc3BsaWNlKGkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQWx3YXlzIGFwcGVuZCBvdXJzZWx2ZXMgdG8gdGhlIGVuZCBvZiB0aGUgYXJndW1lbnRzLFxuICAgIC8vIHRvIG1ha2Ugc3VyZSB3ZSBtYXRjaCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgdXNlclxuICAgIC8vIGV4cGVjdHNcbiAgICBpZiAoc2VsZi5fYXJncy5sZW5ndGgpIHtcbiAgICAgIGFyZ3Nbc2VsZi5fYXJncy5sZW5ndGhdID0gc2VsZjtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy5wdXNoKHNlbGYpO1xuICAgIH1cblxuICAgIGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICB9O1xuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQgfHwgdGhpcztcbiAgdmFyIG5hbWUgPSBwYXJlbnQgPT09IHRoaXMgPyAnKicgOiB0aGlzLl9uYW1lO1xuICBwYXJlbnQub24oJ2NvbW1hbmQ6JyArIG5hbWUsIGxpc3RlbmVyKTtcbiAgaWYgKHRoaXMuX2FsaWFzKSBwYXJlbnQub24oJ2NvbW1hbmQ6JyArIHRoaXMuX2FsaWFzLCBsaXN0ZW5lcik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEZWZpbmUgb3B0aW9uIHdpdGggYGZsYWdzYCwgYGRlc2NyaXB0aW9uYCBhbmQgb3B0aW9uYWxcbiAqIGNvZXJjaW9uIGBmbmAuXG4gKlxuICogVGhlIGBmbGFnc2Agc3RyaW5nIHNob3VsZCBjb250YWluIGJvdGggdGhlIHNob3J0IGFuZCBsb25nIGZsYWdzLFxuICogc2VwYXJhdGVkIGJ5IGNvbW1hLCBhIHBpcGUgb3Igc3BhY2UuIFRoZSBmb2xsb3dpbmcgYXJlIGFsbCB2YWxpZFxuICogYWxsIHdpbGwgb3V0cHV0IHRoaXMgd2F5IHdoZW4gYC0taGVscGAgaXMgdXNlZC5cbiAqXG4gKiAgICBcIi1wLCAtLXBlcHBlclwiXG4gKiAgICBcIi1wfC0tcGVwcGVyXCJcbiAqICAgIFwiLXAgLS1wZXBwZXJcIlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAvLyBzaW1wbGUgYm9vbGVhbiBkZWZhdWx0aW5nIHRvIGZhbHNlXG4gKiAgICAgcHJvZ3JhbS5vcHRpb24oJy1wLCAtLXBlcHBlcicsICdhZGQgcGVwcGVyJyk7XG4gKlxuICogICAgIC0tcGVwcGVyXG4gKiAgICAgcHJvZ3JhbS5wZXBwZXJcbiAqICAgICAvLyA9PiBCb29sZWFuXG4gKlxuICogICAgIC8vIHNpbXBsZSBib29sZWFuIGRlZmF1bHRpbmcgdG8gdHJ1ZVxuICogICAgIHByb2dyYW0ub3B0aW9uKCctQywgLS1uby1jaGVlc2UnLCAncmVtb3ZlIGNoZWVzZScpO1xuICpcbiAqICAgICBwcm9ncmFtLmNoZWVzZVxuICogICAgIC8vID0+IHRydWVcbiAqXG4gKiAgICAgLS1uby1jaGVlc2VcbiAqICAgICBwcm9ncmFtLmNoZWVzZVxuICogICAgIC8vID0+IGZhbHNlXG4gKlxuICogICAgIC8vIHJlcXVpcmVkIGFyZ3VtZW50XG4gKiAgICAgcHJvZ3JhbS5vcHRpb24oJy1DLCAtLWNoZGlyIDxwYXRoPicsICdjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5Jyk7XG4gKlxuICogICAgIC0tY2hkaXIgL3RtcFxuICogICAgIHByb2dyYW0uY2hkaXJcbiAqICAgICAvLyA9PiBcIi90bXBcIlxuICpcbiAqICAgICAvLyBvcHRpb25hbCBhcmd1bWVudFxuICogICAgIHByb2dyYW0ub3B0aW9uKCctYywgLS1jaGVlc2UgW3R5cGVdJywgJ2FkZCBjaGVlc2UgW21hcmJsZV0nKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxhZ3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbnwqfSBbZm5dIG9yIGRlZmF1bHRcbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAqIEByZXR1cm4ge0NvbW1hbmR9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5vcHRpb24gPSBmdW5jdGlvbihmbGFncywgZGVzY3JpcHRpb24sIGZuLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgIG9wdGlvbiA9IG5ldyBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKSxcbiAgICBvbmFtZSA9IG9wdGlvbi5uYW1lKCksXG4gICAgbmFtZSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG5cbiAgLy8gZGVmYXVsdCBhcyAzcmQgYXJnXG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZm4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHZhciByZWdleCA9IGZuO1xuICAgICAgZm4gPSBmdW5jdGlvbih2YWwsIGRlZikge1xuICAgICAgICB2YXIgbSA9IHJlZ2V4LmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIG0gPyBtWzBdIDogZGVmO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmYXVsdFZhbHVlID0gZm47XG4gICAgICBmbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJlYXNzaWduIGRlZmF1bHQgdmFsdWUgb25seSBmb3IgLS1uby0qLCBbb3B0aW9uYWxdLCBvciA8cmVxdWlyZWQ+XG4gIGlmICghb3B0aW9uLmJvb2wgfHwgb3B0aW9uLm9wdGlvbmFsIHx8IG9wdGlvbi5yZXF1aXJlZCkge1xuICAgIC8vIHdoZW4gLS1uby0qIHdlIG1ha2Ugc3VyZSBkZWZhdWx0IGlzIHRydWVcbiAgICBpZiAoIW9wdGlvbi5ib29sKSBkZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIC8vIHByZWFzc2lnbiBvbmx5IGlmIHdlIGhhdmUgYSBkZWZhdWx0XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWxmW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgb3B0aW9uLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyByZWdpc3RlciB0aGUgb3B0aW9uXG4gIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XG5cbiAgLy8gd2hlbiBpdCdzIHBhc3NlZCBhc3NpZ24gdGhlIHZhbHVlXG4gIC8vIGFuZCBjb25kaXRpb25hbGx5IGludm9rZSB0aGUgY2FsbGJhY2tcbiAgdGhpcy5vbignb3B0aW9uOicgKyBvbmFtZSwgZnVuY3Rpb24odmFsKSB7XG4gICAgLy8gY29lcmNpb25cbiAgICBpZiAodmFsICE9PSBudWxsICYmIGZuKSB7XG4gICAgICB2YWwgPSBmbih2YWwsIHNlbGZbbmFtZV0gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHNlbGZbbmFtZV0pO1xuICAgIH1cblxuICAgIC8vIHVuYXNzaWduZWQgb3IgYm9vbFxuICAgIGlmICh0eXBlb2Ygc2VsZltuYW1lXSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBzZWxmW25hbWVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gaWYgbm8gdmFsdWUsIGJvb2wgdHJ1ZSwgYW5kIHdlIGhhdmUgYSBkZWZhdWx0LCB0aGVuIHVzZSBpdCFcbiAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICBzZWxmW25hbWVdID0gb3B0aW9uLmJvb2xcbiAgICAgICAgICA/IGRlZmF1bHRWYWx1ZSB8fCB0cnVlXG4gICAgICAgICAgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGZbbmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgIC8vIHJlYXNzaWduXG4gICAgICBzZWxmW25hbWVdID0gdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFsbG93IHVua25vd24gb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYXJnIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBubyBlcnJvciB3aWxsIGJlIHRocm93blxuICogZm9yIHVua25vd24gb3B0aW9ucy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkNvbW1hbmQucHJvdG90eXBlLmFsbG93VW5rbm93bk9wdGlvbiA9IGZ1bmN0aW9uKGFyZykge1xuICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSBhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IGFyZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFBhcnNlIGBhcmd2YCwgc2V0dGluZ3Mgb3B0aW9ucyBhbmQgaW52b2tpbmcgY29tbWFuZHMgd2hlbiBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3ZcbiAqIEByZXR1cm4ge0NvbW1hbmR9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKGFyZ3YpIHtcbiAgLy8gaW1wbGljaXQgaGVscFxuICBpZiAodGhpcy5leGVjdXRhYmxlcykgdGhpcy5hZGRJbXBsaWNpdEhlbHBDb21tYW5kKCk7XG5cbiAgLy8gc3RvcmUgcmF3IGFyZ3NcbiAgdGhpcy5yYXdBcmdzID0gYXJndjtcblxuICAvLyBndWVzcyBuYW1lXG4gIHRoaXMuX25hbWUgPSB0aGlzLl9uYW1lIHx8IGJhc2VuYW1lKGFyZ3ZbMV0sICcuanMnKTtcblxuICAvLyBnaXRodWItc3R5bGUgc3ViLWNvbW1hbmRzIHdpdGggbm8gc3ViLWNvbW1hbmRcbiAgaWYgKHRoaXMuZXhlY3V0YWJsZXMgJiYgYXJndi5sZW5ndGggPCAzICYmICF0aGlzLmRlZmF1bHRFeGVjdXRhYmxlKSB7XG4gICAgLy8gdGhpcyB1c2VyIG5lZWRzIGhlbHBcbiAgICBhcmd2LnB1c2goJy0taGVscCcpO1xuICB9XG5cbiAgLy8gcHJvY2VzcyBhcmd2XG4gIHZhciBwYXJzZWQgPSB0aGlzLnBhcnNlT3B0aW9ucyh0aGlzLm5vcm1hbGl6ZShhcmd2LnNsaWNlKDIpKSk7XG4gIHZhciBhcmdzID0gdGhpcy5hcmdzID0gcGFyc2VkLmFyZ3M7XG5cbiAgdmFyIHJlc3VsdCA9IHRoaXMucGFyc2VBcmdzKHRoaXMuYXJncywgcGFyc2VkLnVua25vd24pO1xuXG4gIC8vIGV4ZWN1dGFibGUgc3ViLWNvbW1hbmRzXG4gIHZhciBuYW1lID0gcmVzdWx0LmFyZ3NbMF07XG5cbiAgdmFyIGFsaWFzQ29tbWFuZCA9IG51bGw7XG4gIC8vIGNoZWNrIGFsaWFzIG9mIHN1YiBjb21tYW5kc1xuICBpZiAobmFtZSkge1xuICAgIGFsaWFzQ29tbWFuZCA9IHRoaXMuY29tbWFuZHMuZmlsdGVyKGZ1bmN0aW9uKGNvbW1hbmQpIHtcbiAgICAgIHJldHVybiBjb21tYW5kLmFsaWFzKCkgPT09IG5hbWU7XG4gICAgfSlbMF07XG4gIH1cblxuICBpZiAodGhpcy5fZXhlY3NbbmFtZV0gJiYgdHlwZW9mIHRoaXMuX2V4ZWNzW25hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YkNvbW1hbmQoYXJndiwgYXJncywgcGFyc2VkLnVua25vd24pO1xuICB9IGVsc2UgaWYgKGFsaWFzQ29tbWFuZCkge1xuICAgIC8vIGlzIGFsaWFzIG9mIGEgc3ViQ29tbWFuZFxuICAgIGFyZ3NbMF0gPSBhbGlhc0NvbW1hbmQuX25hbWU7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YkNvbW1hbmQoYXJndiwgYXJncywgcGFyc2VkLnVua25vd24pO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdEV4ZWN1dGFibGUpIHtcbiAgICAvLyB1c2UgdGhlIGRlZmF1bHQgc3ViY29tbWFuZFxuICAgIGFyZ3MudW5zaGlmdCh0aGlzLmRlZmF1bHRFeGVjdXRhYmxlKTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3ViQ29tbWFuZChhcmd2LCBhcmdzLCBwYXJzZWQudW5rbm93bik7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBFeGVjdXRlIGEgc3ViLWNvbW1hbmQgZXhlY3V0YWJsZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmd2XG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzXG4gKiBAcGFyYW0ge0FycmF5fSB1bmtub3duXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5leGVjdXRlU3ViQ29tbWFuZCA9IGZ1bmN0aW9uKGFyZ3YsIGFyZ3MsIHVua25vd24pIHtcbiAgYXJncyA9IGFyZ3MuY29uY2F0KHVua25vd24pO1xuXG4gIGlmICghYXJncy5sZW5ndGgpIHRoaXMuaGVscCgpO1xuICBpZiAoYXJnc1swXSA9PT0gJ2hlbHAnICYmIGFyZ3MubGVuZ3RoID09PSAxKSB0aGlzLmhlbHAoKTtcblxuICAvLyA8Y21kPiAtLWhlbHBcbiAgaWYgKGFyZ3NbMF0gPT09ICdoZWxwJykge1xuICAgIGFyZ3NbMF0gPSBhcmdzWzFdO1xuICAgIGFyZ3NbMV0gPSAnLS1oZWxwJztcbiAgfVxuXG4gIC8vIGV4ZWN1dGFibGVcbiAgdmFyIGYgPSBhcmd2WzFdO1xuICAvLyBuYW1lIG9mIHRoZSBzdWJjb21tYW5kLCBsaW5rIGBwbS1pbnN0YWxsYFxuICB2YXIgYmluID0gYmFzZW5hbWUoZiwgcGF0aC5leHRuYW1lKGYpKSArICctJyArIGFyZ3NbMF07XG5cbiAgLy8gSW4gY2FzZSBvZiBnbG9iYWxseSBpbnN0YWxsZWQsIGdldCB0aGUgYmFzZSBkaXIgd2hlcmUgZXhlY3V0YWJsZVxuICAvLyAgc3ViY29tbWFuZCBmaWxlIHNob3VsZCBiZSBsb2NhdGVkIGF0XG4gIHZhciBiYXNlRGlyO1xuXG4gIHZhciByZXNvbHZlZExpbmsgPSBmcy5yZWFscGF0aFN5bmMoZik7XG5cbiAgYmFzZURpciA9IGRpcm5hbWUocmVzb2x2ZWRMaW5rKTtcblxuICAvLyBwcmVmZXIgbG9jYWwgYC4vPGJpbj5gIHRvIGJpbiBpbiB0aGUgJFBBVEhcbiAgdmFyIGxvY2FsQmluID0gcGF0aC5qb2luKGJhc2VEaXIsIGJpbik7XG5cbiAgLy8gd2hldGhlciBiaW4gZmlsZSBpcyBhIGpzIHNjcmlwdCB3aXRoIGV4cGxpY2l0IGAuanNgIG9yIGAudHNgIGV4dGVuc2lvblxuICB2YXIgaXNFeHBsaWNpdEpTID0gZmFsc2U7XG4gIGlmIChleGlzdHMobG9jYWxCaW4gKyAnLmpzJykpIHtcbiAgICBiaW4gPSBsb2NhbEJpbiArICcuanMnO1xuICAgIGlzRXhwbGljaXRKUyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoZXhpc3RzKGxvY2FsQmluICsgJy50cycpKSB7XG4gICAgYmluID0gbG9jYWxCaW4gKyAnLnRzJztcbiAgICBpc0V4cGxpY2l0SlMgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGV4aXN0cyhsb2NhbEJpbikpIHtcbiAgICBiaW4gPSBsb2NhbEJpbjtcbiAgfVxuXG4gIGFyZ3MgPSBhcmdzLnNsaWNlKDEpO1xuXG4gIHZhciBwcm9jO1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgIGlmIChpc0V4cGxpY2l0SlMpIHtcbiAgICAgIGFyZ3MudW5zaGlmdChiaW4pO1xuICAgICAgLy8gYWRkIGV4ZWN1dGFibGUgYXJndW1lbnRzIHRvIHNwYXduXG4gICAgICBhcmdzID0gKHByb2Nlc3MuZXhlY0FyZ3YgfHwgW10pLmNvbmNhdChhcmdzKTtcblxuICAgICAgcHJvYyA9IHNwYXduKHByb2Nlc3MuYXJndlswXSwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnLCBjdXN0b21GZHM6IFswLCAxLCAyXSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYyA9IHNwYXduKGJpbiwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnLCBjdXN0b21GZHM6IFswLCAxLCAyXSB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXJncy51bnNoaWZ0KGJpbik7XG4gICAgcHJvYyA9IHNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgfVxuXG4gIHZhciBzaWduYWxzID0gWydTSUdVU1IxJywgJ1NJR1VTUjInLCAnU0lHVEVSTScsICdTSUdJTlQnLCAnU0lHSFVQJ107XG4gIHNpZ25hbHMuZm9yRWFjaChmdW5jdGlvbihzaWduYWwpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAocHJvYy5raWxsZWQgPT09IGZhbHNlICYmIHByb2MuZXhpdENvZGUgPT09IG51bGwpIHtcbiAgICAgICAgcHJvYy5raWxsKHNpZ25hbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICBwcm9jLm9uKCdjbG9zZScsIHByb2Nlc3MuZXhpdC5iaW5kKHByb2Nlc3MpKTtcbiAgcHJvYy5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdlcnJvcjogJXMoMSkgZG9lcyBub3QgZXhpc3QsIHRyeSAtLWhlbHAnLCBiaW4pO1xuICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdlcnJvcjogJXMoMSkgbm90IGV4ZWN1dGFibGUuIHRyeSBjaG1vZCBvciBydW4gd2l0aCByb290JywgYmluKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTtcblxuICAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCBwcm9jZXNzXG4gIHRoaXMucnVubmluZ0NvbW1hbmQgPSBwcm9jO1xufTtcblxuLyoqXG4gKiBOb3JtYWxpemUgYGFyZ3NgLCBzcGxpdHRpbmcgam9pbmVkIHNob3J0IGZsYWdzLiBGb3IgZXhhbXBsZVxuICogdGhlIGFyZyBcIi1hYmNcIiBpcyBlcXVpdmFsZW50IHRvIFwiLWEgLWIgLWNcIi5cbiAqIFRoaXMgYWxzbyBub3JtYWxpemVzIGVxdWFsIHNpZ24gYW5kIHNwbGl0cyBcIi0tYWJjPWRlZlwiIGludG8gXCItLWFiYyBkZWZcIi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKGFyZ3MpIHtcbiAgdmFyIHJldCA9IFtdLFxuICAgIGFyZyxcbiAgICBsYXN0T3B0LFxuICAgIGluZGV4O1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmdzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoaSA+IDApIHtcbiAgICAgIGxhc3RPcHQgPSB0aGlzLm9wdGlvbkZvcihhcmdzW2kgLSAxXSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgLy8gSG9ub3Igb3B0aW9uIHRlcm1pbmF0b3JcbiAgICAgIHJldCA9IHJldC5jb25jYXQoYXJncy5zbGljZShpKSk7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGxhc3RPcHQgJiYgbGFzdE9wdC5yZXF1aXJlZCkge1xuICAgICAgcmV0LnB1c2goYXJnKTtcbiAgICB9IGVsc2UgaWYgKGFyZy5sZW5ndGggPiAxICYmIGFyZ1swXSA9PT0gJy0nICYmIGFyZ1sxXSAhPT0gJy0nKSB7XG4gICAgICBhcmcuc2xpY2UoMSkuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgICByZXQucHVzaCgnLScgKyBjKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoL14tLS8udGVzdChhcmcpICYmIH4oaW5kZXggPSBhcmcuaW5kZXhPZignPScpKSkge1xuICAgICAgcmV0LnB1c2goYXJnLnNsaWNlKDAsIGluZGV4KSwgYXJnLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXQucHVzaChhcmcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIFBhcnNlIGNvbW1hbmQgYGFyZ3NgLlxuICpcbiAqIFdoZW4gbGlzdGVuZXIocykgYXJlIGF2YWlsYWJsZSB0aG9zZVxuICogY2FsbGJhY2tzIGFyZSBpbnZva2VkLCBvdGhlcndpc2UgdGhlIFwiKlwiXG4gKiBldmVudCBpcyBlbWl0dGVkIGFuZCB0aG9zZSBhY3Rpb25zIGFyZSBpbnZva2VkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqIEByZXR1cm4ge0NvbW1hbmR9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUucGFyc2VBcmdzID0gZnVuY3Rpb24oYXJncywgdW5rbm93bikge1xuICB2YXIgbmFtZTtcblxuICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICBuYW1lID0gYXJnc1swXTtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMoJ2NvbW1hbmQ6JyArIG5hbWUpLmxlbmd0aCkge1xuICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOicgKyBhcmdzLnNoaWZ0KCksIGFyZ3MsIHVua25vd24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXQoJ2NvbW1hbmQ6KicsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXRwdXRIZWxwSWZOZWNlc3NhcnkodGhpcywgdW5rbm93bik7XG5cbiAgICAvLyBJZiB0aGVyZSB3ZXJlIG5vIGFyZ3MgYW5kIHdlIGhhdmUgdW5rbm93biBvcHRpb25zLFxuICAgIC8vIHRoZW4gdGhleSBhcmUgZXh0cmFuZW91cyBhbmQgd2UgbmVlZCB0byBlcnJvci5cbiAgICBpZiAodW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVua25vd25PcHRpb24odW5rbm93blswXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICB0aGlzLl9hcmdzLmZpbHRlcihmdW5jdGlvbihhKSB7IHJldHVybiBhLnJlcXVpcmVkOyB9KS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDoqJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybiBhbiBvcHRpb24gbWF0Y2hpbmcgYGFyZ2AgaWYgYW55LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcmdcbiAqIEByZXR1cm4ge09wdGlvbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLm9wdGlvbkZvciA9IGZ1bmN0aW9uKGFyZykge1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc1tpXS5pcyhhcmcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zW2ldO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQYXJzZSBvcHRpb25zIGZyb20gYGFyZ3ZgIHJldHVybmluZyBgYXJndmBcbiAqIHZvaWQgb2YgdGhlc2Ugb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmd2XG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUucGFyc2VPcHRpb25zID0gZnVuY3Rpb24oYXJndikge1xuICB2YXIgYXJncyA9IFtdLFxuICAgIGxlbiA9IGFyZ3YubGVuZ3RoLFxuICAgIGxpdGVyYWwsXG4gICAgb3B0aW9uLFxuICAgIGFyZztcblxuICB2YXIgdW5rbm93bk9wdGlvbnMgPSBbXTtcblxuICAvLyBwYXJzZSBvcHRpb25zXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBhcmcgPSBhcmd2W2ldO1xuXG4gICAgLy8gbGl0ZXJhbCBhcmdzIGFmdGVyIC0tXG4gICAgaWYgKGxpdGVyYWwpIHtcbiAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgbGl0ZXJhbCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBmaW5kIG1hdGNoaW5nIE9wdGlvblxuICAgIG9wdGlvbiA9IHRoaXMub3B0aW9uRm9yKGFyZyk7XG5cbiAgICAvLyBvcHRpb24gaXMgZGVmaW5lZFxuICAgIGlmIChvcHRpb24pIHtcbiAgICAgIC8vIHJlcXVpcmVzIGFyZ1xuICAgICAgaWYgKG9wdGlvbi5yZXF1aXJlZCkge1xuICAgICAgICBhcmcgPSBhcmd2WysraV07XG4gICAgICAgIGlmIChhcmcgPT0gbnVsbCkgcmV0dXJuIHRoaXMub3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbik7XG4gICAgICAgIHRoaXMuZW1pdCgnb3B0aW9uOicgKyBvcHRpb24ubmFtZSgpLCBhcmcpO1xuICAgICAgLy8gb3B0aW9uYWwgYXJnXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICBhcmcgPSBhcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKGFyZyA9PSBudWxsIHx8IChhcmdbMF0gPT09ICctJyAmJiBhcmcgIT09ICctJykpIHtcbiAgICAgICAgICBhcmcgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICsraTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ29wdGlvbjonICsgb3B0aW9uLm5hbWUoKSwgYXJnKTtcbiAgICAgIC8vIGJvb2xcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW1pdCgnb3B0aW9uOicgKyBvcHRpb24ubmFtZSgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGxvb2tzIGxpa2UgYW4gb3B0aW9uXG4gICAgaWYgKGFyZy5sZW5ndGggPiAxICYmIGFyZ1swXSA9PT0gJy0nKSB7XG4gICAgICB1bmtub3duT3B0aW9ucy5wdXNoKGFyZyk7XG5cbiAgICAgIC8vIElmIHRoZSBuZXh0IGFyZ3VtZW50IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmVcbiAgICAgIC8vIGFuIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiwgd2UgcGFzcyBpdCBvbi5cbiAgICAgIC8vIElmIGl0IGlzbid0LCB0aGVuIGl0J2xsIHNpbXBseSBiZSBpZ25vcmVkXG4gICAgICBpZiAoKGkgKyAxKSA8IGFyZ3YubGVuZ3RoICYmIGFyZ3ZbaSArIDFdWzBdICE9PSAnLScpIHtcbiAgICAgICAgdW5rbm93bk9wdGlvbnMucHVzaChhcmd2WysraV0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gYXJnXG4gICAgYXJncy5wdXNoKGFyZyk7XG4gIH1cblxuICByZXR1cm4geyBhcmdzOiBhcmdzLCB1bmtub3duOiB1bmtub3duT3B0aW9ucyB9O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgb3B0aW9ucyBhcyBrZXktdmFsdWUgcGFpcnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5Db21tYW5kLnByb3RvdHlwZS5vcHRzID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXN1bHQgPSB7fSxcbiAgICBsZW4gPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIga2V5ID0gdGhpcy5vcHRpb25zW2ldLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICByZXN1bHRba2V5XSA9IGtleSA9PT0gdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPyB0aGlzLl92ZXJzaW9uIDogdGhpc1trZXldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEFyZ3VtZW50IGBuYW1lYCBpcyBtaXNzaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5taXNzaW5nQXJndW1lbnQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCBgJXMnXCIsIG5hbWUpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59O1xuXG4vKipcbiAqIGBPcHRpb25gIGlzIG1pc3NpbmcgYW4gYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBgZmxhZ2Agb3Igbm90aGluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxhZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUub3B0aW9uTWlzc2luZ0FyZ3VtZW50ID0gZnVuY3Rpb24ob3B0aW9uLCBmbGFnKSB7XG4gIGlmIChmbGFnKSB7XG4gICAgY29uc29sZS5lcnJvcihcImVycm9yOiBvcHRpb24gYCVzJyBhcmd1bWVudCBtaXNzaW5nLCBnb3QgYCVzJ1wiLCBvcHRpb24uZmxhZ3MsIGZsYWcpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogb3B0aW9uIGAlcycgYXJndW1lbnQgbWlzc2luZ1wiLCBvcHRpb24uZmxhZ3MpO1xuICB9XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn07XG5cbi8qKlxuICogVW5rbm93biBvcHRpb24gYGZsYWdgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbGFnXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS51bmtub3duT3B0aW9uID0gZnVuY3Rpb24oZmxhZykge1xuICBpZiAodGhpcy5fYWxsb3dVbmtub3duT3B0aW9uKSByZXR1cm47XG4gIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogdW5rbm93biBvcHRpb24gYCVzJ1wiLCBmbGFnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufTtcblxuLyoqXG4gKiBWYXJpYWRpYyBhcmd1bWVudCB3aXRoIGBuYW1lYCBpcyBub3QgdGhlIGxhc3QgYXJndW1lbnQgYXMgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnZhcmlhZGljQXJnTm90TGFzdCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgY29uc29sZS5lcnJvcihcImVycm9yOiB2YXJpYWRpYyBhcmd1bWVudHMgbXVzdCBiZSBsYXN0IGAlcydcIiwgbmFtZSk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwcm9ncmFtIHZlcnNpb24gdG8gYHN0cmAuXG4gKlxuICogVGhpcyBtZXRob2QgYXV0by1yZWdpc3RlcnMgdGhlIFwiLVYsIC0tdmVyc2lvblwiIGZsYWdcbiAqIHdoaWNoIHdpbGwgcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIHdoZW4gcGFzc2VkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmxhZ3NdXG4gKiBAcmV0dXJuIHtDb21tYW5kfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUudmVyc2lvbiA9IGZ1bmN0aW9uKHN0ciwgZmxhZ3MpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICB0aGlzLl92ZXJzaW9uID0gc3RyO1xuICBmbGFncyA9IGZsYWdzIHx8ICctViwgLS12ZXJzaW9uJztcbiAgdmFyIHZlcnNpb25PcHRpb24gPSBuZXcgT3B0aW9uKGZsYWdzLCAnb3V0cHV0IHRoZSB2ZXJzaW9uIG51bWJlcicpO1xuICB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSA9IHZlcnNpb25PcHRpb24ubG9uZy5zdWJzdHIoMikgfHwgJ3ZlcnNpb24nO1xuICB0aGlzLm9wdGlvbnMucHVzaCh2ZXJzaW9uT3B0aW9uKTtcbiAgdGhpcy5vbignb3B0aW9uOicgKyB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSwgZnVuY3Rpb24oKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoc3RyICsgJ1xcbicpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGRlc2NyaXB0aW9uIHRvIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzRGVzY3JpcHRpb25cbiAqIEByZXR1cm4ge1N0cmluZ3xDb21tYW5kfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5kZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKHN0ciwgYXJnc0Rlc2NyaXB0aW9uKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gIHRoaXMuX2Rlc2NyaXB0aW9uID0gc3RyO1xuICB0aGlzLl9hcmdzRGVzY3JpcHRpb24gPSBhcmdzRGVzY3JpcHRpb247XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgYW4gYWxpYXMgZm9yIHRoZSBjb21tYW5kXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFsaWFzXG4gKiBAcmV0dXJuIHtTdHJpbmd8Q29tbWFuZH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuYWxpYXMgPSBmdW5jdGlvbihhbGlhcykge1xuICB2YXIgY29tbWFuZCA9IHRoaXM7XG4gIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCAhPT0gMCkge1xuICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzW3RoaXMuY29tbWFuZHMubGVuZ3RoIC0gMV07XG4gIH1cblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbW1hbmQuX2FsaWFzO1xuXG4gIGlmIChhbGlhcyA9PT0gY29tbWFuZC5fbmFtZSkgdGhyb3cgbmV3IEVycm9yKCdDb21tYW5kIGFsaWFzIGNhblxcJ3QgYmUgdGhlIHNhbWUgYXMgaXRzIG5hbWUnKTtcblxuICBjb21tYW5kLl9hbGlhcyA9IGFsaWFzO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IC8gZ2V0IHRoZSBjb21tYW5kIHVzYWdlIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ3xDb21tYW5kfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS51c2FnZSA9IGZ1bmN0aW9uKHN0cikge1xuICB2YXIgYXJncyA9IHRoaXMuX2FyZ3MubWFwKGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpO1xuICB9KTtcblxuICB2YXIgdXNhZ2UgPSAnW29wdGlvbnNdJyArXG4gICAgKHRoaXMuY29tbWFuZHMubGVuZ3RoID8gJyBbY29tbWFuZF0nIDogJycpICtcbiAgICAodGhpcy5fYXJncy5sZW5ndGggPyAnICcgKyBhcmdzLmpvaW4oJyAnKSA6ICcnKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuX3VzYWdlIHx8IHVzYWdlO1xuICB0aGlzLl91c2FnZSA9IHN0cjtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogR2V0IG9yIHNldCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ3xDb21tYW5kfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24oc3RyKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5fbmFtZTtcbiAgdGhpcy5fbmFtZSA9IHN0cjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybiBwcmVwYXJlZCBjb21tYW5kcy5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnByZXBhcmVDb21tYW5kcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jb21tYW5kcy5maWx0ZXIoZnVuY3Rpb24oY21kKSB7XG4gICAgcmV0dXJuICFjbWQuX25vSGVscDtcbiAgfSkubWFwKGZ1bmN0aW9uKGNtZCkge1xuICAgIHZhciBhcmdzID0gY21kLl9hcmdzLm1hcChmdW5jdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpO1xuICAgIH0pLmpvaW4oJyAnKTtcblxuICAgIHJldHVybiBbXG4gICAgICBjbWQuX25hbWUgK1xuICAgICAgICAoY21kLl9hbGlhcyA/ICd8JyArIGNtZC5fYWxpYXMgOiAnJykgK1xuICAgICAgICAoY21kLm9wdGlvbnMubGVuZ3RoID8gJyBbb3B0aW9uc10nIDogJycpICtcbiAgICAgICAgKGFyZ3MgPyAnICcgKyBhcmdzIDogJycpLFxuICAgICAgY21kLl9kZXNjcmlwdGlvblxuICAgIF07XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxhcmdlc3QgY29tbWFuZCBsZW5ndGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUubGFyZ2VzdENvbW1hbmRMZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbW1hbmRzID0gdGhpcy5wcmVwYXJlQ29tbWFuZHMoKTtcbiAgcmV0dXJuIGNvbW1hbmRzLnJlZHVjZShmdW5jdGlvbihtYXgsIGNvbW1hbmQpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBjb21tYW5kWzBdLmxlbmd0aCk7XG4gIH0sIDApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxhcmdlc3Qgb3B0aW9uIGxlbmd0aC5cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5sYXJnZXN0T3B0aW9uTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvcHRpb25zID0gW10uc2xpY2UuY2FsbCh0aGlzLm9wdGlvbnMpO1xuICBvcHRpb25zLnB1c2goe1xuICAgIGZsYWdzOiAnLWgsIC0taGVscCdcbiAgfSk7XG4gIHJldHVybiBvcHRpb25zLnJlZHVjZShmdW5jdGlvbihtYXgsIG9wdGlvbikge1xuICAgIHJldHVybiBNYXRoLm1heChtYXgsIG9wdGlvbi5mbGFncy5sZW5ndGgpO1xuICB9LCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXJnZXN0IGFyZyBsZW5ndGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUubGFyZ2VzdEFyZ0xlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fYXJncy5yZWR1Y2UoZnVuY3Rpb24obWF4LCBhcmcpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBhcmcubmFtZS5sZW5ndGgpO1xuICB9LCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYWQgd2lkdGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUucGFkV2lkdGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdpZHRoID0gdGhpcy5sYXJnZXN0T3B0aW9uTGVuZ3RoKCk7XG4gIGlmICh0aGlzLl9hcmdzRGVzY3JpcHRpb24gJiYgdGhpcy5fYXJncy5sZW5ndGgpIHtcbiAgICBpZiAodGhpcy5sYXJnZXN0QXJnTGVuZ3RoKCkgPiB3aWR0aCkge1xuICAgICAgd2lkdGggPSB0aGlzLmxhcmdlc3RBcmdMZW5ndGgoKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5jb21tYW5kcyAmJiB0aGlzLmNvbW1hbmRzLmxlbmd0aCkge1xuICAgIGlmICh0aGlzLmxhcmdlc3RDb21tYW5kTGVuZ3RoKCkgPiB3aWR0aCkge1xuICAgICAgd2lkdGggPSB0aGlzLmxhcmdlc3RDb21tYW5kTGVuZ3RoKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpZHRoO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gaGVscCBmb3Igb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5vcHRpb25IZWxwID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3aWR0aCA9IHRoaXMucGFkV2lkdGgoKTtcblxuICAvLyBBcHBlbmQgdGhlIGhlbHAgaW5mb3JtYXRpb25cbiAgcmV0dXJuIHRoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHBhZChvcHRpb24uZmxhZ3MsIHdpZHRoKSArICcgICcgKyBvcHRpb24uZGVzY3JpcHRpb24gK1xuICAgICAgKChvcHRpb24uYm9vbCAmJiBvcHRpb24uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpID8gJyAoZGVmYXVsdDogJyArIEpTT04uc3RyaW5naWZ5KG9wdGlvbi5kZWZhdWx0VmFsdWUpICsgJyknIDogJycpO1xuICB9KS5jb25jYXQoW3BhZCgnLWgsIC0taGVscCcsIHdpZHRoKSArICcgICcgKyAnb3V0cHV0IHVzYWdlIGluZm9ybWF0aW9uJ10pXG4gICAgLmpvaW4oJ1xcbicpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gY29tbWFuZCBoZWxwIGRvY3VtZW50YXRpb24uXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuY29tbWFuZEhlbHAgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmNvbW1hbmRzLmxlbmd0aCkgcmV0dXJuICcnO1xuXG4gIHZhciBjb21tYW5kcyA9IHRoaXMucHJlcGFyZUNvbW1hbmRzKCk7XG4gIHZhciB3aWR0aCA9IHRoaXMucGFkV2lkdGgoKTtcblxuICByZXR1cm4gW1xuICAgICdDb21tYW5kczonLFxuICAgIGNvbW1hbmRzLm1hcChmdW5jdGlvbihjbWQpIHtcbiAgICAgIHZhciBkZXNjID0gY21kWzFdID8gJyAgJyArIGNtZFsxXSA6ICcnO1xuICAgICAgcmV0dXJuIChkZXNjID8gcGFkKGNtZFswXSwgd2lkdGgpIDogY21kWzBdKSArIGRlc2M7XG4gICAgfSkuam9pbignXFxuJykucmVwbGFjZSgvXi9nbSwgJyAgJyksXG4gICAgJydcbiAgXS5qb2luKCdcXG4nKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHByb2dyYW0gaGVscCBkb2N1bWVudGF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmhlbHBJbmZvcm1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZGVzYyA9IFtdO1xuICBpZiAodGhpcy5fZGVzY3JpcHRpb24pIHtcbiAgICBkZXNjID0gW1xuICAgICAgdGhpcy5fZGVzY3JpcHRpb24sXG4gICAgICAnJ1xuICAgIF07XG5cbiAgICB2YXIgYXJnc0Rlc2NyaXB0aW9uID0gdGhpcy5fYXJnc0Rlc2NyaXB0aW9uO1xuICAgIGlmIChhcmdzRGVzY3JpcHRpb24gJiYgdGhpcy5fYXJncy5sZW5ndGgpIHtcbiAgICAgIHZhciB3aWR0aCA9IHRoaXMucGFkV2lkdGgoKTtcbiAgICAgIGRlc2MucHVzaCgnQXJndW1lbnRzOicpO1xuICAgICAgZGVzYy5wdXNoKCcnKTtcbiAgICAgIHRoaXMuX2FyZ3MuZm9yRWFjaChmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgZGVzYy5wdXNoKCcgICcgKyBwYWQoYXJnLm5hbWUsIHdpZHRoKSArICcgICcgKyBhcmdzRGVzY3JpcHRpb25bYXJnLm5hbWVdKTtcbiAgICAgIH0pO1xuICAgICAgZGVzYy5wdXNoKCcnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY21kTmFtZSA9IHRoaXMuX25hbWU7XG4gIGlmICh0aGlzLl9hbGlhcykge1xuICAgIGNtZE5hbWUgPSBjbWROYW1lICsgJ3wnICsgdGhpcy5fYWxpYXM7XG4gIH1cbiAgdmFyIHVzYWdlID0gW1xuICAgICdVc2FnZTogJyArIGNtZE5hbWUgKyAnICcgKyB0aGlzLnVzYWdlKCksXG4gICAgJydcbiAgXTtcblxuICB2YXIgY21kcyA9IFtdO1xuICB2YXIgY29tbWFuZEhlbHAgPSB0aGlzLmNvbW1hbmRIZWxwKCk7XG4gIGlmIChjb21tYW5kSGVscCkgY21kcyA9IFtjb21tYW5kSGVscF07XG5cbiAgdmFyIG9wdGlvbnMgPSBbXG4gICAgJ09wdGlvbnM6JyxcbiAgICAnJyArIHRoaXMub3B0aW9uSGVscCgpLnJlcGxhY2UoL14vZ20sICcgICcpLFxuICAgICcnXG4gIF07XG5cbiAgcmV0dXJuIHVzYWdlXG4gICAgLmNvbmNhdChkZXNjKVxuICAgIC5jb25jYXQob3B0aW9ucylcbiAgICAuY29uY2F0KGNtZHMpXG4gICAgLmpvaW4oJ1xcbicpO1xufTtcblxuLyoqXG4gKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb21tYW5kXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5vdXRwdXRIZWxwID0gZnVuY3Rpb24oY2IpIHtcbiAgaWYgKCFjYikge1xuICAgIGNiID0gZnVuY3Rpb24ocGFzc3RocnUpIHtcbiAgICAgIHJldHVybiBwYXNzdGhydTtcbiAgICB9O1xuICB9XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNiKHRoaXMuaGVscEluZm9ybWF0aW9uKCkpKTtcbiAgdGhpcy5lbWl0KCctLWhlbHAnKTtcbn07XG5cbi8qKlxuICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gYW5kIGV4aXQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5oZWxwID0gZnVuY3Rpb24oY2IpIHtcbiAgdGhpcy5vdXRwdXRIZWxwKGNiKTtcbiAgcHJvY2Vzcy5leGl0KCk7XG59O1xuXG4vKipcbiAqIENhbWVsLWNhc2UgdGhlIGdpdmVuIGBmbGFnYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbGFnXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjYW1lbGNhc2UoZmxhZykge1xuICByZXR1cm4gZmxhZy5zcGxpdCgnLScpLnJlZHVjZShmdW5jdGlvbihzdHIsIHdvcmQpIHtcbiAgICByZXR1cm4gc3RyICsgd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFkIGBzdHJgIHRvIGB3aWR0aGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtOdW1iZXJ9IHdpZHRoXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYWQoc3RyLCB3aWR0aCkge1xuICB2YXIgbGVuID0gTWF0aC5tYXgoMCwgd2lkdGggLSBzdHIubGVuZ3RoKTtcbiAgcmV0dXJuIHN0ciArIEFycmF5KGxlbiArIDEpLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBpZiBuZWNlc3NhcnlcbiAqXG4gKiBAcGFyYW0ge0NvbW1hbmR9IGNvbW1hbmQgdG8gb3V0cHV0IGhlbHAgZm9yXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBvZiBvcHRpb25zIHRvIHNlYXJjaCBmb3IgLWggb3IgLS1oZWxwXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBvdXRwdXRIZWxwSWZOZWNlc3NhcnkoY21kLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob3B0aW9uc1tpXSA9PT0gJy0taGVscCcgfHwgb3B0aW9uc1tpXSA9PT0gJy1oJykge1xuICAgICAgY21kLm91dHB1dEhlbHAoKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhbiBhcmd1bWVudCBhbiByZXR1cm5zIGl0cyBodW1hbiByZWFkYWJsZSBlcXVpdmFsZW50IGZvciBoZWxwIHVzYWdlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZykge1xuICB2YXIgbmFtZU91dHB1dCA9IGFyZy5uYW1lICsgKGFyZy52YXJpYWRpYyA9PT0gdHJ1ZSA/ICcuLi4nIDogJycpO1xuXG4gIHJldHVybiBhcmcucmVxdWlyZWRcbiAgICA/ICc8JyArIG5hbWVPdXRwdXQgKyAnPidcbiAgICA6ICdbJyArIG5hbWVPdXRwdXQgKyAnXSc7XG59XG5cbi8vIGZvciB2ZXJzaW9ucyBiZWZvcmUgbm9kZSB2MC44IHdoZW4gdGhlcmUgd2VyZW4ndCBgZnMuZXhpc3RzU3luY2BcbmZ1bmN0aW9uIGV4aXN0cyhmaWxlKSB7XG4gIHRyeSB7XG4gICAgaWYgKGZzLnN0YXRTeW5jKGZpbGUpLmlzRmlsZSgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCBwcm9ncmFtIGZyb20gJ2NvbW1hbmRlcidcblxuaW1wb3J0IHsgZ2V0Q291bnRyeUZsYWcgfSBmcm9tICcuL2luZGV4J1xuXG5cbnByb2dyYW1cbiAgLnZlcnNpb24oJzAuMS4wJylcbiAgLm5hbWUoJ2NvdW50cnktZmxhZy1jbGknKVxuICAuY29tbWFuZCgnZ2V0IDxmbGFnPicpXG4gIC5hY3Rpb24oKGZsYWcpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBnZXRDb3VudHJ5RmxhZyhmbGFnKTtcbiAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICB9KVxuXG5wcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndilcbiIsICJleHBvcnQgZnVuY3Rpb24gZ2V0Q291bnRyeUZsYWcgKGNvdW50cnlDb2RlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY291bnRyeUNvZGUubGVuZ3RoICE9IDIpIHsgcmV0dXJuIHVuZGVmaW5lZH1cbiAgcmV0dXJuIGNvdW50cnlDb2RlLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvLi9nLCBjaGFyID0+IFxuICAgICAgU3RyaW5nLmZyb21Db2RlUG9pbnQoMTI3Mzk3ICsgY2hhci5jaGFyQ29kZUF0KDApKSk7XG59XG4gICJdLAogICJtYXBwaW5ncyI6ICI7a2xCQUFBLGdCQUlBLEdBQUksR0FBZSxRQUFRLFVBQVUsYUFDakMsRUFBUSxRQUFRLGlCQUFpQixNQUNqQyxFQUFPLFFBQVEsUUFDZixFQUFVLEVBQUssUUFDZixFQUFXLEVBQUssU0FDaEIsRUFBSyxRQUFRLE1BTWpCLFFBQVEsUUFBUSxTQUFTLEVBQVMsR0FNbEMsRUFBVSxFQUFPLFFBQVUsR0FBSSxHQU0vQixFQUFRLFFBQVUsRUFNbEIsRUFBUSxPQUFTLEVBVWpCLFdBQWdCLEVBQU8sRUFBYSxDQUNsQyxLQUFLLE1BQVEsRUFDYixLQUFLLFNBQVcsRUFBTSxRQUFRLE1BQVEsRUFDdEMsS0FBSyxTQUFXLEVBQU0sUUFBUSxNQUFRLEVBQ3RDLEtBQUssS0FBTyxFQUFNLFFBQVEsVUFBWSxHQUN0QyxFQUFRLEVBQU0sTUFBTSxVQUNoQixFQUFNLE9BQVMsR0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFNLEtBQUssTUFBSyxNQUFRLEVBQU0sU0FDcEUsS0FBSyxLQUFPLEVBQU0sUUFDbEIsS0FBSyxZQUFjLEdBQWUsR0FVcEMsRUFBTyxVQUFVLEtBQU8sVUFBVyxDQUNqQyxNQUFPLE1BQUssS0FDVCxRQUFRLEtBQU0sSUFDZCxRQUFRLE1BQU8sS0FXcEIsRUFBTyxVQUFVLGNBQWdCLFVBQVcsQ0FDMUMsTUFBTyxHQUFVLEtBQUssU0FXeEIsRUFBTyxVQUFVLEdBQUssU0FBUyxFQUFLLENBQ2xDLE1BQU8sTUFBSyxRQUFVLEdBQU8sS0FBSyxPQUFTLEdBVTdDLFdBQWlCLEVBQU0sQ0FDckIsS0FBSyxTQUFXLEdBQ2hCLEtBQUssUUFBVSxHQUNmLEtBQUssT0FBUyxHQUNkLEtBQUssb0JB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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/commander/index.js", "../src/cli.ts", "../src/index.ts"],
4
+ "sourcesContent": ["/**\n * Module dependencies.\n */\n\nvar EventEmitter = require('events').EventEmitter;\nvar spawn = require('child_process').spawn;\nvar path = require('path');\nvar dirname = path.dirname;\nvar basename = path.basename;\nvar fs = require('fs');\n\n/**\n * Inherit `Command` from `EventEmitter.prototype`.\n */\n\nrequire('util').inherits(Command, EventEmitter);\n\n/**\n * Expose the root command.\n */\n\nexports = module.exports = new Command();\n\n/**\n * Expose `Command`.\n */\n\nexports.Command = Command;\n\n/**\n * Expose `Option`.\n */\n\nexports.Option = Option;\n\n/**\n * Initialize a new `Option` with the given `flags` and `description`.\n *\n * @param {String} flags\n * @param {String} description\n * @api public\n */\n\nfunction Option(flags, description) {\n this.flags = flags;\n this.required = flags.indexOf('<') >= 0;\n this.optional = flags.indexOf('[') >= 0;\n this.bool = flags.indexOf('-no-') === -1;\n flags = flags.split(/[ ,|]+/);\n if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift();\n this.long = flags.shift();\n this.description = description || '';\n}\n\n/**\n * Return option name.\n *\n * @return {String}\n * @api private\n */\n\nOption.prototype.name = function() {\n return this.long\n .replace('--', '')\n .replace('no-', '');\n};\n\n/**\n * Return option name, in a camelcase format that can be used\n * as a object attribute key.\n *\n * @return {String}\n * @api private\n */\n\nOption.prototype.attributeName = function() {\n return camelcase(this.name());\n};\n\n/**\n * Check if `arg` matches the short or long flag.\n *\n * @param {String} arg\n * @return {Boolean}\n * @api private\n */\n\nOption.prototype.is = function(arg) {\n return this.short === arg || this.long === arg;\n};\n\n/**\n * Initialize a new `Command`.\n *\n * @param {String} name\n * @api public\n */\n\nfunction Command(name) {\n this.commands = [];\n this.options = [];\n this._execs = {};\n this._allowUnknownOption = false;\n this._args = [];\n this._name = name || '';\n}\n\n/**\n * Add command `name`.\n *\n * The `.action()` callback is invoked when the\n * command `name` is specified via __ARGV__,\n * and the remaining arguments are applied to the\n * function for access.\n *\n * When the `name` is \"*\" an un-matched command\n * will be passed as the first arg, followed by\n * the rest of __ARGV__ remaining.\n *\n * Examples:\n *\n * program\n * .version('0.0.1')\n * .option('-C, --chdir <path>', 'change the working directory')\n * .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')\n * .option('-T, --no-tests', 'ignore test hook')\n *\n * program\n * .command('setup')\n * .description('run remote setup commands')\n * .action(function() {\n * console.log('setup');\n * });\n *\n * program\n * .command('exec <cmd>')\n * .description('run the given remote command')\n * .action(function(cmd) {\n * console.log('exec \"%s\"', cmd);\n * });\n *\n * program\n * .command('teardown <dir> [otherDirs...]')\n * .description('run teardown commands')\n * .action(function(dir, otherDirs) {\n * console.log('dir \"%s\"', dir);\n * if (otherDirs) {\n * otherDirs.forEach(function (oDir) {\n * console.log('dir \"%s\"', oDir);\n * });\n * }\n * });\n *\n * program\n * .command('*')\n * .description('deploy the given env')\n * .action(function(env) {\n * console.log('deploying \"%s\"', env);\n * });\n *\n * program.parse(process.argv);\n *\n * @param {String} name\n * @param {String} [desc] for git-style sub-commands\n * @return {Command} the new command\n * @api public\n */\n\nCommand.prototype.command = function(name, desc, opts) {\n if (typeof desc === 'object' && desc !== null) {\n opts = desc;\n desc = null;\n }\n opts = opts || {};\n var args = name.split(/ +/);\n var cmd = new Command(args.shift());\n\n if (desc) {\n cmd.description(desc);\n this.executables = true;\n this._execs[cmd._name] = true;\n if (opts.isDefault) this.defaultExecutable = cmd._name;\n }\n cmd._noHelp = !!opts.noHelp;\n this.commands.push(cmd);\n cmd.parseExpectedArgs(args);\n cmd.parent = this;\n\n if (desc) return this;\n return cmd;\n};\n\n/**\n * Define argument syntax for the top-level command.\n *\n * @api public\n */\n\nCommand.prototype.arguments = function(desc) {\n return this.parseExpectedArgs(desc.split(/ +/));\n};\n\n/**\n * Add an implicit `help [cmd]` subcommand\n * which invokes `--help` for the given command.\n *\n * @api private\n */\n\nCommand.prototype.addImplicitHelpCommand = function() {\n this.command('help [cmd]', 'display help for [cmd]');\n};\n\n/**\n * Parse expected `args`.\n *\n * For example `[\"[type]\"]` becomes `[{ required: false, name: 'type' }]`.\n *\n * @param {Array} args\n * @return {Command} for chaining\n * @api public\n */\n\nCommand.prototype.parseExpectedArgs = function(args) {\n if (!args.length) return;\n var self = this;\n args.forEach(function(arg) {\n var argDetails = {\n required: false,\n name: '',\n variadic: false\n };\n\n switch (arg[0]) {\n case '<':\n argDetails.required = true;\n argDetails.name = arg.slice(1, -1);\n break;\n case '[':\n argDetails.name = arg.slice(1, -1);\n break;\n }\n\n if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') {\n argDetails.variadic = true;\n argDetails.name = argDetails.name.slice(0, -3);\n }\n if (argDetails.name) {\n self._args.push(argDetails);\n }\n });\n return this;\n};\n\n/**\n * Register callback `fn` for the command.\n *\n * Examples:\n *\n * program\n * .command('help')\n * .description('display verbose help')\n * .action(function() {\n * // output help here\n * });\n *\n * @param {Function} fn\n * @return {Command} for chaining\n * @api public\n */\n\nCommand.prototype.action = function(fn) {\n var self = this;\n var listener = function(args, unknown) {\n // Parse any so-far unknown options\n args = args || [];\n unknown = unknown || [];\n\n var parsed = self.parseOptions(unknown);\n\n // Output help if necessary\n outputHelpIfNecessary(self, parsed.unknown);\n\n // If there are still any unknown options, then we simply\n // die, unless someone asked for help, in which case we give it\n // to them, and then we die.\n if (parsed.unknown.length > 0) {\n self.unknownOption(parsed.unknown[0]);\n }\n\n // Leftover arguments need to be pushed back. Fixes issue #56\n if (parsed.args.length) args = parsed.args.concat(args);\n\n self._args.forEach(function(arg, i) {\n if (arg.required && args[i] == null) {\n self.missingArgument(arg.name);\n } else if (arg.variadic) {\n if (i !== self._args.length - 1) {\n self.variadicArgNotLast(arg.name);\n }\n\n args[i] = args.splice(i);\n }\n });\n\n // Always append ourselves to the end of the arguments,\n // to make sure we match the number of arguments the user\n // expects\n if (self._args.length) {\n args[self._args.length] = self;\n } else {\n args.push(self);\n }\n\n fn.apply(self, args);\n };\n var parent = this.parent || this;\n var name = parent === this ? '*' : this._name;\n parent.on('command:' + name, listener);\n if (this._alias) parent.on('command:' + this._alias, listener);\n return this;\n};\n\n/**\n * Define option with `flags`, `description` and optional\n * coercion `fn`.\n *\n * The `flags` string should contain both the short and long flags,\n * separated by comma, a pipe or space. The following are all valid\n * all will output this way when `--help` is used.\n *\n * \"-p, --pepper\"\n * \"-p|--pepper\"\n * \"-p --pepper\"\n *\n * Examples:\n *\n * // simple boolean defaulting to false\n * program.option('-p, --pepper', 'add pepper');\n *\n * --pepper\n * program.pepper\n * // => Boolean\n *\n * // simple boolean defaulting to true\n * program.option('-C, --no-cheese', 'remove cheese');\n *\n * program.cheese\n * // => true\n *\n * --no-cheese\n * program.cheese\n * // => false\n *\n * // required argument\n * program.option('-C, --chdir <path>', 'change the working directory');\n *\n * --chdir /tmp\n * program.chdir\n * // => \"/tmp\"\n *\n * // optional argument\n * program.option('-c, --cheese [type]', 'add cheese [marble]');\n *\n * @param {String} flags\n * @param {String} description\n * @param {Function|*} [fn] or default\n * @param {*} [defaultValue]\n * @return {Command} for chaining\n * @api public\n */\n\nCommand.prototype.option = function(flags, description, fn, defaultValue) {\n var self = this,\n option = new Option(flags, description),\n oname = option.name(),\n name = option.attributeName();\n\n // default as 3rd arg\n if (typeof fn !== 'function') {\n if (fn instanceof RegExp) {\n var regex = fn;\n fn = function(val, def) {\n var m = regex.exec(val);\n return m ? m[0] : def;\n };\n } else {\n defaultValue = fn;\n fn = null;\n }\n }\n\n // preassign default value only for --no-*, [optional], or <required>\n if (!option.bool || option.optional || option.required) {\n // when --no-* we make sure default is true\n if (!option.bool) defaultValue = true;\n // preassign only if we have a default\n if (defaultValue !== undefined) {\n self[name] = defaultValue;\n option.defaultValue = defaultValue;\n }\n }\n\n // register the option\n this.options.push(option);\n\n // when it's passed assign the value\n // and conditionally invoke the callback\n this.on('option:' + oname, function(val) {\n // coercion\n if (val !== null && fn) {\n val = fn(val, self[name] === undefined ? defaultValue : self[name]);\n }\n\n // unassigned or bool\n if (typeof self[name] === 'boolean' || typeof self[name] === 'undefined') {\n // if no value, bool true, and we have a default, then use it!\n if (val == null) {\n self[name] = option.bool\n ? defaultValue || true\n : false;\n } else {\n self[name] = val;\n }\n } else if (val !== null) {\n // reassign\n self[name] = val;\n }\n });\n\n return this;\n};\n\n/**\n * Allow unknown options on the command line.\n *\n * @param {Boolean} arg if `true` or omitted, no error will be thrown\n * for unknown options.\n * @api public\n */\nCommand.prototype.allowUnknownOption = function(arg) {\n this._allowUnknownOption = arguments.length === 0 || arg;\n return this;\n};\n\n/**\n * Parse `argv`, settings options and invoking commands when defined.\n *\n * @param {Array} argv\n * @return {Command} for chaining\n * @api public\n */\n\nCommand.prototype.parse = function(argv) {\n // implicit help\n if (this.executables) this.addImplicitHelpCommand();\n\n // store raw args\n this.rawArgs = argv;\n\n // guess name\n this._name = this._name || basename(argv[1], '.js');\n\n // github-style sub-commands with no sub-command\n if (this.executables && argv.length < 3 && !this.defaultExecutable) {\n // this user needs help\n argv.push('--help');\n }\n\n // process argv\n var parsed = this.parseOptions(this.normalize(argv.slice(2)));\n var args = this.args = parsed.args;\n\n var result = this.parseArgs(this.args, parsed.unknown);\n\n // executable sub-commands\n var name = result.args[0];\n\n var aliasCommand = null;\n // check alias of sub commands\n if (name) {\n aliasCommand = this.commands.filter(function(command) {\n return command.alias() === name;\n })[0];\n }\n\n if (this._execs[name] === true) {\n return this.executeSubCommand(argv, args, parsed.unknown);\n } else if (aliasCommand) {\n // is alias of a subCommand\n args[0] = aliasCommand._name;\n return this.executeSubCommand(argv, args, parsed.unknown);\n } else if (this.defaultExecutable) {\n // use the default subcommand\n args.unshift(this.defaultExecutable);\n return this.executeSubCommand(argv, args, parsed.unknown);\n }\n\n return result;\n};\n\n/**\n * Execute a sub-command executable.\n *\n * @param {Array} argv\n * @param {Array} args\n * @param {Array} unknown\n * @api private\n */\n\nCommand.prototype.executeSubCommand = function(argv, args, unknown) {\n args = args.concat(unknown);\n\n if (!args.length) this.help();\n if (args[0] === 'help' && args.length === 1) this.help();\n\n // <cmd> --help\n if (args[0] === 'help') {\n args[0] = args[1];\n args[1] = '--help';\n }\n\n // executable\n var f = argv[1];\n // name of the subcommand, link `pm-install`\n var bin = basename(f, path.extname(f)) + '-' + args[0];\n\n // In case of globally installed, get the base dir where executable\n // subcommand file should be located at\n var baseDir;\n\n var resolvedLink = fs.realpathSync(f);\n\n baseDir = dirname(resolvedLink);\n\n // prefer local `./<bin>` to bin in the $PATH\n var localBin = path.join(baseDir, bin);\n\n // whether bin file is a js script with explicit `.js` or `.ts` extension\n var isExplicitJS = false;\n if (exists(localBin + '.js')) {\n bin = localBin + '.js';\n isExplicitJS = true;\n } else if (exists(localBin + '.ts')) {\n bin = localBin + '.ts';\n isExplicitJS = true;\n } else if (exists(localBin)) {\n bin = localBin;\n }\n\n args = args.slice(1);\n\n var proc;\n if (process.platform !== 'win32') {\n if (isExplicitJS) {\n args.unshift(bin);\n // add executable arguments to spawn\n args = (process.execArgv || []).concat(args);\n\n proc = spawn(process.argv[0], args, { stdio: 'inherit', customFds: [0, 1, 2] });\n } else {\n proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] });\n }\n } else {\n args.unshift(bin);\n proc = spawn(process.execPath, args, { stdio: 'inherit' });\n }\n\n var signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n signals.forEach(function(signal) {\n process.on(signal, function() {\n if (proc.killed === false && proc.exitCode === null) {\n proc.kill(signal);\n }\n });\n });\n proc.on('close', process.exit.bind(process));\n proc.on('error', function(err) {\n if (err.code === 'ENOENT') {\n console.error('error: %s(1) does not exist, try --help', bin);\n } else if (err.code === 'EACCES') {\n console.error('error: %s(1) not executable. try chmod or run with root', bin);\n }\n process.exit(1);\n });\n\n // Store the reference to the child process\n this.runningCommand = proc;\n};\n\n/**\n * Normalize `args`, splitting joined short flags. For example\n * the arg \"-abc\" is equivalent to \"-a -b -c\".\n * This also normalizes equal sign and splits \"--abc=def\" into \"--abc def\".\n *\n * @param {Array} args\n * @return {Array}\n * @api private\n */\n\nCommand.prototype.normalize = function(args) {\n var ret = [],\n arg,\n lastOpt,\n index;\n\n for (var i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n if (i > 0) {\n lastOpt = this.optionFor(args[i - 1]);\n }\n\n if (arg === '--') {\n // Honor option terminator\n ret = ret.concat(args.slice(i));\n break;\n } else if (lastOpt && lastOpt.required) {\n ret.push(arg);\n } else if (arg.length > 1 && arg[0] === '-' && arg[1] !== '-') {\n arg.slice(1).split('').forEach(function(c) {\n ret.push('-' + c);\n });\n } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) {\n ret.push(arg.slice(0, index), arg.slice(index + 1));\n } else {\n ret.push(arg);\n }\n }\n\n return ret;\n};\n\n/**\n * Parse command `args`.\n *\n * When listener(s) are available those\n * callbacks are invoked, otherwise the \"*\"\n * event is emitted and those actions are invoked.\n *\n * @param {Array} args\n * @return {Command} for chaining\n * @api private\n */\n\nCommand.prototype.parseArgs = function(args, unknown) {\n var name;\n\n if (args.length) {\n name = args[0];\n if (this.listeners('command:' + name).length) {\n this.emit('command:' + args.shift(), args, unknown);\n } else {\n this.emit('command:*', args);\n }\n } else {\n outputHelpIfNecessary(this, unknown);\n\n // If there were no args and we have unknown options,\n // then they are extraneous and we need to error.\n if (unknown.length > 0) {\n this.unknownOption(unknown[0]);\n }\n if (this.commands.length === 0 &&\n this._args.filter(function(a) { return a.required; }).length === 0) {\n this.emit('command:*');\n }\n }\n\n return this;\n};\n\n/**\n * Return an option matching `arg` if any.\n *\n * @param {String} arg\n * @return {Option}\n * @api private\n */\n\nCommand.prototype.optionFor = function(arg) {\n for (var i = 0, len = this.options.length; i < len; ++i) {\n if (this.options[i].is(arg)) {\n return this.options[i];\n }\n }\n};\n\n/**\n * Parse options from `argv` returning `argv`\n * void of these options.\n *\n * @param {Array} argv\n * @return {Array}\n * @api public\n */\n\nCommand.prototype.parseOptions = function(argv) {\n var args = [],\n len = argv.length,\n literal,\n option,\n arg;\n\n var unknownOptions = [];\n\n // parse options\n for (var i = 0; i < len; ++i) {\n arg = argv[i];\n\n // literal args after --\n if (literal) {\n args.push(arg);\n continue;\n }\n\n if (arg === '--') {\n literal = true;\n continue;\n }\n\n // find matching Option\n option = this.optionFor(arg);\n\n // option is defined\n if (option) {\n // requires arg\n if (option.required) {\n arg = argv[++i];\n if (arg == null) return this.optionMissingArgument(option);\n this.emit('option:' + option.name(), arg);\n // optional arg\n } else if (option.optional) {\n arg = argv[i + 1];\n if (arg == null || (arg[0] === '-' && arg !== '-')) {\n arg = null;\n } else {\n ++i;\n }\n this.emit('option:' + option.name(), arg);\n // bool\n } else {\n this.emit('option:' + option.name());\n }\n continue;\n }\n\n // looks like an option\n if (arg.length > 1 && arg[0] === '-') {\n unknownOptions.push(arg);\n\n // If the next argument looks like it might be\n // an argument for this option, we pass it on.\n // If it isn't, then it'll simply be ignored\n if ((i + 1) < argv.length && argv[i + 1][0] !== '-') {\n unknownOptions.push(argv[++i]);\n }\n continue;\n }\n\n // arg\n args.push(arg);\n }\n\n return { args: args, unknown: unknownOptions };\n};\n\n/**\n * Return an object containing options as key-value pairs\n *\n * @return {Object}\n * @api public\n */\nCommand.prototype.opts = function() {\n var result = {},\n len = this.options.length;\n\n for (var i = 0; i < len; i++) {\n var key = this.options[i].attributeName();\n result[key] = key === this._versionOptionName ? this._version : this[key];\n }\n return result;\n};\n\n/**\n * Argument `name` is missing.\n *\n * @param {String} name\n * @api private\n */\n\nCommand.prototype.missingArgument = function(name) {\n console.error(\"error: missing required argument `%s'\", name);\n process.exit(1);\n};\n\n/**\n * `Option` is missing an argument, but received `flag` or nothing.\n *\n * @param {String} option\n * @param {String} flag\n * @api private\n */\n\nCommand.prototype.optionMissingArgument = function(option, flag) {\n if (flag) {\n console.error(\"error: option `%s' argument missing, got `%s'\", option.flags, flag);\n } else {\n console.error(\"error: option `%s' argument missing\", option.flags);\n }\n process.exit(1);\n};\n\n/**\n * Unknown option `flag`.\n *\n * @param {String} flag\n * @api private\n */\n\nCommand.prototype.unknownOption = function(flag) {\n if (this._allowUnknownOption) return;\n console.error(\"error: unknown option `%s'\", flag);\n process.exit(1);\n};\n\n/**\n * Variadic argument with `name` is not the last argument as required.\n *\n * @param {String} name\n * @api private\n */\n\nCommand.prototype.variadicArgNotLast = function(name) {\n console.error(\"error: variadic arguments must be last `%s'\", name);\n process.exit(1);\n};\n\n/**\n * Set the program version to `str`.\n *\n * This method auto-registers the \"-V, --version\" flag\n * which will print the version number when passed.\n *\n * @param {String} str\n * @param {String} [flags]\n * @return {Command} for chaining\n * @api public\n */\n\nCommand.prototype.version = function(str, flags) {\n if (arguments.length === 0) return this._version;\n this._version = str;\n flags = flags || '-V, --version';\n var versionOption = new Option(flags, 'output the version number');\n this._versionOptionName = versionOption.long.substr(2) || 'version';\n this.options.push(versionOption);\n this.on('option:' + this._versionOptionName, function() {\n process.stdout.write(str + '\\n');\n process.exit(0);\n });\n return this;\n};\n\n/**\n * Set the description to `str`.\n *\n * @param {String} str\n * @param {Object} argsDescription\n * @return {String|Command}\n * @api public\n */\n\nCommand.prototype.description = function(str, argsDescription) {\n if (arguments.length === 0) return this._description;\n this._description = str;\n this._argsDescription = argsDescription;\n return this;\n};\n\n/**\n * Set an alias for the command\n *\n * @param {String} alias\n * @return {String|Command}\n * @api public\n */\n\nCommand.prototype.alias = function(alias) {\n var command = this;\n if (this.commands.length !== 0) {\n command = this.commands[this.commands.length - 1];\n }\n\n if (arguments.length === 0) return command._alias;\n\n if (alias === command._name) throw new Error('Command alias can\\'t be the same as its name');\n\n command._alias = alias;\n return this;\n};\n\n/**\n * Set / get the command usage `str`.\n *\n * @param {String} str\n * @return {String|Command}\n * @api public\n */\n\nCommand.prototype.usage = function(str) {\n var args = this._args.map(function(arg) {\n return humanReadableArgName(arg);\n });\n\n var usage = '[options]' +\n (this.commands.length ? ' [command]' : '') +\n (this._args.length ? ' ' + args.join(' ') : '');\n\n if (arguments.length === 0) return this._usage || usage;\n this._usage = str;\n\n return this;\n};\n\n/**\n * Get or set the name of the command\n *\n * @param {String} str\n * @return {String|Command}\n * @api public\n */\n\nCommand.prototype.name = function(str) {\n if (arguments.length === 0) return this._name;\n this._name = str;\n return this;\n};\n\n/**\n * Return prepared commands.\n *\n * @return {Array}\n * @api private\n */\n\nCommand.prototype.prepareCommands = function() {\n return this.commands.filter(function(cmd) {\n return !cmd._noHelp;\n }).map(function(cmd) {\n var args = cmd._args.map(function(arg) {\n return humanReadableArgName(arg);\n }).join(' ');\n\n return [\n cmd._name +\n (cmd._alias ? '|' + cmd._alias : '') +\n (cmd.options.length ? ' [options]' : '') +\n (args ? ' ' + args : ''),\n cmd._description\n ];\n });\n};\n\n/**\n * Return the largest command length.\n *\n * @return {Number}\n * @api private\n */\n\nCommand.prototype.largestCommandLength = function() {\n var commands = this.prepareCommands();\n return commands.reduce(function(max, command) {\n return Math.max(max, command[0].length);\n }, 0);\n};\n\n/**\n * Return the largest option length.\n *\n * @return {Number}\n * @api private\n */\n\nCommand.prototype.largestOptionLength = function() {\n var options = [].slice.call(this.options);\n options.push({\n flags: '-h, --help'\n });\n return options.reduce(function(max, option) {\n return Math.max(max, option.flags.length);\n }, 0);\n};\n\n/**\n * Return the largest arg length.\n *\n * @return {Number}\n * @api private\n */\n\nCommand.prototype.largestArgLength = function() {\n return this._args.reduce(function(max, arg) {\n return Math.max(max, arg.name.length);\n }, 0);\n};\n\n/**\n * Return the pad width.\n *\n * @return {Number}\n * @api private\n */\n\nCommand.prototype.padWidth = function() {\n var width = this.largestOptionLength();\n if (this._argsDescription && this._args.length) {\n if (this.largestArgLength() > width) {\n width = this.largestArgLength();\n }\n }\n\n if (this.commands && this.commands.length) {\n if (this.largestCommandLength() > width) {\n width = this.largestCommandLength();\n }\n }\n\n return width;\n};\n\n/**\n * Return help for options.\n *\n * @return {String}\n * @api private\n */\n\nCommand.prototype.optionHelp = function() {\n var width = this.padWidth();\n\n // Append the help information\n return this.options.map(function(option) {\n return pad(option.flags, width) + ' ' + option.description +\n ((option.bool && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : '');\n }).concat([pad('-h, --help', width) + ' ' + 'output usage information'])\n .join('\\n');\n};\n\n/**\n * Return command help documentation.\n *\n * @return {String}\n * @api private\n */\n\nCommand.prototype.commandHelp = function() {\n if (!this.commands.length) return '';\n\n var commands = this.prepareCommands();\n var width = this.padWidth();\n\n return [\n 'Commands:',\n commands.map(function(cmd) {\n var desc = cmd[1] ? ' ' + cmd[1] : '';\n return (desc ? pad(cmd[0], width) : cmd[0]) + desc;\n }).join('\\n').replace(/^/gm, ' '),\n ''\n ].join('\\n');\n};\n\n/**\n * Return program help documentation.\n *\n * @return {String}\n * @api private\n */\n\nCommand.prototype.helpInformation = function() {\n var desc = [];\n if (this._description) {\n desc = [\n this._description,\n ''\n ];\n\n var argsDescription = this._argsDescription;\n if (argsDescription && this._args.length) {\n var width = this.padWidth();\n desc.push('Arguments:');\n desc.push('');\n this._args.forEach(function(arg) {\n desc.push(' ' + pad(arg.name, width) + ' ' + argsDescription[arg.name]);\n });\n desc.push('');\n }\n }\n\n var cmdName = this._name;\n if (this._alias) {\n cmdName = cmdName + '|' + this._alias;\n }\n var usage = [\n 'Usage: ' + cmdName + ' ' + this.usage(),\n ''\n ];\n\n var cmds = [];\n var commandHelp = this.commandHelp();\n if (commandHelp) cmds = [commandHelp];\n\n var options = [\n 'Options:',\n '' + this.optionHelp().replace(/^/gm, ' '),\n ''\n ];\n\n return usage\n .concat(desc)\n .concat(options)\n .concat(cmds)\n .join('\\n');\n};\n\n/**\n * Output help information for this command\n *\n * @api public\n */\n\nCommand.prototype.outputHelp = function(cb) {\n if (!cb) {\n cb = function(passthru) {\n return passthru;\n };\n }\n process.stdout.write(cb(this.helpInformation()));\n this.emit('--help');\n};\n\n/**\n * Output help information and exit.\n *\n * @api public\n */\n\nCommand.prototype.help = function(cb) {\n this.outputHelp(cb);\n process.exit();\n};\n\n/**\n * Camel-case the given `flag`\n *\n * @param {String} flag\n * @return {String}\n * @api private\n */\n\nfunction camelcase(flag) {\n return flag.split('-').reduce(function(str, word) {\n return str + word[0].toUpperCase() + word.slice(1);\n });\n}\n\n/**\n * Pad `str` to `width`.\n *\n * @param {String} str\n * @param {Number} width\n * @return {String}\n * @api private\n */\n\nfunction pad(str, width) {\n var len = Math.max(0, width - str.length);\n return str + Array(len + 1).join(' ');\n}\n\n/**\n * Output help information if necessary\n *\n * @param {Command} command to output help for\n * @param {Array} array of options to search for -h or --help\n * @api private\n */\n\nfunction outputHelpIfNecessary(cmd, options) {\n options = options || [];\n for (var i = 0; i < options.length; i++) {\n if (options[i] === '--help' || options[i] === '-h') {\n cmd.outputHelp();\n process.exit(0);\n }\n }\n}\n\n/**\n * Takes an argument an returns its human readable equivalent for help usage.\n *\n * @param {Object} arg\n * @return {String}\n * @api private\n */\n\nfunction humanReadableArgName(arg) {\n var nameOutput = arg.name + (arg.variadic === true ? '...' : '');\n\n return arg.required\n ? '<' + nameOutput + '>'\n : '[' + nameOutput + ']';\n}\n\n// for versions before node v0.8 when there weren't `fs.existsSync`\nfunction exists(file) {\n try {\n if (fs.statSync(file).isFile()) {\n return true;\n }\n } catch (e) {\n return false;\n }\n}\n", "#!/usr/bin/env node\n\nimport program from 'commander'\n\nimport { getCountryFlag } from './index'\n\n\nprogram\n .version('0.1.0')\n .name('country-flag-cli')\n .command('get <flag>')\n .action((flag) => {\n const result = getCountryFlag(flag);\n console.log(result);\n })\n\nprogram.parse(process.argv)\n", "export function getCountryFlag (countryCode: string): string | undefined {\n if (countryCode.length != 2) { return undefined}\n return countryCode.toUpperCase().replace(/./g, char => \n String.fromCodePoint(127397 + char.charCodeAt(0)));\n}\n "],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "country-flag-cli",
3
- "version": "0.0.3",
3
+ "version": "0.0.7",
4
4
  "description": "A simple cli app to return flag emojis given 2 digit country code",
5
5
  "author": "Evan Mattiza",
6
6
  "keywords": [
@@ -8,22 +8,25 @@
8
8
  "cli"
9
9
  ],
10
10
  "license": "MIT",
11
- "main": "./dist/index.js",
11
+ "main": "./src/cli.js",
12
12
  "bin": {
13
- "country-flag-cli": "./exec/country-flag-cli"
13
+ "country-flag-cli": "./dist/cli.js"
14
14
  },
15
15
  "files": [
16
16
  "dist/**/*",
17
- "!dist/**/*.test.js",
18
- "exec/**/*"
17
+ "!dist/**/*.test.js"
19
18
  ],
20
19
  "scripts": {
21
20
  "dev": "esno ./src/cli.ts",
22
21
  "clean": "rimraf ./dist/ ./exec/",
23
- "es-build": "esbuild --platform=node --bundle src/cli.ts --outdir=dist --minify --sourcemap=inline",
22
+ "es-build": "esbuild --platform=node --bundle src/cli.ts --outdir=dist --minify --sourcemap=external",
24
23
  "build": "npm run clean && npm run test && npm run es-build",
24
+ "mac-x64-pkg:build": "pkg -t node14-mac-x64 dist/cli.js -o ./exec/country-flag-cli_mac_x64",
25
+ "win-x64-pkg:build": "pkg -t node14-win-x64 dist/cli.js -o ./exec/country-flag-cli_win_x64",
26
+ "linux-x64-pkg:build": "pkg -t node14-linux-x64 dist/cli.js -o ./exec/country-flag-cli_linux_x64",
27
+ "linux-arm64-pkg:build": "pkg -t node14-linux-arm64 dist/cli.js -o ./exec/country-flag-cli_linux_arm64",
25
28
  "test": "jest",
26
- "bundle": "npm run build && pkg dist/cli.js -t node14 -o ./exec/country-flag-cli --compress GZip"
29
+ "bundle": "npm run build"
27
30
  },
28
31
  "devDependencies": {
29
32
  "@types/jest": "^27.4.0",
Binary file