country-flag-cli 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -1,24 +1,3 @@
1
- # typescript-cli-starter
2
-
3
- A simple and zero-opinion typescript starter template for building cross-platform command line applications.
4
-
5
- ![GitHub package.json dynamic](https://img.shields.io/github/package-json/keywords/khalidx/typescript-cli-starter.svg?style=flat-square)
6
-
7
- ![GitHub](https://img.shields.io/github/license/khalidx/typescript-cli-starter.svg?style=flat-square)
8
- ![GitHub package.json version](https://img.shields.io/github/package-json/v/khalidx/typescript-cli-starter.svg?style=flat-square)
9
- ![GitHub top language](https://img.shields.io/github/languages/top/khalidx/typescript-cli-starter.svg?style=flat-square)
10
-
11
- ![GitHub last commit](https://img.shields.io/github/last-commit/khalidx/typescript-cli-starter.svg?style=flat-square)
12
-
13
- Includes:
14
-
15
- - [TypeScript](https://www.typescriptlang.org/), for writing good code
16
- - [Ava](https://www.npmjs.com/package/ava), for writing good tests
17
- - [Commander](https://www.npmjs.com/package/commander), for building CLI applications
18
- - [Pkg](https://www.npmjs.com/package/pkg), for building cross-platform native executables
19
-
20
- Your application will be installable from `npm` or by sharing your native executables.
21
-
22
1
  ## Usage
23
2
 
24
3
  ### **dev**
package/dist/cli.js ADDED
@@ -0,0 +1,8 @@
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+`
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
+ `)};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
+ `).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(`
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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
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "country-flag-cli",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "A simple cli app to return flag emojis given 2 digit country code",
5
5
  "author": "Evan Mattiza",
6
6
  "keywords": [
@@ -9,10 +9,13 @@
9
9
  ],
10
10
  "license": "MIT",
11
11
  "main": "./dist/index.js",
12
- "bin": "./dist/cli.js",
12
+ "bin": {
13
+ "country-flag-cli": "./bin/exec/country-flag-cli"
14
+ },
13
15
  "files": [
14
16
  "dist/**/*",
15
- "!dist/**/*.test.js"
17
+ "!dist/**/*.test.js",
18
+ "exec/**/*"
16
19
  ],
17
20
  "scripts": {
18
21
  "dev": "esno ./src/cli.ts",
@@ -20,7 +23,7 @@
20
23
  "es-build": "esbuild --platform=node --bundle src/cli.ts --outdir=dist --minify --sourcemap=inline",
21
24
  "build": "npm run clean && npm run test && npm run es-build",
22
25
  "test": "jest",
23
- "bundle": "npm run build && pkg . -t node14 --out-dir ./exec/ --compress GZip"
26
+ "bundle": "npm run build && pkg dist/cli.js -t node14 -o ./exec/country-flag-cli --compress GZip"
24
27
  },
25
28
  "devDependencies": {
26
29
  "@types/jest": "^27.4.0",