ember-scoped-css 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/build/index.cjs
CHANGED
|
@@ -453,7 +453,15 @@ var import_unplugin3 = require("unplugin");
|
|
|
453
453
|
var import_parser2 = __toESM(require("@babel/parser"), 1);
|
|
454
454
|
var import_recast2 = __toESM(require("recast"), 1);
|
|
455
455
|
var parseOptions2 = {
|
|
456
|
-
parser:
|
|
456
|
+
parser: {
|
|
457
|
+
parse(source) {
|
|
458
|
+
return import_parser2.default.parse(source, {
|
|
459
|
+
sourceType: "module",
|
|
460
|
+
allowImportExportEverywhere: true,
|
|
461
|
+
tokens: true
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
}
|
|
457
465
|
};
|
|
458
466
|
function replaceHbsInJs_default(script, replaceFunction) {
|
|
459
467
|
const ast = import_recast2.default.parse(script, parseOptions2);
|
|
@@ -689,4 +697,4 @@ var scoped_css_unplugin_default = (0, import_unplugin3.createUnplugin)(
|
|
|
689
697
|
appScopedcssWebpack,
|
|
690
698
|
scopedCssUnplugin
|
|
691
699
|
});
|
|
692
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9hcHAtY3NzLXVucGx1Z2luLmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9hcHAtanMtdW5wbHVnaW4uanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZUFic29sdXRlUGF0aEhhc2guanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlcGxhY2VHbGltbWVyQXN0LmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZnNFeGlzdHMuanMiLCAiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1zY29wZWRjc3Mtd2VicGFjay5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2dldEZpbGVzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUNzcy5qcyIsICIuLi8uLi8uLi9zcmMvYnVpbGQvc2NvcGVkLWNzcy11bnBsdWdpbi5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlcGxhY2VIYnNJbkpzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgYXBwQ3NzVW5wbHVnaW4gZnJvbSAnLi9hcHAtY3NzLXVucGx1Z2luLmpzJztcbmltcG9ydCBhcHBKc1VucGx1Z2luIGZyb20gJy4vYXBwLWpzLXVucGx1Z2luLmpzJztcbmltcG9ydCBhcHBTY29wZWRjc3NXZWJwYWNrIGZyb20gJy4vYXBwLXNjb3BlZGNzcy13ZWJwYWNrLmpzJztcbmltcG9ydCBzY29wZWRDc3NVbnBsdWdpbiBmcm9tICcuL3Njb3BlZC1jc3MtdW5wbHVnaW4uanMnO1xuXG5leHBvcnQge1xuICBhcHBDc3NVbnBsdWdpbixcbiAgYXBwSnNVbnBsdWdpbixcbiAgYXBwU2NvcGVkY3NzV2VicGFjayxcbiAgc2NvcGVkQ3NzVW5wbHVnaW4sXG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gZnJvbSAndW5wbHVnaW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVVbnBsdWdpbigoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1jc3MtdW5wbHVnaW4nLFxuXG4gICAgLy8gbG9hZEluY2x1ZGUoaWQpe1xuICAgIC8vICAgaWYoaWQuZW5kc1dpdGgoJy5jc3MnKSl7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vICAgfVxuICAgIC8vIH0sXG5cbiAgICAvLyBsb2FkKGlkKXtcbiAgICAvLyAgIC8vIHRoaXMuYWRkV2F0Y2hGaWxlKGlkKTtcbiAgICAvLyAgIHJldHVybiAnY29uc29sZS5sb2coJyArIEpTT04uc3RyaW5naWZ5KGlkKSArICcpOyc7XG4gICAgLy8gfSxcblxuICAgIC8vIHRyYW5zZm9ybUluY2x1ZGUoaWQpIHtcbiAgICAvLyAgIGlmKGlkLmVuZHNXaXRoKCcuY3NzJykpe1xuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LFxuXG4gICAgLy8gYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgLy8gICByZXR1cm4gY29kZTtcbiAgICAvLyB9LFxuICB9O1xufSk7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi4vbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJlcGxhY2VHbGltbWVyQXN0IGZyb20gJy4uL2xpYi9yZXBsYWNlR2xpbW1lckFzdC5qcyc7XG5cbmZ1bmN0aW9uKiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzKSB7XG4gIGZvciAobGV0IGluc3RydWN0aW9uIG9mIG9wY29kZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB5aWVsZCBpbnN0cnVjdGlvbjtcblxuICAgIGZvciAobGV0IHN1Ykluc3RydWN0aW9uIG9mIGl0ZXJhdGVPcGNvZGVzKGluc3RydWN0aW9uKSkge1xuICAgICAgeWllbGQgc3ViSW5zdHJ1Y3Rpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVUYWdOYW1lKHRhZykge1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIGlmICh0YWcgPT09IDApIHtcbiAgICAgIHJldHVybiAnZGl2JztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMSkge1xuICAgICAgcmV0dXJuICdzcGFuJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMikge1xuICAgICAgcmV0dXJuICdwJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMykge1xuICAgICAgcmV0dXJuICdhJztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdGFnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVVucGx1Z2luKCh7IGFwcERpciB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1qcy11bnBsdWdpbicsXG5cbiAgICB0cmFuc2Zvcm1JbmNsdWRlKGlkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpZC5pbmNsdWRlcyhwYXRoLmJhc2VuYW1lKGFwcERpcikpICYmXG4gICAgICAgIChpZC5lbmRzV2l0aCgnLmpzJykgfHwgaWQuZW5kc1dpdGgoJy5oYnMnKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2hvbGUgdGhpbmcgaXMgZXJyb3IgcHJvbmUsIGFuZCB3ZSBzaG91bGQgc3dpdGNoIHRoZSBlbWJyb2lkZXJcbiAgICAgKiB0ZWNobmlxdWUgdG8gdXNpbmcgYSBiYWJlbCBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBVc2luZyBhIHdlYnBhY2sgcGx1Z2luIGlzIHRvbyBsYXRlIGluIHRoZSBwcm9jZXNzLlxuICAgICAqIFdlIGRvbid0IHdhbnQgdG8gYmUgZGVhbGluZyB3aXRoIHdpcmUtZm9ybWF0LCBiZWNhdXNlXG4gICAgICogLSBpdCdzIG5vdCBwdWJsaWMgQVBJXG4gICAgICogLSBpdCBjYW4gY2hhbmdlIGFzIGVtYmVyLXNvdXJjZSBpcyB1cGdyYWRlZFxuICAgICAqIC0gdGhlIG51bWJlcnMgYXJlIG5vdCBcInN0YWJsZVwiLCBpbiB0aGF0IHRoZXkgYXJlIGJpdHdpc2UgYW5kZWQgYW5kIG9yZWRcbiAgICAgKiAgIHRvZ2V0aGVyIHNvIHRoYXQgc3RvcmFnZSBpcyBlZmZpY2llbnQgLS0gd2hpY2ggbWVhbnMgd2UnZCBuZWVkIHRvIGtub3dcbiAgICAgKiAgIGFsbCB0aGUgb3Bjb2RlcyBhbmQgYXBwcm9wcmlhdGVseSB8IC8gJiB0byBkZWNvbnN0cnVjdCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBsZXQgY3NzUGF0aCA9IGlkLnJlcGxhY2UoLyhcXC5qcyl8KFxcLmhicykvLCAnLmNzcycpO1xuICAgICAgbGV0IG1vZHVsZUdyb3VwUGF0aCA9IGNzc1BhdGg7XG5cbiAgICAgIC8qKlxuICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgKlxuICAgICAgICogTm90ZSB0aGF0IFBvZC1jb21wb25lbnRzIHdpbGwgbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICAgICAgICovXG4gICAgICBsZXQgaXNQb2QgPSAhaWQuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmIGlkLmVuZHNXaXRoKCcvdGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgIGlmIChpc1BvZCkge1xuICAgICAgICBjc3NQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpZCksICdzdHlsZXMuY3NzJyk7XG4gICAgICAgIG1vZHVsZUdyb3VwUGF0aCA9IHBhdGguZGlybmFtZShjc3NQYXRoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChtb2R1bGVHcm91cFBhdGgpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVwbGFjZUdsaW1tZXJBc3QoY29kZSwgaWQsIChvcGNvZGVzLCBjc3MpID0+IHtcbiAgICAgICAgY29uc3QgeyBjbGFzc2VzLCB0YWdzIH0gPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcbiAgICAgICAgLy8gdGhpcy5hZGRXYXRjaEZpbGUoY3NzUGF0aCk7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbnN0cnVjdGlvbiBvZiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzWzBdKSkge1xuICAgICAgICAgIC8vIHJlcGxhY2UgY2xhc3Nlc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzBdID09PSAxNCAmJlxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMV0gPT09IDAgJiZcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzJdICYmXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXS5zcGxpdCgnICcpLmZpbmQoKGkpID0+IGNsYXNzZXMuaGFzKGkudHJpbSgpKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXSA9IGluc3RydWN0aW9uWzJdXG4gICAgICAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUudHJpbSgpICYmIGNsYXNzZXMuaGFzKGNsYXNzTmFtZS50cmltKCkpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnRyaW0oKSArICdfJyArIHBvc3RmaXg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlcGxhY2Ugc3RyaW5ncyBpbiBpZiBjb25kaXRpb25zXG4gICAgICAgICAgLy8gdGhpcyBpcyBicml0dGxlLCBiZWNhdXNlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBkZWVwbHkgbmVzdGVkXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyB0aGlzIHBhcnRpY3VsYXIgb25lIGlzIDxkaXYgY2xhc3M9XCJnbG9iYWwtcHJvYmFibHkge3tpZiBAY29uZGl0aW9uIFwiYS1sb2NhbC1jbGFzc1wifX1cIj5cIlxuICAgICAgICAgIC8vIGlmIChpbnN0cnVjdGlvblswXSA9PT0gMTUgJiYgQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvblsxXSkgJiYgaW5zdHJ1Y3Rpb25bMV1bMF0gPT09IDI5KSB7XG5cbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBhZGQgcG9zdGZpeCB0byB0YWdzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMF0gPT09IDEwICYmXG4gICAgICAgICAgICB0YWdzLmhhcyhpbmZsYXRlVGFnTmFtZShpbnN0cnVjdGlvblsxXSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyAxMCAtIG9wZW4gZWxlbWVudFxuICAgICAgICAgICAgbGV0IGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbjtcblxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbGV0IGkgPSBvcGNvZGVzWzBdLmluZGV4T2YoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICAgICAgICBpIDw9IG9wY29kZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAob3Bjb2Rlc1swXVtpXVswXSA9PT0gMTQgJiYgb3Bjb2Rlc1swXVtpXVsxXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDbGFzc0luc3RydWN0aW9uID0gb3Bjb2Rlc1swXVtpXTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG9wY29kZXNbMF1baV1bMF0gPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgLy8gMTIgLSBmbHVzaCBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgICBleGlzdGluZ0NsYXNzSW5zdHJ1Y3Rpb25bMl0gKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5zdHJ1Y3Rpb24gPSBbMTQsIDAsIHBvc3RmaXgsIHVuZGVmaW5lZF07XG5cbiAgICAgICAgICAgICAgaW5zZXJ0aW9ucy5wdXNoKFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluc2VydCBuZXcgaW5zdHJ1Y3Rpb25zXG4gICAgICAgIGZvciAobGV0IFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0gb2YgaW5zZXJ0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3Bjb2Rlc1swXS5pbmRleE9mKGluc3RydWN0aW9uKTtcblxuICAgICAgICAgIG9wY29kZXNbMF0uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2xhc3NJbnN0cnVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXdyaXRlIG9wY29kZXNcbiAgICAgICAgLy8gY29uc3QgZGJnID0gbmV3IFdpcmVGb3JtYXREZWJ1Z2dlcihvcGNvZGVzKTtcbiAgICAgICAgLy8gY29uc3Qgd2ZkID0gZGJnLmZvcm1hdChvcGNvZGVzKTtcblxuICAgICAgICByZXR1cm4gb3Bjb2RlcztcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59KTtcbiIsICJpbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcblxuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICAvKipcbiAgICogUG9kcyBzdXBwb3J0LlxuICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9kcyBmb3IgY29tcG9uZW50cyB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAgICovXG4gIGxldCBpc1BvZCA9XG4gICAgIXBhY2thZ2VSZWxhdGl2ZS5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykgJiZcbiAgICAocGFja2FnZVJlbGF0aXZlLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSk7XG5cbiAgaWYgKGlzUG9kKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5mdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG5jb25zdCBDQUNIRSA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBzb3VyY2UgcGF0aCwgaWYgd2UgaGF2ZSBzZWVuIGFcbiAqIHNvdXJjZSBmaWxlIHdpdGhpbiB0aGUgd29ya3NwYWNlIGRpcmVjdG9yeSxcbiAqIGZpbmQgdGhhdCB3b3Jrc3BhY2UgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXQuXG4gKi9cbmZ1bmN0aW9uIGhhc1NlZW4oc291cmNlUGF0aCkge1xuICBmb3IgKGxldCBlbnRyeSBvZiBDQUNIRSkge1xuICAgIGlmIChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG5cbiAgLy8gd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIHNvdXJjZSBwYXRoIHlldFxuICByZXR1cm47XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5mdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCBzZWVuID0gaGFzU2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFVwLnN5bmMoJ3BhY2thZ2UuanNvbicsIHtcbiAgICBjd2Q6IHBhdGguZGlybmFtZShzb3VyY2VQYXRoKSxcbiAgfSk7XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIENBQ0hFLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG5cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoKHJlbGF0aXZlUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiAnZScgKyBtZDUocmVsYXRpdmVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiBnZXRDbGFzc2VzQW5kVGFncyhzZWwsIGNsYXNzZXMsIHRhZ3MpIHtcbiAgY29uc3QgdHJhbnNmb3JtID0gKHNscykgPT4ge1xuICAgIHNscy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdjbGFzcycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBjbGFzc2VzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgdGFncy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3MpIHtcbiAgY29uc3QgY2xhc3NlcyA9IG5ldyBTZXQoKTtcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoKTtcblxuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScpIHtcbiAgICAgIGdldENsYXNzZXNBbmRUYWdzKG5vZGUuc2VsZWN0b3IsIGNsYXNzZXMsIHRhZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHsgY2xhc3NlcywgdGFncyB9O1xufVxuXG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJbnNpZGVHbG9iYWwobm9kZSwgZnVuYykge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdwc2V1ZG8nICYmIHBhcmVudC52YWx1ZSA9PT0gJzpnbG9iYWwnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVHbG9iYWwocGFyZW50LCBmdW5jKTtcbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5pbXBvcnQgZnNFeGlzdHMgZnJvbSAnLi9mc0V4aXN0cy5qcyc7XG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgcGFyc2VyOiBiYWJlbFBhcnNlcixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VHbGltbWVyQXN0KHNjcmlwdCwgaWQsIHJlcGxhY2VGdW5jdGlvbikge1xuICBjb25zdCBhc3QgPSByZWNhc3QucGFyc2Uoc2NyaXB0LCBwYXJzZU9wdGlvbnMpO1xuICBjb25zdCBjc3NQYXRoID0gaWQucmVwbGFjZSgvKFxcLmpzKXwoXFwuaGJzKS8sICcuY3NzJyk7XG4gIGxldCBjc3M7XG5cbiAgY29uc3QgY3NzRXhpc3RzID0gYXdhaXQgZnNFeGlzdHMoY3NzUGF0aCk7XG5cbiAgaWYgKGNzc0V4aXN0cykge1xuICAgIGNzcyA9IGF3YWl0IHJlYWRGaWxlKGNzc1BhdGgsICd1dGYtOCcpO1xuICB9XG5cbiAgaWYgKCFjc3MpIHtcbiAgICByZXR1cm4gc2NyaXB0O1xuICB9XG5cbiAgcmVjYXN0LnZpc2l0KGFzdCwge1xuICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZVBhdGgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUGF0aC5ub2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdjcmVhdGVUZW1wbGF0ZUZhY3RvcnknICYmXG4gICAgICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrUHJvcCA9IG5vZGUuYXJndW1lbnRzWzBdLnByb3BlcnRpZXMuZmluZChcbiAgICAgICAgICAocHJvcCkgPT4gcHJvcC5rZXkudmFsdWUgPT09ICdibG9jaycsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9wY29kZXMgPSBKU09OLnBhcnNlKGJsb2NrUHJvcC52YWx1ZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld09wY29kZXMgPSByZXBsYWNlRnVuY3Rpb24ob3Bjb2RlcywgY3NzKTtcblxuICAgICAgICBibG9ja1Byb3AudmFsdWUudmFsdWUgPSBKU09OLnN0cmluZ2lmeShuZXdPcGNvZGVzKTtcblxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG4gICAgICAgIC8vIGlmICghaW1wb3J0UGF0aCkge1xuICAgICAgICAvLyAgIHVucGx1Z2luLmFkZFdhdGNoRmlsZShjc3NQYXRoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBpbXBvcnRDc3MgPSByZWNhc3QucGFyc2UoXG4gICAgICAgICAgYGltcG9ydCAnLi8ke2ZpbGVOYW1lfSc7XFxuYCxcbiAgICAgICAgICBwYXJzZU9wdGlvbnMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGltcG9ydENzc05vZGUgPSBpbXBvcnRDc3MucHJvZ3JhbS5ib2R5WzBdO1xuXG4gICAgICAgIGFzdC5wcm9ncmFtLmJvZHkudW5zaGlmdChpbXBvcnRDc3NOb2RlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmF2ZXJzZShub2RlUGF0aCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0U2NyaXB0ID0gcmVjYXN0LnByaW50KGFzdCkuY29kZTtcblxuICByZXR1cm4gcmVzdWx0U2NyaXB0O1xufVxuIiwgImltcG9ydCB7IHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGF0KHBhdGgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvLyBpbXBvcnQgeyBSYXdTb3VyY2UgfSAgZnJvbSAnd2VicGFjay1zb3VyY2VzJztcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRGaWxlcyBmcm9tICcuLi9saWIvZ2V0RmlsZXMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB7XG4gIGFwcGx5KGNvbXBpbGVyKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkVNQkVSX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29tcGlsZXIuaG9va3MuZW1pdC50YXBBc3luYyhcbiAgICAgICdzY29wZWQtd2VicGFjay1wbHVnaW4nLFxuICAgICAgYXN5bmMgKGNvbXBpbGF0aW9uLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNzc0ZpbGVzID0gYXdhaXQgZ2V0RmlsZXMoXG4gICAgICAgICAgICBwYXRoLnJlc29sdmUoY29tcGlsZXIuY29udGV4dCwgJyoqLyouY3NzJyksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJld3JpdGUgdGhlIENTUyBmaWxlc1xuICAgICAgICAgIGNvbnN0IHJld3JpdHRlbkZpbGVzID0gW107XG5cbiAgICAgICAgICAvLyBjb25zdCByZXdyaXRlbkZpbGVzID0gY3NzRmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBjc3NGaWxlcykge1xuICAgICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoYC8ke3BhdGguYmFzZW5hbWUoY29tcGlsZXIuY29udGV4dCl9LmNzc2ApKSB7XG4gICAgICAgICAgICAgIC8vIGltcG9ydCBzY29wZWQuY3NzIGludG8gYXBwLmNzc1xuICAgICAgICAgICAgICBsZXQgYXBwQ3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGUsIGBAaW1wb3J0IFwic2NvcGVkLmNzc1wiO1xcbiR7YXBwQ3NzfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwYXRoLmJhc2VuYW1lKGNvbXBpbGVyLmNvbnRleHQpICsgJy5jc3MnLFxuICAgICAgICAgICAgICAgICd0ZXN0LXN1cHBvcnQuY3NzJyxcbiAgICAgICAgICAgICAgXS5zb21lKChmKSA9PiBmaWxlLmVuZHNXaXRoKGYpKSB8fFxuICAgICAgICAgICAgICBmaWxlLmluY2x1ZGVzKCcvdmVuZG9yLycpIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuanMnKSkpIHx8XG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuaGJzJykpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goZmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUpO1xuXG4gICAgICAgICAgICByZXdyaXR0ZW5GaWxlcy5wdXNoKHJld3JpdHRlbkNzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ29uY2F0ZW5hdGUgdGhlIHJld3JpdHRlbiBDU1MgZmlsZXNcbiAgICAgICAgICBsZXQgY29uY2F0ZW5hdGVkQ1NTID0gcmV3cml0dGVuRmlsZXMuam9pbignXFxuXFxuJyk7XG5cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY29uY2F0ZW5hdGVkIENTUyBpbiB0aGUgYXNzZXRzL3Njb3BlZC1jb21wb25lbnRzLmNzc1xuICAgICAgICAgIGNvbXBpbGF0aW9uLmFzc2V0c1snYXNzZXRzL3Njb3BlZC5jc3MnXSA9IHtcbiAgICAgICAgICAgIHNvdXJjZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLFxuICAgICAgICAgICAgc2l6ZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLmxlbmd0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZ2xvYlBhdGgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnbG9iKGdsb2JQYXRoLCAoZXJyLCBmaWxlcykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi4vbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyc7XG5pbXBvcnQgcmVwbGFjZUhic0luSnMgZnJvbSAnLi4vbGliL3JlcGxhY2VIYnNJbkpzLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4uL2xpYi9yZXdyaXRlSGJzLmpzJztcblxuZnVuY3Rpb24gaXNKc0ZpbGUoaWQpIHtcbiAgcmV0dXJuIGlkLmVuZHNXaXRoKCcuanMnKSB8fCBpZC5lbmRzV2l0aCgnLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzQ3NzRmlsZShpZCkge1xuICByZXR1cm4gaWQuZW5kc1dpdGgoJy5jc3MnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCkge1xuICBjb25zdCBjc3NQYXRoID0ganNQYXRoLnJlcGxhY2UoLyhcXC5oYnMpP1xcLigoanMpfCh0cykpJC8sICcuY3NzJyk7XG4gIGNvbnN0IGNzc0ZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShjc3NQYXRoKTtcblxuICBjb25zdCBjc3NFeGlzdHMgPSBhd2FpdCBmc0V4aXN0cyhjc3NQYXRoKTtcbiAgbGV0IGNzcztcblxuICBpZiAoY3NzRXhpc3RzKSB7XG4gICAgY3NzID0gYXdhaXQgcmVhZEZpbGUoY3NzUGF0aCwgJ3V0ZjgnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZSxcbiAgICAgIG1hcDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gYWRkIGNzcyBpbXBvcnQgZm9yIGpzIGFuZCBnanMgZmlsZXNcbiAgY29kZSA9IGBpbXBvcnQgJy4vJHtjc3NGaWxlTmFtZX0nO1xcblxcbiR7Y29kZX1gO1xuXG4gIC8vIHJld3JpdGUgaGJzIGluIGpzIGluIGNhc2UgaXQgaXMgZ2pzIGZpbGUgKGZvciBnanMgZmlsZXMgaGJzIGlzIGFscmVhZHkgaW4ganMgZmlsZSlcblxuICBjb25zdCByZXdyaXR0ZW5Db2RlID0gcmVwbGFjZUhic0luSnMoY29kZSwgKGhicykgPT4ge1xuICAgIGNvbnN0IHsgY2xhc3NlcywgdGFncyB9ID0gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcyk7XG4gICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChjc3NQYXRoKTtcbiAgICBjb25zdCByZXdyaXR0ZW4gPSByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGNvZGU6IHJld3JpdHRlbkNvZGUsXG4gICAgbWFwOiBudWxsLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1Dc3NGaWxlKGNvZGUsIGlkLCBsYXllck5hbWUsIGVtaXRGaWxlKSB7XG4gIGNvbnN0IGpzUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCAnLmdqcycpO1xuICBjb25zdCBndHNQYXRoID0gaWQucmVwbGFjZSgvXFwuY3NzJC8sICcuZ3RzJyk7XG4gIGNvbnN0IGhic1BhdGggPSBpZC5yZXBsYWNlKC9cXC5jc3MkLywgJy5oYnMnKTtcblxuICBjb25zdCBbanNFeGlzdHMsIGd0c0V4aXN0cywgaGJzRXhpc3RzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBmc0V4aXN0cyhqc1BhdGgpLFxuICAgIGZzRXhpc3RzKGd0c1BhdGgpLFxuICAgIGZzRXhpc3RzKGhic1BhdGgpLFxuICBdKTtcblxuICBpZiAoanNFeGlzdHMgfHwgaGJzRXhpc3RzIHx8IGd0c0V4aXN0cykge1xuICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goaWQpO1xuXG4gICAgY29kZSA9IHJld3JpdGVDc3MoY29kZSwgcG9zdGZpeCwgcGF0aC5iYXNlbmFtZShpZCksIGxheWVyTmFtZSk7XG4gIH1cblxuICBjb25zdCBlbWl0dGVkRmlsZU5hbWUgPSBpZC5yZXBsYWNlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnc3JjLycpLCAnJyk7XG5cbiAgZW1pdEZpbGUoe1xuICAgIHR5cGU6ICdhc3NldCcsXG4gICAgZmlsZU5hbWU6IGVtaXR0ZWRGaWxlTmFtZSxcbiAgICBzb3VyY2U6IGNvZGUsXG4gIH0pO1xuXG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVW5wbHVnaW4oXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGF5ZXJOYW1lXSB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGxhY2UgdGhlIGdlbmVyYXRlZCBjc3MuIERlZmF1bHRzIHRvIFwiY29tcG9uZW50c1wiXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnZW1iZXItc2NvcGVkLWNzcy11bnBsdWdpbicsXG5cbiAgICAgIGdlbmVyYXRlQnVuZGxlKGEsIGJ1bmRsZSkge1xuICAgICAgICBsZXQgY3NzRmlsZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBhc3NldCBpbiBidW5kbGUpIHtcbiAgICAgICAgICBjb25zdCBjc3NBc3NldCA9IGFzc2V0LnJlcGxhY2UoJ2pzJywgJ2NzcycpO1xuXG4gICAgICAgICAgaWYgKCFhc3NldC5lbmRzV2l0aCgnanMnKSB8fCAhYnVuZGxlW2Nzc0Fzc2V0XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICBjc3NGaWxlcy5wdXNoKGJ1bmRsZVtjc3NBc3NldF0uc291cmNlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBidW5kbGVbY3NzQXNzZXRdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBhZGQgaW1wb3J0IHRvIGpzIGZpbGVzXG4gICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGUgPVxuICAgICAgICAgICAgICBgaW1wb3J0ICcuLyR7cGF0aC5iYXNlbmFtZShhc3NldC5yZXBsYWNlKCcuanMnLCAnLmNzcycpKX0nO1xcbmAgK1xuICAgICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5lbWl0RmlsZSh7XG4gICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgZmlsZU5hbWU6ICdzY29wZWQuY3NzJyxcbiAgICAgICAgICAgIHNvdXJjZTogY3NzRmlsZXMuam9pbignXFxuJyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHRyYW5zZm9ybShjb2RlLCBqc1BhdGgpIHtcbiAgICAgICAgaWYgKGlzSnNGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDc3NGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtQ3NzRmlsZShcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICBqc1BhdGgsXG4gICAgICAgICAgICBvcHRpb25zPy5sYXllck5hbWUsXG4gICAgICAgICAgICB0aGlzLmVtaXRGaWxlLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbik7XG4iLCAiaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSB7XG4gIHBhcnNlcjogYmFiZWxQYXJzZXIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc2NyaXB0LCByZXBsYWNlRnVuY3Rpb24pIHtcbiAgY29uc3QgYXN0ID0gcmVjYXN0LnBhcnNlKHNjcmlwdCwgcGFyc2VPcHRpb25zKTtcblxuICByZWNhc3QudmlzaXQoYXN0LCB7XG4gICAgdmlzaXRDYWxsRXhwcmVzc2lvbihwYXRoKSB7XG4gICAgICBjb25zdCBub2RlID0gcGF0aC5ub2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdfX0dMSU1NRVJfVEVNUExBVEUnIHx8XG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdwcmVjb21waWxlVGVtcGxhdGUnXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnKSB7XG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0ucXVhc2lzWzBdLnZhbHVlLnJhdyA9IHJlcGxhY2VGdW5jdGlvbihcbiAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5yYXcsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcgfHxcbiAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnTGl0ZXJhbCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udmFsdWUgPSByZXBsYWNlRnVuY3Rpb24obm9kZS5hcmd1bWVudHNbMF0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhdmVyc2UocGF0aCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIHJlY2FzdC5wcmludChhc3QpLmNvZGU7XG59XG4iLCAiaW1wb3J0IHJlY2FzdCBmcm9tICdlbWJlci10ZW1wbGF0ZS1yZWNhc3QnO1xuXG5pbXBvcnQgcmVuYW1lQ2xhc3MgZnJvbSAnLi9yZW5hbWVDbGFzcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVIYnMoaGJzLCBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4KSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcbiAgbGV0IHN0YWNrID0gW107XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/Lm9yaWdpbmFsID09PSAnc2NvcGVkLWNsYXNzJyAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5wYXRoPy5vcmlnaW5hbCA9PT0gJ3Njb3BlZC1jbGFzcycgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjc3NDbGFzcyA9IG5vZGUucGF0aC5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjc3NDbGFzcykge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy50ZXh0KHJlbmFtZUNsYXNzKGNzc0NsYXNzLCBwb3N0Zml4KSk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ0F0dHJOb2RlJykge1xuICAgICAgICAgIHBhcmVudC5xdW90ZVR5cGUgPSAnXCInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBTdWJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5vcmlnaW5hbCA9PT0gJ3Njb3BlZC1jbGFzcycgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgcG9zdGZpeDogc3RyaW5nLFxuICBjbGFzc2VzSW5Dc3M/OiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gIGNvbnN0IHJlbmFtZWRDbGFzc2VzID0gY2xhc3Nlc1xuICAgIC5maWx0ZXIoKGMpID0+IGMpXG4gICAgLm1hcCgoYykgPT4gYy50cmltKCkpXG4gICAgLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKCFjbGFzc2VzSW5Dc3MgfHwgY2xhc3Nlc0luQ3NzLmhhcyhjKSkge1xuICAgICAgICBpZiAoYy5lbmRzV2l0aChwb3N0Zml4KSkgcmV0dXJuIGM7XG5cbiAgICAgICAgcmV0dXJuIGMgKyAnXycgKyBwb3N0Zml4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG5cbiAgY29uc3QgcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXMgPSBjbGFzc05hbWUucmVwbGFjZShcbiAgICBjbGFzc05hbWUudHJpbVN0YXJ0KCkudHJpbUVuZCgpLFxuICAgIHJlbmFtZWRDbGFzc2VzLFxuICApO1xuXG4gIHJldHVybiByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLHNCQUErQjtBQUUvQixJQUFPLCtCQUFRLGdDQUFlLE1BQU07QUFDbEMsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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LE9BQU8sUUFBUSxHQUFHO0FBQzlDO0FBQUEsVUFDRjtBQUVBLGNBQUksUUFBUSxJQUFJLGdCQUFnQixlQUFlO0FBQzdDLHFCQUFTLEtBQUssT0FBTyxRQUFRLEVBQUUsTUFBTTtBQUNyQyxtQkFBTyxPQUFPLFFBQVE7QUFBQSxVQUN4QixPQUFPO0FBRUwsbUJBQU8sS0FBSyxFQUFFLE9BQ1osYUFBYSxrQkFBQUEsUUFBSyxTQUFTLE1BQU0sUUFBUSxPQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDeEQsT0FBTyxLQUFLLEVBQUU7QUFBQSxVQUNsQjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFFBQVEsSUFBSSxnQkFBZ0IsZUFBZTtBQUM3QyxlQUFLLFNBQVM7QUFBQSxZQUNaLE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLFFBQVEsU0FBUyxLQUFLLElBQUk7QUFBQSxVQUM1QixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxNQUVBLFVBQVUsTUFBTSxRQUFRO0FBQ3RCLFlBQUksU0FBUyxNQUFNLEdBQUc7QUFDcEIsaUJBQU8sZ0JBQWdCLE1BQU0sTUFBTTtBQUFBLFFBQ3JDLFdBQVcsVUFBVSxNQUFNLEdBQUc7QUFDNUIsaUJBQU87QUFBQSxZQUNMO0FBQUEsWUFDQTtBQUFBLFlBQ0EsU0FBUztBQUFBLFlBQ1QsS0FBSztBQUFBLFVBQ1A7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3VucGx1Z2luIiwgIm1kNSIsICJwYXRoIiwgImZpbmRVcCIsICJmc1N5bmMiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAiaW1wb3J0X3Byb21pc2VzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAicGF0aCIsICJiYWJlbFBhcnNlciIsICJyZWNhc3QiLCAicGF0aCIsICJwYXRoIiwgImltcG9ydF9wcm9taXNlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImdsb2IiLCAiaW1wb3J0X3Bvc3Rjc3MiLCAiaW1wb3J0X3Bvc3Rjc3Nfc2VsZWN0b3JfcGFyc2VyIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInBhdGgiLCAiaW1wb3J0X3Byb21pc2VzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3VucGx1Z2luIiwgImltcG9ydF9wYXJzZXIiLCAiaW1wb3J0X3JlY2FzdCIsICJwYXJzZU9wdGlvbnMiLCAiYmFiZWxQYXJzZXIiLCAicmVjYXN0IiwgInBhdGgiLCAicmVjYXN0IiwgIm5vZGUiLCAicGF0aCJdCn0K
|
|
700
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9hcHAtY3NzLXVucGx1Z2luLmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9hcHAtanMtdW5wbHVnaW4uanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZUFic29sdXRlUGF0aEhhc2guanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlcGxhY2VHbGltbWVyQXN0LmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZnNFeGlzdHMuanMiLCAiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1zY29wZWRjc3Mtd2VicGFjay5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2dldEZpbGVzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUNzcy5qcyIsICIuLi8uLi8uLi9zcmMvYnVpbGQvc2NvcGVkLWNzcy11bnBsdWdpbi5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlcGxhY2VIYnNJbkpzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgYXBwQ3NzVW5wbHVnaW4gZnJvbSAnLi9hcHAtY3NzLXVucGx1Z2luLmpzJztcbmltcG9ydCBhcHBKc1VucGx1Z2luIGZyb20gJy4vYXBwLWpzLXVucGx1Z2luLmpzJztcbmltcG9ydCBhcHBTY29wZWRjc3NXZWJwYWNrIGZyb20gJy4vYXBwLXNjb3BlZGNzcy13ZWJwYWNrLmpzJztcbmltcG9ydCBzY29wZWRDc3NVbnBsdWdpbiBmcm9tICcuL3Njb3BlZC1jc3MtdW5wbHVnaW4uanMnO1xuXG5leHBvcnQge1xuICBhcHBDc3NVbnBsdWdpbixcbiAgYXBwSnNVbnBsdWdpbixcbiAgYXBwU2NvcGVkY3NzV2VicGFjayxcbiAgc2NvcGVkQ3NzVW5wbHVnaW4sXG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gZnJvbSAndW5wbHVnaW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVVbnBsdWdpbigoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1jc3MtdW5wbHVnaW4nLFxuXG4gICAgLy8gbG9hZEluY2x1ZGUoaWQpe1xuICAgIC8vICAgaWYoaWQuZW5kc1dpdGgoJy5jc3MnKSl7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vICAgfVxuICAgIC8vIH0sXG5cbiAgICAvLyBsb2FkKGlkKXtcbiAgICAvLyAgIC8vIHRoaXMuYWRkV2F0Y2hGaWxlKGlkKTtcbiAgICAvLyAgIHJldHVybiAnY29uc29sZS5sb2coJyArIEpTT04uc3RyaW5naWZ5KGlkKSArICcpOyc7XG4gICAgLy8gfSxcblxuICAgIC8vIHRyYW5zZm9ybUluY2x1ZGUoaWQpIHtcbiAgICAvLyAgIGlmKGlkLmVuZHNXaXRoKCcuY3NzJykpe1xuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LFxuXG4gICAgLy8gYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgLy8gICByZXR1cm4gY29kZTtcbiAgICAvLyB9LFxuICB9O1xufSk7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi4vbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJlcGxhY2VHbGltbWVyQXN0IGZyb20gJy4uL2xpYi9yZXBsYWNlR2xpbW1lckFzdC5qcyc7XG5cbmZ1bmN0aW9uKiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzKSB7XG4gIGZvciAobGV0IGluc3RydWN0aW9uIG9mIG9wY29kZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB5aWVsZCBpbnN0cnVjdGlvbjtcblxuICAgIGZvciAobGV0IHN1Ykluc3RydWN0aW9uIG9mIGl0ZXJhdGVPcGNvZGVzKGluc3RydWN0aW9uKSkge1xuICAgICAgeWllbGQgc3ViSW5zdHJ1Y3Rpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVUYWdOYW1lKHRhZykge1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIGlmICh0YWcgPT09IDApIHtcbiAgICAgIHJldHVybiAnZGl2JztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMSkge1xuICAgICAgcmV0dXJuICdzcGFuJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMikge1xuICAgICAgcmV0dXJuICdwJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMykge1xuICAgICAgcmV0dXJuICdhJztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdGFnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVVucGx1Z2luKCh7IGFwcERpciB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1qcy11bnBsdWdpbicsXG5cbiAgICB0cmFuc2Zvcm1JbmNsdWRlKGlkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpZC5pbmNsdWRlcyhwYXRoLmJhc2VuYW1lKGFwcERpcikpICYmXG4gICAgICAgIChpZC5lbmRzV2l0aCgnLmpzJykgfHwgaWQuZW5kc1dpdGgoJy5oYnMnKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2hvbGUgdGhpbmcgaXMgZXJyb3IgcHJvbmUsIGFuZCB3ZSBzaG91bGQgc3dpdGNoIHRoZSBlbWJyb2lkZXJcbiAgICAgKiB0ZWNobmlxdWUgdG8gdXNpbmcgYSBiYWJlbCBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBVc2luZyBhIHdlYnBhY2sgcGx1Z2luIGlzIHRvbyBsYXRlIGluIHRoZSBwcm9jZXNzLlxuICAgICAqIFdlIGRvbid0IHdhbnQgdG8gYmUgZGVhbGluZyB3aXRoIHdpcmUtZm9ybWF0LCBiZWNhdXNlXG4gICAgICogLSBpdCdzIG5vdCBwdWJsaWMgQVBJXG4gICAgICogLSBpdCBjYW4gY2hhbmdlIGFzIGVtYmVyLXNvdXJjZSBpcyB1cGdyYWRlZFxuICAgICAqIC0gdGhlIG51bWJlcnMgYXJlIG5vdCBcInN0YWJsZVwiLCBpbiB0aGF0IHRoZXkgYXJlIGJpdHdpc2UgYW5kZWQgYW5kIG9yZWRcbiAgICAgKiAgIHRvZ2V0aGVyIHNvIHRoYXQgc3RvcmFnZSBpcyBlZmZpY2llbnQgLS0gd2hpY2ggbWVhbnMgd2UnZCBuZWVkIHRvIGtub3dcbiAgICAgKiAgIGFsbCB0aGUgb3Bjb2RlcyBhbmQgYXBwcm9wcmlhdGVseSB8IC8gJiB0byBkZWNvbnN0cnVjdCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBsZXQgY3NzUGF0aCA9IGlkLnJlcGxhY2UoLyhcXC5qcyl8KFxcLmhicykvLCAnLmNzcycpO1xuICAgICAgbGV0IG1vZHVsZUdyb3VwUGF0aCA9IGNzc1BhdGg7XG5cbiAgICAgIC8qKlxuICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgKlxuICAgICAgICogTm90ZSB0aGF0IFBvZC1jb21wb25lbnRzIHdpbGwgbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICAgICAgICovXG4gICAgICBsZXQgaXNQb2QgPSAhaWQuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmIGlkLmVuZHNXaXRoKCcvdGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgIGlmIChpc1BvZCkge1xuICAgICAgICBjc3NQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpZCksICdzdHlsZXMuY3NzJyk7XG4gICAgICAgIG1vZHVsZUdyb3VwUGF0aCA9IHBhdGguZGlybmFtZShjc3NQYXRoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChtb2R1bGVHcm91cFBhdGgpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVwbGFjZUdsaW1tZXJBc3QoY29kZSwgaWQsIChvcGNvZGVzLCBjc3MpID0+IHtcbiAgICAgICAgY29uc3QgeyBjbGFzc2VzLCB0YWdzIH0gPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcbiAgICAgICAgLy8gdGhpcy5hZGRXYXRjaEZpbGUoY3NzUGF0aCk7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbnN0cnVjdGlvbiBvZiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzWzBdKSkge1xuICAgICAgICAgIC8vIHJlcGxhY2UgY2xhc3Nlc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzBdID09PSAxNCAmJlxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMV0gPT09IDAgJiZcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzJdICYmXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXS5zcGxpdCgnICcpLmZpbmQoKGkpID0+IGNsYXNzZXMuaGFzKGkudHJpbSgpKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXSA9IGluc3RydWN0aW9uWzJdXG4gICAgICAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUudHJpbSgpICYmIGNsYXNzZXMuaGFzKGNsYXNzTmFtZS50cmltKCkpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnRyaW0oKSArICdfJyArIHBvc3RmaXg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlcGxhY2Ugc3RyaW5ncyBpbiBpZiBjb25kaXRpb25zXG4gICAgICAgICAgLy8gdGhpcyBpcyBicml0dGxlLCBiZWNhdXNlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBkZWVwbHkgbmVzdGVkXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyB0aGlzIHBhcnRpY3VsYXIgb25lIGlzIDxkaXYgY2xhc3M9XCJnbG9iYWwtcHJvYmFibHkge3tpZiBAY29uZGl0aW9uIFwiYS1sb2NhbC1jbGFzc1wifX1cIj5cIlxuICAgICAgICAgIC8vIGlmIChpbnN0cnVjdGlvblswXSA9PT0gMTUgJiYgQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvblsxXSkgJiYgaW5zdHJ1Y3Rpb25bMV1bMF0gPT09IDI5KSB7XG5cbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBhZGQgcG9zdGZpeCB0byB0YWdzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMF0gPT09IDEwICYmXG4gICAgICAgICAgICB0YWdzLmhhcyhpbmZsYXRlVGFnTmFtZShpbnN0cnVjdGlvblsxXSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyAxMCAtIG9wZW4gZWxlbWVudFxuICAgICAgICAgICAgbGV0IGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbjtcblxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbGV0IGkgPSBvcGNvZGVzWzBdLmluZGV4T2YoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICAgICAgICBpIDw9IG9wY29kZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAob3Bjb2Rlc1swXVtpXVswXSA9PT0gMTQgJiYgb3Bjb2Rlc1swXVtpXVsxXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDbGFzc0luc3RydWN0aW9uID0gb3Bjb2Rlc1swXVtpXTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG9wY29kZXNbMF1baV1bMF0gPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgLy8gMTIgLSBmbHVzaCBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgICBleGlzdGluZ0NsYXNzSW5zdHJ1Y3Rpb25bMl0gKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5zdHJ1Y3Rpb24gPSBbMTQsIDAsIHBvc3RmaXgsIHVuZGVmaW5lZF07XG5cbiAgICAgICAgICAgICAgaW5zZXJ0aW9ucy5wdXNoKFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluc2VydCBuZXcgaW5zdHJ1Y3Rpb25zXG4gICAgICAgIGZvciAobGV0IFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0gb2YgaW5zZXJ0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3Bjb2Rlc1swXS5pbmRleE9mKGluc3RydWN0aW9uKTtcblxuICAgICAgICAgIG9wY29kZXNbMF0uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2xhc3NJbnN0cnVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXdyaXRlIG9wY29kZXNcbiAgICAgICAgLy8gY29uc3QgZGJnID0gbmV3IFdpcmVGb3JtYXREZWJ1Z2dlcihvcGNvZGVzKTtcbiAgICAgICAgLy8gY29uc3Qgd2ZkID0gZGJnLmZvcm1hdChvcGNvZGVzKTtcblxuICAgICAgICByZXR1cm4gb3Bjb2RlcztcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59KTtcbiIsICJpbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcblxuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICAvKipcbiAgICogUG9kcyBzdXBwb3J0LlxuICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9kcyBmb3IgY29tcG9uZW50cyB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAgICovXG4gIGxldCBpc1BvZCA9XG4gICAgIXBhY2thZ2VSZWxhdGl2ZS5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykgJiZcbiAgICAocGFja2FnZVJlbGF0aXZlLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSk7XG5cbiAgaWYgKGlzUG9kKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5mdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG5jb25zdCBDQUNIRSA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBzb3VyY2UgcGF0aCwgaWYgd2UgaGF2ZSBzZWVuIGFcbiAqIHNvdXJjZSBmaWxlIHdpdGhpbiB0aGUgd29ya3NwYWNlIGRpcmVjdG9yeSxcbiAqIGZpbmQgdGhhdCB3b3Jrc3BhY2UgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXQuXG4gKi9cbmZ1bmN0aW9uIGhhc1NlZW4oc291cmNlUGF0aCkge1xuICBmb3IgKGxldCBlbnRyeSBvZiBDQUNIRSkge1xuICAgIGlmIChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG5cbiAgLy8gd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIHNvdXJjZSBwYXRoIHlldFxuICByZXR1cm47XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5mdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCBzZWVuID0gaGFzU2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFVwLnN5bmMoJ3BhY2thZ2UuanNvbicsIHtcbiAgICBjd2Q6IHBhdGguZGlybmFtZShzb3VyY2VQYXRoKSxcbiAgfSk7XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIENBQ0hFLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG5cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoKHJlbGF0aXZlUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiAnZScgKyBtZDUocmVsYXRpdmVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiBnZXRDbGFzc2VzQW5kVGFncyhzZWwsIGNsYXNzZXMsIHRhZ3MpIHtcbiAgY29uc3QgdHJhbnNmb3JtID0gKHNscykgPT4ge1xuICAgIHNscy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdjbGFzcycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBjbGFzc2VzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgdGFncy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3MpIHtcbiAgY29uc3QgY2xhc3NlcyA9IG5ldyBTZXQoKTtcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoKTtcblxuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScpIHtcbiAgICAgIGdldENsYXNzZXNBbmRUYWdzKG5vZGUuc2VsZWN0b3IsIGNsYXNzZXMsIHRhZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHsgY2xhc3NlcywgdGFncyB9O1xufVxuXG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJbnNpZGVHbG9iYWwobm9kZSwgZnVuYykge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdwc2V1ZG8nICYmIHBhcmVudC52YWx1ZSA9PT0gJzpnbG9iYWwnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVHbG9iYWwocGFyZW50LCBmdW5jKTtcbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5pbXBvcnQgZnNFeGlzdHMgZnJvbSAnLi9mc0V4aXN0cy5qcyc7XG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgcGFyc2VyOiBiYWJlbFBhcnNlcixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VHbGltbWVyQXN0KHNjcmlwdCwgaWQsIHJlcGxhY2VGdW5jdGlvbikge1xuICBjb25zdCBhc3QgPSByZWNhc3QucGFyc2Uoc2NyaXB0LCBwYXJzZU9wdGlvbnMpO1xuICBjb25zdCBjc3NQYXRoID0gaWQucmVwbGFjZSgvKFxcLmpzKXwoXFwuaGJzKS8sICcuY3NzJyk7XG4gIGxldCBjc3M7XG5cbiAgY29uc3QgY3NzRXhpc3RzID0gYXdhaXQgZnNFeGlzdHMoY3NzUGF0aCk7XG5cbiAgaWYgKGNzc0V4aXN0cykge1xuICAgIGNzcyA9IGF3YWl0IHJlYWRGaWxlKGNzc1BhdGgsICd1dGYtOCcpO1xuICB9XG5cbiAgaWYgKCFjc3MpIHtcbiAgICByZXR1cm4gc2NyaXB0O1xuICB9XG5cbiAgcmVjYXN0LnZpc2l0KGFzdCwge1xuICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZVBhdGgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUGF0aC5ub2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdjcmVhdGVUZW1wbGF0ZUZhY3RvcnknICYmXG4gICAgICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrUHJvcCA9IG5vZGUuYXJndW1lbnRzWzBdLnByb3BlcnRpZXMuZmluZChcbiAgICAgICAgICAocHJvcCkgPT4gcHJvcC5rZXkudmFsdWUgPT09ICdibG9jaycsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9wY29kZXMgPSBKU09OLnBhcnNlKGJsb2NrUHJvcC52YWx1ZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld09wY29kZXMgPSByZXBsYWNlRnVuY3Rpb24ob3Bjb2RlcywgY3NzKTtcblxuICAgICAgICBibG9ja1Byb3AudmFsdWUudmFsdWUgPSBKU09OLnN0cmluZ2lmeShuZXdPcGNvZGVzKTtcblxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG4gICAgICAgIC8vIGlmICghaW1wb3J0UGF0aCkge1xuICAgICAgICAvLyAgIHVucGx1Z2luLmFkZFdhdGNoRmlsZShjc3NQYXRoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBpbXBvcnRDc3MgPSByZWNhc3QucGFyc2UoXG4gICAgICAgICAgYGltcG9ydCAnLi8ke2ZpbGVOYW1lfSc7XFxuYCxcbiAgICAgICAgICBwYXJzZU9wdGlvbnMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGltcG9ydENzc05vZGUgPSBpbXBvcnRDc3MucHJvZ3JhbS5ib2R5WzBdO1xuXG4gICAgICAgIGFzdC5wcm9ncmFtLmJvZHkudW5zaGlmdChpbXBvcnRDc3NOb2RlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmF2ZXJzZShub2RlUGF0aCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0U2NyaXB0ID0gcmVjYXN0LnByaW50KGFzdCkuY29kZTtcblxuICByZXR1cm4gcmVzdWx0U2NyaXB0O1xufVxuIiwgImltcG9ydCB7IHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGF0KHBhdGgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvLyBpbXBvcnQgeyBSYXdTb3VyY2UgfSAgZnJvbSAnd2VicGFjay1zb3VyY2VzJztcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRGaWxlcyBmcm9tICcuLi9saWIvZ2V0RmlsZXMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB7XG4gIGFwcGx5KGNvbXBpbGVyKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkVNQkVSX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29tcGlsZXIuaG9va3MuZW1pdC50YXBBc3luYyhcbiAgICAgICdzY29wZWQtd2VicGFjay1wbHVnaW4nLFxuICAgICAgYXN5bmMgKGNvbXBpbGF0aW9uLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNzc0ZpbGVzID0gYXdhaXQgZ2V0RmlsZXMoXG4gICAgICAgICAgICBwYXRoLnJlc29sdmUoY29tcGlsZXIuY29udGV4dCwgJyoqLyouY3NzJyksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJld3JpdGUgdGhlIENTUyBmaWxlc1xuICAgICAgICAgIGNvbnN0IHJld3JpdHRlbkZpbGVzID0gW107XG5cbiAgICAgICAgICAvLyBjb25zdCByZXdyaXRlbkZpbGVzID0gY3NzRmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBjc3NGaWxlcykge1xuICAgICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoYC8ke3BhdGguYmFzZW5hbWUoY29tcGlsZXIuY29udGV4dCl9LmNzc2ApKSB7XG4gICAgICAgICAgICAgIC8vIGltcG9ydCBzY29wZWQuY3NzIGludG8gYXBwLmNzc1xuICAgICAgICAgICAgICBsZXQgYXBwQ3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGUsIGBAaW1wb3J0IFwic2NvcGVkLmNzc1wiO1xcbiR7YXBwQ3NzfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwYXRoLmJhc2VuYW1lKGNvbXBpbGVyLmNvbnRleHQpICsgJy5jc3MnLFxuICAgICAgICAgICAgICAgICd0ZXN0LXN1cHBvcnQuY3NzJyxcbiAgICAgICAgICAgICAgXS5zb21lKChmKSA9PiBmaWxlLmVuZHNXaXRoKGYpKSB8fFxuICAgICAgICAgICAgICBmaWxlLmluY2x1ZGVzKCcvdmVuZG9yLycpIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuanMnKSkpIHx8XG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuaGJzJykpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goZmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUpO1xuXG4gICAgICAgICAgICByZXdyaXR0ZW5GaWxlcy5wdXNoKHJld3JpdHRlbkNzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ29uY2F0ZW5hdGUgdGhlIHJld3JpdHRlbiBDU1MgZmlsZXNcbiAgICAgICAgICBsZXQgY29uY2F0ZW5hdGVkQ1NTID0gcmV3cml0dGVuRmlsZXMuam9pbignXFxuXFxuJyk7XG5cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY29uY2F0ZW5hdGVkIENTUyBpbiB0aGUgYXNzZXRzL3Njb3BlZC1jb21wb25lbnRzLmNzc1xuICAgICAgICAgIGNvbXBpbGF0aW9uLmFzc2V0c1snYXNzZXRzL3Njb3BlZC5jc3MnXSA9IHtcbiAgICAgICAgICAgIHNvdXJjZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLFxuICAgICAgICAgICAgc2l6ZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLmxlbmd0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZ2xvYlBhdGgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnbG9iKGdsb2JQYXRoLCAoZXJyLCBmaWxlcykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi4vbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyc7XG5pbXBvcnQgcmVwbGFjZUhic0luSnMgZnJvbSAnLi4vbGliL3JlcGxhY2VIYnNJbkpzLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4uL2xpYi9yZXdyaXRlSGJzLmpzJztcblxuZnVuY3Rpb24gaXNKc0ZpbGUoaWQpIHtcbiAgcmV0dXJuIGlkLmVuZHNXaXRoKCcuanMnKSB8fCBpZC5lbmRzV2l0aCgnLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzQ3NzRmlsZShpZCkge1xuICByZXR1cm4gaWQuZW5kc1dpdGgoJy5jc3MnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCkge1xuICBjb25zdCBjc3NQYXRoID0ganNQYXRoLnJlcGxhY2UoLyhcXC5oYnMpP1xcLigoanMpfCh0cykpJC8sICcuY3NzJyk7XG4gIGNvbnN0IGNzc0ZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShjc3NQYXRoKTtcblxuICBjb25zdCBjc3NFeGlzdHMgPSBhd2FpdCBmc0V4aXN0cyhjc3NQYXRoKTtcbiAgbGV0IGNzcztcblxuICBpZiAoY3NzRXhpc3RzKSB7XG4gICAgY3NzID0gYXdhaXQgcmVhZEZpbGUoY3NzUGF0aCwgJ3V0ZjgnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZSxcbiAgICAgIG1hcDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gYWRkIGNzcyBpbXBvcnQgZm9yIGpzIGFuZCBnanMgZmlsZXNcbiAgY29kZSA9IGBpbXBvcnQgJy4vJHtjc3NGaWxlTmFtZX0nO1xcblxcbiR7Y29kZX1gO1xuXG4gIC8vIHJld3JpdGUgaGJzIGluIGpzIGluIGNhc2UgaXQgaXMgZ2pzIGZpbGUgKGZvciBnanMgZmlsZXMgaGJzIGlzIGFscmVhZHkgaW4ganMgZmlsZSlcblxuICBjb25zdCByZXdyaXR0ZW5Db2RlID0gcmVwbGFjZUhic0luSnMoY29kZSwgKGhicykgPT4ge1xuICAgIGNvbnN0IHsgY2xhc3NlcywgdGFncyB9ID0gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcyk7XG4gICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChjc3NQYXRoKTtcbiAgICBjb25zdCByZXdyaXR0ZW4gPSByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGNvZGU6IHJld3JpdHRlbkNvZGUsXG4gICAgbWFwOiBudWxsLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1Dc3NGaWxlKGNvZGUsIGlkLCBsYXllck5hbWUsIGVtaXRGaWxlKSB7XG4gIGNvbnN0IGpzUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCAnLmdqcycpO1xuICBjb25zdCBndHNQYXRoID0gaWQucmVwbGFjZSgvXFwuY3NzJC8sICcuZ3RzJyk7XG4gIGNvbnN0IGhic1BhdGggPSBpZC5yZXBsYWNlKC9cXC5jc3MkLywgJy5oYnMnKTtcblxuICBjb25zdCBbanNFeGlzdHMsIGd0c0V4aXN0cywgaGJzRXhpc3RzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBmc0V4aXN0cyhqc1BhdGgpLFxuICAgIGZzRXhpc3RzKGd0c1BhdGgpLFxuICAgIGZzRXhpc3RzKGhic1BhdGgpLFxuICBdKTtcblxuICBpZiAoanNFeGlzdHMgfHwgaGJzRXhpc3RzIHx8IGd0c0V4aXN0cykge1xuICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goaWQpO1xuXG4gICAgY29kZSA9IHJld3JpdGVDc3MoY29kZSwgcG9zdGZpeCwgcGF0aC5iYXNlbmFtZShpZCksIGxheWVyTmFtZSk7XG4gIH1cblxuICBjb25zdCBlbWl0dGVkRmlsZU5hbWUgPSBpZC5yZXBsYWNlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnc3JjLycpLCAnJyk7XG5cbiAgZW1pdEZpbGUoe1xuICAgIHR5cGU6ICdhc3NldCcsXG4gICAgZmlsZU5hbWU6IGVtaXR0ZWRGaWxlTmFtZSxcbiAgICBzb3VyY2U6IGNvZGUsXG4gIH0pO1xuXG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVW5wbHVnaW4oXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGF5ZXJOYW1lXSB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGxhY2UgdGhlIGdlbmVyYXRlZCBjc3MuIERlZmF1bHRzIHRvIFwiY29tcG9uZW50c1wiXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnZW1iZXItc2NvcGVkLWNzcy11bnBsdWdpbicsXG5cbiAgICAgIGdlbmVyYXRlQnVuZGxlKGEsIGJ1bmRsZSkge1xuICAgICAgICBsZXQgY3NzRmlsZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBhc3NldCBpbiBidW5kbGUpIHtcbiAgICAgICAgICBjb25zdCBjc3NBc3NldCA9IGFzc2V0LnJlcGxhY2UoJ2pzJywgJ2NzcycpO1xuXG4gICAgICAgICAgaWYgKCFhc3NldC5lbmRzV2l0aCgnanMnKSB8fCAhYnVuZGxlW2Nzc0Fzc2V0XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICBjc3NGaWxlcy5wdXNoKGJ1bmRsZVtjc3NBc3NldF0uc291cmNlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBidW5kbGVbY3NzQXNzZXRdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBhZGQgaW1wb3J0IHRvIGpzIGZpbGVzXG4gICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGUgPVxuICAgICAgICAgICAgICBgaW1wb3J0ICcuLyR7cGF0aC5iYXNlbmFtZShhc3NldC5yZXBsYWNlKCcuanMnLCAnLmNzcycpKX0nO1xcbmAgK1xuICAgICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5lbWl0RmlsZSh7XG4gICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgZmlsZU5hbWU6ICdzY29wZWQuY3NzJyxcbiAgICAgICAgICAgIHNvdXJjZTogY3NzRmlsZXMuam9pbignXFxuJyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHRyYW5zZm9ybShjb2RlLCBqc1BhdGgpIHtcbiAgICAgICAgaWYgKGlzSnNGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDc3NGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtQ3NzRmlsZShcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICBqc1BhdGgsXG4gICAgICAgICAgICBvcHRpb25zPy5sYXllck5hbWUsXG4gICAgICAgICAgICB0aGlzLmVtaXRGaWxlLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbik7XG4iLCAiaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSB7XG4gIHBhcnNlcjoge1xuICAgIHBhcnNlKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhYmVsUGFyc2VyLnBhcnNlKHNvdXJjZSwge1xuICAgICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJyxcbiAgICAgICAgYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlOiB0cnVlLFxuICAgICAgICB0b2tlbnM6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHNjcmlwdCwgcmVwbGFjZUZ1bmN0aW9uKSB7XG4gIGNvbnN0IGFzdCA9IHJlY2FzdC5wYXJzZShzY3JpcHQsIHBhcnNlT3B0aW9ucyk7XG5cbiAgcmVjYXN0LnZpc2l0KGFzdCwge1xuICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24ocGF0aCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHBhdGgubm9kZTtcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnX19HTElNTUVSX1RFTVBMQVRFJyB8fFxuICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAncHJlY29tcGlsZVRlbXBsYXRlJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnVGVtcGxhdGVMaXRlcmFsJykge1xuICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5yYXcgPSByZXBsYWNlRnVuY3Rpb24oXG4gICAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS5xdWFzaXNbMF0udmFsdWUucmF3LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnIHx8XG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udHlwZSA9PT0gJ0xpdGVyYWwnXG4gICAgICAgICkge1xuICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlID0gcmVwbGFjZUZ1bmN0aW9uKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYXZlcnNlKHBhdGgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiByZWNhc3QucHJpbnQoYXN0KS5jb2RlO1xufVxuIiwgImltcG9ydCByZWNhc3QgZnJvbSAnZW1iZXItdGVtcGxhdGUtcmVjYXN0JztcblxuaW1wb3J0IHJlbmFtZUNsYXNzIGZyb20gJy4vcmVuYW1lQ2xhc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCkge1xuICBsZXQgYXN0ID0gcmVjYXN0LnBhcnNlKGhicyk7XG4gIGxldCBzdGFjayA9IFtdO1xuXG4gIHJlY2FzdC50cmF2ZXJzZShhc3QsIHtcbiAgICBBdHRyTm9kZShub2RlKSB7XG4gICAgICBpZiAobm9kZS5uYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICAgIGlmIChub2RlLnZhbHVlLnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgbm9kZS52YWx1ZS5jaGFycykge1xuICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKG5vZGUudmFsdWUuY2hhcnMsIHBvc3RmaXgsIGNsYXNzZXMpO1xuXG4gICAgICAgICAgbm9kZS52YWx1ZS5jaGFycyA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnZhbHVlLnR5cGUgPT09ICdDb25jYXRTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgZm9yIChsZXQgcGFydCBvZiBub2RlLnZhbHVlLnBhcnRzKSB7XG4gICAgICAgICAgICBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnICYmIHBhcnQuY2hhcnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3MocGFydC5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICAgICAgcGFydC5jaGFycyA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgIHJlY2FzdC50cmF2ZXJzZShwYXJ0LCB7XG4gICAgICAgICAgICAgICAgU3RyaW5nTGl0ZXJhbChub2RlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUgPSByZW5hbWVkQ2xhc3M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIEVsZW1lbnROb2RlKG5vZGUpIHtcbiAgICAgIGlmICh0YWdzLmhhcyhub2RlLnRhZykpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgY2xhc3MgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzXG4gICAgICAgIGNvbnN0IGNsYXNzQXR0ciA9IG5vZGUuYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09ICdjbGFzcycpO1xuXG4gICAgICAgIGlmIChjbGFzc0F0dHIpIHtcbiAgICAgICAgICBjbGFzc0F0dHIudmFsdWUuY2hhcnMgKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBwdXNoIGNsYXNzIGF0dHJpYnV0ZVxuICAgICAgICAgIG5vZGUuYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgcmVjYXN0LmJ1aWxkZXJzLmF0dHIoJ2NsYXNzJywgcmVjYXN0LmJ1aWxkZXJzLnRleHQocG9zdGZpeCkpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgQWxsOiB7XG4gICAgICBlbnRlcihub2RlKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobm9kZSk7XG4gICAgICB9LFxuICAgICAgZXhpdCgpIHtcbiAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBNdXN0YWNoZVN0YXRlbWVudChub2RlKSB7XG4gICAgICBsZXQgY3NzQ2xhc3M7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5vcmlnaW5hbCA9PT0gJ3Njb3BlZC1jbGFzcycgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUucGF0aD8ucGF0aD8ub3JpZ2luYWwgPT09ICdzY29wZWQtY2xhc3MnICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhdGgucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMudGV4dChyZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCkpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdBdHRyTm9kZScpIHtcbiAgICAgICAgICBwYXJlbnQucXVvdGVUeXBlID0gJ1wiJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgU3ViRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUucGF0aD8ub3JpZ2luYWwgPT09ICdzY29wZWQtY2xhc3MnICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMubGl0ZXJhbChcbiAgICAgICAgICAnU3RyaW5nTGl0ZXJhbCcsXG4gICAgICAgICAgcmVuYW1lQ2xhc3MoY3NzQ2xhc3MsIHBvc3RmaXgpLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICBsZXQgcmVzdWx0ID0gcmVjYXN0LnByaW50KGFzdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5hbWVDbGFzcyhcbiAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gIHBvc3RmaXg6IHN0cmluZyxcbiAgY2xhc3Nlc0luQ3NzPzogU2V0PHN0cmluZz4sXG4pIHtcbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pO1xuICBjb25zdCByZW5hbWVkQ2xhc3NlcyA9IGNsYXNzZXNcbiAgICAuZmlsdGVyKChjKSA9PiBjKVxuICAgIC5tYXAoKGMpID0+IGMudHJpbSgpKVxuICAgIC5tYXAoKGMpID0+IHtcbiAgICAgIGlmICghY2xhc3Nlc0luQ3NzIHx8IGNsYXNzZXNJbkNzcy5oYXMoYykpIHtcbiAgICAgICAgaWYgKGMuZW5kc1dpdGgocG9zdGZpeCkpIHJldHVybiBjO1xuXG4gICAgICAgIHJldHVybiBjICsgJ18nICsgcG9zdGZpeDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGM7XG4gICAgfSlcbiAgICAuam9pbignICcpO1xuXG4gIGNvbnN0IHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzID0gY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgY2xhc3NOYW1lLnRyaW1TdGFydCgpLnRyaW1FbmQoKSxcbiAgICByZW5hbWVkQ2xhc3NlcyxcbiAgKTtcblxuICByZXR1cm4gcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXM7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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UUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF91bnBsdWdpbiIsICJtZDUiLCAicGF0aCIsICJmaW5kVXAiLCAiZnNTeW5jIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgImltcG9ydF9wcm9taXNlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInBhdGgiLCAiYmFiZWxQYXJzZXIiLCAicmVjYXN0IiwgInBhdGgiLCAicGF0aCIsICJpbXBvcnRfcHJvbWlzZXMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJnbG9iIiwgImltcG9ydF9wb3N0Y3NzIiwgImltcG9ydF9wb3N0Y3NzX3NlbGVjdG9yX3BhcnNlciIsICJwYXJzZXIiLCAicG9zdGNzcyIsICJwYXRoIiwgImltcG9ydF9wcm9taXNlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF91bnBsdWdpbiIsICJpbXBvcnRfcGFyc2VyIiwgImltcG9ydF9yZWNhc3QiLCAicGFyc2VPcHRpb25zIiwgImJhYmVsUGFyc2VyIiwgInJlY2FzdCIsICJwYXRoIiwgInJlY2FzdCIsICJub2RlIiwgInBhdGgiXQp9Cg==
|
package/dist/esm/build/index.mjs
CHANGED
|
@@ -422,7 +422,15 @@ import { createUnplugin as createUnplugin3 } from "unplugin";
|
|
|
422
422
|
import babelParser2 from "@babel/parser";
|
|
423
423
|
import recast2 from "recast";
|
|
424
424
|
var parseOptions2 = {
|
|
425
|
-
parser:
|
|
425
|
+
parser: {
|
|
426
|
+
parse(source) {
|
|
427
|
+
return babelParser2.parse(source, {
|
|
428
|
+
sourceType: "module",
|
|
429
|
+
allowImportExportEverywhere: true,
|
|
430
|
+
tokens: true
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
}
|
|
426
434
|
};
|
|
427
435
|
function replaceHbsInJs_default(script, replaceFunction) {
|
|
428
436
|
const ast = recast2.parse(script, parseOptions2);
|
|
@@ -657,4 +665,4 @@ export {
|
|
|
657
665
|
app_scopedcss_webpack_default as appScopedcssWebpack,
|
|
658
666
|
scoped_css_unplugin_default as scopedCssUnplugin
|
|
659
667
|
};
|
|
660
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtdW5wbHVnaW4uanMiLCAiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1qcy11bnBsdWdpbi5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyIsICIuLi8uLi8uLi9zcmMvbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2lzSW5zaWRlR2xvYmFsLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmVwbGFjZUdsaW1tZXJBc3QuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9mc0V4aXN0cy5qcyIsICIuLi8uLi8uLi9zcmMvYnVpbGQvYXBwLXNjb3BlZGNzcy13ZWJwYWNrLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2V0RmlsZXMuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9zY29wZWQtY3NzLXVucGx1Z2luLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmVwbGFjZUhic0luSnMuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlSGJzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmVuYW1lQ2xhc3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gZnJvbSAndW5wbHVnaW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVVbnBsdWdpbigoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1jc3MtdW5wbHVnaW4nLFxuXG4gICAgLy8gbG9hZEluY2x1ZGUoaWQpe1xuICAgIC8vICAgaWYoaWQuZW5kc1dpdGgoJy5jc3MnKSl7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vICAgfVxuICAgIC8vIH0sXG5cbiAgICAvLyBsb2FkKGlkKXtcbiAgICAvLyAgIC8vIHRoaXMuYWRkV2F0Y2hGaWxlKGlkKTtcbiAgICAvLyAgIHJldHVybiAnY29uc29sZS5sb2coJyArIEpTT04uc3RyaW5naWZ5KGlkKSArICcpOyc7XG4gICAgLy8gfSxcblxuICAgIC8vIHRyYW5zZm9ybUluY2x1ZGUoaWQpIHtcbiAgICAvLyAgIGlmKGlkLmVuZHNXaXRoKCcuY3NzJykpe1xuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LFxuXG4gICAgLy8gYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgLy8gICByZXR1cm4gY29kZTtcbiAgICAvLyB9LFxuICB9O1xufSk7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi4vbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJlcGxhY2VHbGltbWVyQXN0IGZyb20gJy4uL2xpYi9yZXBsYWNlR2xpbW1lckFzdC5qcyc7XG5cbmZ1bmN0aW9uKiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzKSB7XG4gIGZvciAobGV0IGluc3RydWN0aW9uIG9mIG9wY29kZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB5aWVsZCBpbnN0cnVjdGlvbjtcblxuICAgIGZvciAobGV0IHN1Ykluc3RydWN0aW9uIG9mIGl0ZXJhdGVPcGNvZGVzKGluc3RydWN0aW9uKSkge1xuICAgICAgeWllbGQgc3ViSW5zdHJ1Y3Rpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVUYWdOYW1lKHRhZykge1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIGlmICh0YWcgPT09IDApIHtcbiAgICAgIHJldHVybiAnZGl2JztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMSkge1xuICAgICAgcmV0dXJuICdzcGFuJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMikge1xuICAgICAgcmV0dXJuICdwJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMykge1xuICAgICAgcmV0dXJuICdhJztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdGFnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVVucGx1Z2luKCh7IGFwcERpciB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1qcy11bnBsdWdpbicsXG5cbiAgICB0cmFuc2Zvcm1JbmNsdWRlKGlkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpZC5pbmNsdWRlcyhwYXRoLmJhc2VuYW1lKGFwcERpcikpICYmXG4gICAgICAgIChpZC5lbmRzV2l0aCgnLmpzJykgfHwgaWQuZW5kc1dpdGgoJy5oYnMnKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2hvbGUgdGhpbmcgaXMgZXJyb3IgcHJvbmUsIGFuZCB3ZSBzaG91bGQgc3dpdGNoIHRoZSBlbWJyb2lkZXJcbiAgICAgKiB0ZWNobmlxdWUgdG8gdXNpbmcgYSBiYWJlbCBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBVc2luZyBhIHdlYnBhY2sgcGx1Z2luIGlzIHRvbyBsYXRlIGluIHRoZSBwcm9jZXNzLlxuICAgICAqIFdlIGRvbid0IHdhbnQgdG8gYmUgZGVhbGluZyB3aXRoIHdpcmUtZm9ybWF0LCBiZWNhdXNlXG4gICAgICogLSBpdCdzIG5vdCBwdWJsaWMgQVBJXG4gICAgICogLSBpdCBjYW4gY2hhbmdlIGFzIGVtYmVyLXNvdXJjZSBpcyB1cGdyYWRlZFxuICAgICAqIC0gdGhlIG51bWJlcnMgYXJlIG5vdCBcInN0YWJsZVwiLCBpbiB0aGF0IHRoZXkgYXJlIGJpdHdpc2UgYW5kZWQgYW5kIG9yZWRcbiAgICAgKiAgIHRvZ2V0aGVyIHNvIHRoYXQgc3RvcmFnZSBpcyBlZmZpY2llbnQgLS0gd2hpY2ggbWVhbnMgd2UnZCBuZWVkIHRvIGtub3dcbiAgICAgKiAgIGFsbCB0aGUgb3Bjb2RlcyBhbmQgYXBwcm9wcmlhdGVseSB8IC8gJiB0byBkZWNvbnN0cnVjdCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBsZXQgY3NzUGF0aCA9IGlkLnJlcGxhY2UoLyhcXC5qcyl8KFxcLmhicykvLCAnLmNzcycpO1xuICAgICAgbGV0IG1vZHVsZUdyb3VwUGF0aCA9IGNzc1BhdGg7XG5cbiAgICAgIC8qKlxuICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgKlxuICAgICAgICogTm90ZSB0aGF0IFBvZC1jb21wb25lbnRzIHdpbGwgbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICAgICAgICovXG4gICAgICBsZXQgaXNQb2QgPSAhaWQuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmIGlkLmVuZHNXaXRoKCcvdGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgIGlmIChpc1BvZCkge1xuICAgICAgICBjc3NQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpZCksICdzdHlsZXMuY3NzJyk7XG4gICAgICAgIG1vZHVsZUdyb3VwUGF0aCA9IHBhdGguZGlybmFtZShjc3NQYXRoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChtb2R1bGVHcm91cFBhdGgpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVwbGFjZUdsaW1tZXJBc3QoY29kZSwgaWQsIChvcGNvZGVzLCBjc3MpID0+IHtcbiAgICAgICAgY29uc3QgeyBjbGFzc2VzLCB0YWdzIH0gPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcbiAgICAgICAgLy8gdGhpcy5hZGRXYXRjaEZpbGUoY3NzUGF0aCk7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbnN0cnVjdGlvbiBvZiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzWzBdKSkge1xuICAgICAgICAgIC8vIHJlcGxhY2UgY2xhc3Nlc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzBdID09PSAxNCAmJlxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMV0gPT09IDAgJiZcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzJdICYmXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXS5zcGxpdCgnICcpLmZpbmQoKGkpID0+IGNsYXNzZXMuaGFzKGkudHJpbSgpKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXSA9IGluc3RydWN0aW9uWzJdXG4gICAgICAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUudHJpbSgpICYmIGNsYXNzZXMuaGFzKGNsYXNzTmFtZS50cmltKCkpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnRyaW0oKSArICdfJyArIHBvc3RmaXg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlcGxhY2Ugc3RyaW5ncyBpbiBpZiBjb25kaXRpb25zXG4gICAgICAgICAgLy8gdGhpcyBpcyBicml0dGxlLCBiZWNhdXNlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBkZWVwbHkgbmVzdGVkXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyB0aGlzIHBhcnRpY3VsYXIgb25lIGlzIDxkaXYgY2xhc3M9XCJnbG9iYWwtcHJvYmFibHkge3tpZiBAY29uZGl0aW9uIFwiYS1sb2NhbC1jbGFzc1wifX1cIj5cIlxuICAgICAgICAgIC8vIGlmIChpbnN0cnVjdGlvblswXSA9PT0gMTUgJiYgQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvblsxXSkgJiYgaW5zdHJ1Y3Rpb25bMV1bMF0gPT09IDI5KSB7XG5cbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBhZGQgcG9zdGZpeCB0byB0YWdzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMF0gPT09IDEwICYmXG4gICAgICAgICAgICB0YWdzLmhhcyhpbmZsYXRlVGFnTmFtZShpbnN0cnVjdGlvblsxXSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyAxMCAtIG9wZW4gZWxlbWVudFxuICAgICAgICAgICAgbGV0IGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbjtcblxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbGV0IGkgPSBvcGNvZGVzWzBdLmluZGV4T2YoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICAgICAgICBpIDw9IG9wY29kZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAob3Bjb2Rlc1swXVtpXVswXSA9PT0gMTQgJiYgb3Bjb2Rlc1swXVtpXVsxXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDbGFzc0luc3RydWN0aW9uID0gb3Bjb2Rlc1swXVtpXTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG9wY29kZXNbMF1baV1bMF0gPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgLy8gMTIgLSBmbHVzaCBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgICBleGlzdGluZ0NsYXNzSW5zdHJ1Y3Rpb25bMl0gKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5zdHJ1Y3Rpb24gPSBbMTQsIDAsIHBvc3RmaXgsIHVuZGVmaW5lZF07XG5cbiAgICAgICAgICAgICAgaW5zZXJ0aW9ucy5wdXNoKFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluc2VydCBuZXcgaW5zdHJ1Y3Rpb25zXG4gICAgICAgIGZvciAobGV0IFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0gb2YgaW5zZXJ0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3Bjb2Rlc1swXS5pbmRleE9mKGluc3RydWN0aW9uKTtcblxuICAgICAgICAgIG9wY29kZXNbMF0uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2xhc3NJbnN0cnVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXdyaXRlIG9wY29kZXNcbiAgICAgICAgLy8gY29uc3QgZGJnID0gbmV3IFdpcmVGb3JtYXREZWJ1Z2dlcihvcGNvZGVzKTtcbiAgICAgICAgLy8gY29uc3Qgd2ZkID0gZGJnLmZvcm1hdChvcGNvZGVzKTtcblxuICAgICAgICByZXR1cm4gb3Bjb2RlcztcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59KTtcbiIsICJpbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcblxuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICAvKipcbiAgICogUG9kcyBzdXBwb3J0LlxuICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9kcyBmb3IgY29tcG9uZW50cyB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAgICovXG4gIGxldCBpc1BvZCA9XG4gICAgIXBhY2thZ2VSZWxhdGl2ZS5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykgJiZcbiAgICAocGFja2FnZVJlbGF0aXZlLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSk7XG5cbiAgaWYgKGlzUG9kKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5mdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG5jb25zdCBDQUNIRSA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBzb3VyY2UgcGF0aCwgaWYgd2UgaGF2ZSBzZWVuIGFcbiAqIHNvdXJjZSBmaWxlIHdpdGhpbiB0aGUgd29ya3NwYWNlIGRpcmVjdG9yeSxcbiAqIGZpbmQgdGhhdCB3b3Jrc3BhY2UgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXQuXG4gKi9cbmZ1bmN0aW9uIGhhc1NlZW4oc291cmNlUGF0aCkge1xuICBmb3IgKGxldCBlbnRyeSBvZiBDQUNIRSkge1xuICAgIGlmIChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG5cbiAgLy8gd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIHNvdXJjZSBwYXRoIHlldFxuICByZXR1cm47XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5mdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCBzZWVuID0gaGFzU2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFVwLnN5bmMoJ3BhY2thZ2UuanNvbicsIHtcbiAgICBjd2Q6IHBhdGguZGlybmFtZShzb3VyY2VQYXRoKSxcbiAgfSk7XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIENBQ0hFLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG5cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoKHJlbGF0aXZlUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiAnZScgKyBtZDUocmVsYXRpdmVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiBnZXRDbGFzc2VzQW5kVGFncyhzZWwsIGNsYXNzZXMsIHRhZ3MpIHtcbiAgY29uc3QgdHJhbnNmb3JtID0gKHNscykgPT4ge1xuICAgIHNscy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdjbGFzcycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBjbGFzc2VzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgdGFncy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3MpIHtcbiAgY29uc3QgY2xhc3NlcyA9IG5ldyBTZXQoKTtcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoKTtcblxuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScpIHtcbiAgICAgIGdldENsYXNzZXNBbmRUYWdzKG5vZGUuc2VsZWN0b3IsIGNsYXNzZXMsIHRhZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHsgY2xhc3NlcywgdGFncyB9O1xufVxuXG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJbnNpZGVHbG9iYWwobm9kZSwgZnVuYykge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdwc2V1ZG8nICYmIHBhcmVudC52YWx1ZSA9PT0gJzpnbG9iYWwnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVHbG9iYWwocGFyZW50LCBmdW5jKTtcbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5pbXBvcnQgZnNFeGlzdHMgZnJvbSAnLi9mc0V4aXN0cy5qcyc7XG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgcGFyc2VyOiBiYWJlbFBhcnNlcixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VHbGltbWVyQXN0KHNjcmlwdCwgaWQsIHJlcGxhY2VGdW5jdGlvbikge1xuICBjb25zdCBhc3QgPSByZWNhc3QucGFyc2Uoc2NyaXB0LCBwYXJzZU9wdGlvbnMpO1xuICBjb25zdCBjc3NQYXRoID0gaWQucmVwbGFjZSgvKFxcLmpzKXwoXFwuaGJzKS8sICcuY3NzJyk7XG4gIGxldCBjc3M7XG5cbiAgY29uc3QgY3NzRXhpc3RzID0gYXdhaXQgZnNFeGlzdHMoY3NzUGF0aCk7XG5cbiAgaWYgKGNzc0V4aXN0cykge1xuICAgIGNzcyA9IGF3YWl0IHJlYWRGaWxlKGNzc1BhdGgsICd1dGYtOCcpO1xuICB9XG5cbiAgaWYgKCFjc3MpIHtcbiAgICByZXR1cm4gc2NyaXB0O1xuICB9XG5cbiAgcmVjYXN0LnZpc2l0KGFzdCwge1xuICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZVBhdGgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUGF0aC5ub2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdjcmVhdGVUZW1wbGF0ZUZhY3RvcnknICYmXG4gICAgICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrUHJvcCA9IG5vZGUuYXJndW1lbnRzWzBdLnByb3BlcnRpZXMuZmluZChcbiAgICAgICAgICAocHJvcCkgPT4gcHJvcC5rZXkudmFsdWUgPT09ICdibG9jaycsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9wY29kZXMgPSBKU09OLnBhcnNlKGJsb2NrUHJvcC52YWx1ZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld09wY29kZXMgPSByZXBsYWNlRnVuY3Rpb24ob3Bjb2RlcywgY3NzKTtcblxuICAgICAgICBibG9ja1Byb3AudmFsdWUudmFsdWUgPSBKU09OLnN0cmluZ2lmeShuZXdPcGNvZGVzKTtcblxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG4gICAgICAgIC8vIGlmICghaW1wb3J0UGF0aCkge1xuICAgICAgICAvLyAgIHVucGx1Z2luLmFkZFdhdGNoRmlsZShjc3NQYXRoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBpbXBvcnRDc3MgPSByZWNhc3QucGFyc2UoXG4gICAgICAgICAgYGltcG9ydCAnLi8ke2ZpbGVOYW1lfSc7XFxuYCxcbiAgICAgICAgICBwYXJzZU9wdGlvbnMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGltcG9ydENzc05vZGUgPSBpbXBvcnRDc3MucHJvZ3JhbS5ib2R5WzBdO1xuXG4gICAgICAgIGFzdC5wcm9ncmFtLmJvZHkudW5zaGlmdChpbXBvcnRDc3NOb2RlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmF2ZXJzZShub2RlUGF0aCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0U2NyaXB0ID0gcmVjYXN0LnByaW50KGFzdCkuY29kZTtcblxuICByZXR1cm4gcmVzdWx0U2NyaXB0O1xufVxuIiwgImltcG9ydCB7IHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGF0KHBhdGgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvLyBpbXBvcnQgeyBSYXdTb3VyY2UgfSAgZnJvbSAnd2VicGFjay1zb3VyY2VzJztcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRGaWxlcyBmcm9tICcuLi9saWIvZ2V0RmlsZXMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB7XG4gIGFwcGx5KGNvbXBpbGVyKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkVNQkVSX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29tcGlsZXIuaG9va3MuZW1pdC50YXBBc3luYyhcbiAgICAgICdzY29wZWQtd2VicGFjay1wbHVnaW4nLFxuICAgICAgYXN5bmMgKGNvbXBpbGF0aW9uLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNzc0ZpbGVzID0gYXdhaXQgZ2V0RmlsZXMoXG4gICAgICAgICAgICBwYXRoLnJlc29sdmUoY29tcGlsZXIuY29udGV4dCwgJyoqLyouY3NzJyksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJld3JpdGUgdGhlIENTUyBmaWxlc1xuICAgICAgICAgIGNvbnN0IHJld3JpdHRlbkZpbGVzID0gW107XG5cbiAgICAgICAgICAvLyBjb25zdCByZXdyaXRlbkZpbGVzID0gY3NzRmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBjc3NGaWxlcykge1xuICAgICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoYC8ke3BhdGguYmFzZW5hbWUoY29tcGlsZXIuY29udGV4dCl9LmNzc2ApKSB7XG4gICAgICAgICAgICAgIC8vIGltcG9ydCBzY29wZWQuY3NzIGludG8gYXBwLmNzc1xuICAgICAgICAgICAgICBsZXQgYXBwQ3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGUsIGBAaW1wb3J0IFwic2NvcGVkLmNzc1wiO1xcbiR7YXBwQ3NzfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwYXRoLmJhc2VuYW1lKGNvbXBpbGVyLmNvbnRleHQpICsgJy5jc3MnLFxuICAgICAgICAgICAgICAgICd0ZXN0LXN1cHBvcnQuY3NzJyxcbiAgICAgICAgICAgICAgXS5zb21lKChmKSA9PiBmaWxlLmVuZHNXaXRoKGYpKSB8fFxuICAgICAgICAgICAgICBmaWxlLmluY2x1ZGVzKCcvdmVuZG9yLycpIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuanMnKSkpIHx8XG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuaGJzJykpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goZmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUpO1xuXG4gICAgICAgICAgICByZXdyaXR0ZW5GaWxlcy5wdXNoKHJld3JpdHRlbkNzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ29uY2F0ZW5hdGUgdGhlIHJld3JpdHRlbiBDU1MgZmlsZXNcbiAgICAgICAgICBsZXQgY29uY2F0ZW5hdGVkQ1NTID0gcmV3cml0dGVuRmlsZXMuam9pbignXFxuXFxuJyk7XG5cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY29uY2F0ZW5hdGVkIENTUyBpbiB0aGUgYXNzZXRzL3Njb3BlZC1jb21wb25lbnRzLmNzc1xuICAgICAgICAgIGNvbXBpbGF0aW9uLmFzc2V0c1snYXNzZXRzL3Njb3BlZC5jc3MnXSA9IHtcbiAgICAgICAgICAgIHNvdXJjZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLFxuICAgICAgICAgICAgc2l6ZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLmxlbmd0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZ2xvYlBhdGgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnbG9iKGdsb2JQYXRoLCAoZXJyLCBmaWxlcykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi4vbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyc7XG5pbXBvcnQgcmVwbGFjZUhic0luSnMgZnJvbSAnLi4vbGliL3JlcGxhY2VIYnNJbkpzLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4uL2xpYi9yZXdyaXRlSGJzLmpzJztcblxuZnVuY3Rpb24gaXNKc0ZpbGUoaWQpIHtcbiAgcmV0dXJuIGlkLmVuZHNXaXRoKCcuanMnKSB8fCBpZC5lbmRzV2l0aCgnLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzQ3NzRmlsZShpZCkge1xuICByZXR1cm4gaWQuZW5kc1dpdGgoJy5jc3MnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCkge1xuICBjb25zdCBjc3NQYXRoID0ganNQYXRoLnJlcGxhY2UoLyhcXC5oYnMpP1xcLigoanMpfCh0cykpJC8sICcuY3NzJyk7XG4gIGNvbnN0IGNzc0ZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShjc3NQYXRoKTtcblxuICBjb25zdCBjc3NFeGlzdHMgPSBhd2FpdCBmc0V4aXN0cyhjc3NQYXRoKTtcbiAgbGV0IGNzcztcblxuICBpZiAoY3NzRXhpc3RzKSB7XG4gICAgY3NzID0gYXdhaXQgcmVhZEZpbGUoY3NzUGF0aCwgJ3V0ZjgnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZSxcbiAgICAgIG1hcDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gYWRkIGNzcyBpbXBvcnQgZm9yIGpzIGFuZCBnanMgZmlsZXNcbiAgY29kZSA9IGBpbXBvcnQgJy4vJHtjc3NGaWxlTmFtZX0nO1xcblxcbiR7Y29kZX1gO1xuXG4gIC8vIHJld3JpdGUgaGJzIGluIGpzIGluIGNhc2UgaXQgaXMgZ2pzIGZpbGUgKGZvciBnanMgZmlsZXMgaGJzIGlzIGFscmVhZHkgaW4ganMgZmlsZSlcblxuICBjb25zdCByZXdyaXR0ZW5Db2RlID0gcmVwbGFjZUhic0luSnMoY29kZSwgKGhicykgPT4ge1xuICAgIGNvbnN0IHsgY2xhc3NlcywgdGFncyB9ID0gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcyk7XG4gICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChjc3NQYXRoKTtcbiAgICBjb25zdCByZXdyaXR0ZW4gPSByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGNvZGU6IHJld3JpdHRlbkNvZGUsXG4gICAgbWFwOiBudWxsLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1Dc3NGaWxlKGNvZGUsIGlkLCBsYXllck5hbWUsIGVtaXRGaWxlKSB7XG4gIGNvbnN0IGpzUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCAnLmdqcycpO1xuICBjb25zdCBndHNQYXRoID0gaWQucmVwbGFjZSgvXFwuY3NzJC8sICcuZ3RzJyk7XG4gIGNvbnN0IGhic1BhdGggPSBpZC5yZXBsYWNlKC9cXC5jc3MkLywgJy5oYnMnKTtcblxuICBjb25zdCBbanNFeGlzdHMsIGd0c0V4aXN0cywgaGJzRXhpc3RzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBmc0V4aXN0cyhqc1BhdGgpLFxuICAgIGZzRXhpc3RzKGd0c1BhdGgpLFxuICAgIGZzRXhpc3RzKGhic1BhdGgpLFxuICBdKTtcblxuICBpZiAoanNFeGlzdHMgfHwgaGJzRXhpc3RzIHx8IGd0c0V4aXN0cykge1xuICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goaWQpO1xuXG4gICAgY29kZSA9IHJld3JpdGVDc3MoY29kZSwgcG9zdGZpeCwgcGF0aC5iYXNlbmFtZShpZCksIGxheWVyTmFtZSk7XG4gIH1cblxuICBjb25zdCBlbWl0dGVkRmlsZU5hbWUgPSBpZC5yZXBsYWNlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnc3JjLycpLCAnJyk7XG5cbiAgZW1pdEZpbGUoe1xuICAgIHR5cGU6ICdhc3NldCcsXG4gICAgZmlsZU5hbWU6IGVtaXR0ZWRGaWxlTmFtZSxcbiAgICBzb3VyY2U6IGNvZGUsXG4gIH0pO1xuXG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVW5wbHVnaW4oXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGF5ZXJOYW1lXSB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGxhY2UgdGhlIGdlbmVyYXRlZCBjc3MuIERlZmF1bHRzIHRvIFwiY29tcG9uZW50c1wiXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnZW1iZXItc2NvcGVkLWNzcy11bnBsdWdpbicsXG5cbiAgICAgIGdlbmVyYXRlQnVuZGxlKGEsIGJ1bmRsZSkge1xuICAgICAgICBsZXQgY3NzRmlsZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBhc3NldCBpbiBidW5kbGUpIHtcbiAgICAgICAgICBjb25zdCBjc3NBc3NldCA9IGFzc2V0LnJlcGxhY2UoJ2pzJywgJ2NzcycpO1xuXG4gICAgICAgICAgaWYgKCFhc3NldC5lbmRzV2l0aCgnanMnKSB8fCAhYnVuZGxlW2Nzc0Fzc2V0XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICBjc3NGaWxlcy5wdXNoKGJ1bmRsZVtjc3NBc3NldF0uc291cmNlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBidW5kbGVbY3NzQXNzZXRdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBhZGQgaW1wb3J0IHRvIGpzIGZpbGVzXG4gICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGUgPVxuICAgICAgICAgICAgICBgaW1wb3J0ICcuLyR7cGF0aC5iYXNlbmFtZShhc3NldC5yZXBsYWNlKCcuanMnLCAnLmNzcycpKX0nO1xcbmAgK1xuICAgICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5lbWl0RmlsZSh7XG4gICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgZmlsZU5hbWU6ICdzY29wZWQuY3NzJyxcbiAgICAgICAgICAgIHNvdXJjZTogY3NzRmlsZXMuam9pbignXFxuJyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHRyYW5zZm9ybShjb2RlLCBqc1BhdGgpIHtcbiAgICAgICAgaWYgKGlzSnNGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDc3NGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtQ3NzRmlsZShcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICBqc1BhdGgsXG4gICAgICAgICAgICBvcHRpb25zPy5sYXllck5hbWUsXG4gICAgICAgICAgICB0aGlzLmVtaXRGaWxlLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbik7XG4iLCAiaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSB7XG4gIHBhcnNlcjogYmFiZWxQYXJzZXIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc2NyaXB0LCByZXBsYWNlRnVuY3Rpb24pIHtcbiAgY29uc3QgYXN0ID0gcmVjYXN0LnBhcnNlKHNjcmlwdCwgcGFyc2VPcHRpb25zKTtcblxuICByZWNhc3QudmlzaXQoYXN0LCB7XG4gICAgdmlzaXRDYWxsRXhwcmVzc2lvbihwYXRoKSB7XG4gICAgICBjb25zdCBub2RlID0gcGF0aC5ub2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdfX0dMSU1NRVJfVEVNUExBVEUnIHx8XG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdwcmVjb21waWxlVGVtcGxhdGUnXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnKSB7XG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0ucXVhc2lzWzBdLnZhbHVlLnJhdyA9IHJlcGxhY2VGdW5jdGlvbihcbiAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5yYXcsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcgfHxcbiAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnTGl0ZXJhbCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udmFsdWUgPSByZXBsYWNlRnVuY3Rpb24obm9kZS5hcmd1bWVudHNbMF0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhdmVyc2UocGF0aCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIHJlY2FzdC5wcmludChhc3QpLmNvZGU7XG59XG4iLCAiaW1wb3J0IHJlY2FzdCBmcm9tICdlbWJlci10ZW1wbGF0ZS1yZWNhc3QnO1xuXG5pbXBvcnQgcmVuYW1lQ2xhc3MgZnJvbSAnLi9yZW5hbWVDbGFzcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVIYnMoaGJzLCBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4KSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcbiAgbGV0IHN0YWNrID0gW107XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/Lm9yaWdpbmFsID09PSAnc2NvcGVkLWNsYXNzJyAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5wYXRoPy5vcmlnaW5hbCA9PT0gJ3Njb3BlZC1jbGFzcycgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjc3NDbGFzcyA9IG5vZGUucGF0aC5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjc3NDbGFzcykge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy50ZXh0KHJlbmFtZUNsYXNzKGNzc0NsYXNzLCBwb3N0Zml4KSk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ0F0dHJOb2RlJykge1xuICAgICAgICAgIHBhcmVudC5xdW90ZVR5cGUgPSAnXCInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBTdWJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5vcmlnaW5hbCA9PT0gJ3Njb3BlZC1jbGFzcycgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgcG9zdGZpeDogc3RyaW5nLFxuICBjbGFzc2VzSW5Dc3M/OiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gIGNvbnN0IHJlbmFtZWRDbGFzc2VzID0gY2xhc3Nlc1xuICAgIC5maWx0ZXIoKGMpID0+IGMpXG4gICAgLm1hcCgoYykgPT4gYy50cmltKCkpXG4gICAgLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKCFjbGFzc2VzSW5Dc3MgfHwgY2xhc3Nlc0luQ3NzLmhhcyhjKSkge1xuICAgICAgICBpZiAoYy5lbmRzV2l0aChwb3N0Zml4KSkgcmV0dXJuIGM7XG5cbiAgICAgICAgcmV0dXJuIGMgKyAnXycgKyBwb3N0Zml4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG5cbiAgY29uc3QgcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXMgPSBjbGFzc05hbWUucmVwbGFjZShcbiAgICBjbGFzc05hbWUudHJpbVN0YXJ0KCkudHJpbUVuZCgpLFxuICAgIHJlbmFtZWRDbGFzc2VzLFxuICApO1xuXG4gIHJldHVybiByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OztBQUFBLFNBQVMsc0JBQXNCO0FBRS9CLElBQU8sMkJBQVEsZUFBZSxNQUFNO0FBQ2xDLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFzQlI7QUFDRixDQUFDOzs7QUMzQkQsT0FBT0EsV0FBVTtBQUVqQixTQUFTLGtCQUFBQyx1QkFBc0I7OztBQ0YvQixPQUFPLFlBQVk7QUFDbkIsT0FBTyxVQUFVO0FBRWpCLE9BQU8sWUFBWTs7O0FDSG5CLE9BQU8sU0FBUztBQUVELFNBQVIseUJBQTBDLGNBQXNCO0FBQ3JFLFNBQU8sTUFBTSxJQUFJLFlBQVksRUFBRSxVQUFVLEdBQUcsQ0FBQztBQUMvQzs7O0FER2UsU0FBUiw2QkFBOEMsY0FBYztBQU1qRSxRQUFNLGFBQWEsUUFBUSxZQUFZO0FBRXZDLFFBQU0sT0FBTyx5QkFBYSxVQUFVO0FBRXBDLFNBQU87QUFDVDtBQUVPLFNBQVMsOEJBQThCLG1CQUFtQjtBQWMvRCxNQUFJLGtCQUFrQixrQkFBa0IsUUFBUSxZQUFZLEdBQUc7QUFFL0QsTUFBSSxTQUFTLEtBQUssTUFBTSxlQUFlO0FBUXZDLE1BQUksUUFDRixDQUFDLGdCQUFn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UUFBUTtBQUFBLEVBQ1YsQ0FBQztBQUVELFNBQU87QUFDVDtBQUVBLElBQU8sOEJBQVFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPYixDQUFDLFlBQVk7QUFDWCxXQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFFTixlQUFlLEdBQUcsUUFBUTtBQUN4QixZQUFJLFdBQVcsQ0FBQztBQUVoQixpQkFBUyxTQUFTLFFBQVE7QUFDeEIsZ0JBQU0sV0FBVyxNQUFNLFFBQVEsTUFBTSxLQUFLO0FBRTFDLGNBQUksQ0FBQyxNQUFNLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxRQUFRLEdBQUc7QUFDOUM7QUFBQSxVQUNGO0FBRUEsY0FBSSxRQUFRLElBQUksZ0JBQWdCLGVBQWU7QUFDN0MscUJBQVMsS0FBSyxPQUFPLFFBQVEsRUFBRSxNQUFNO0FBQ3JDLG1CQUFPLE9BQU8sUUFBUTtBQUFBLFVBQ3hCLE9BQU87QUFFTCxtQkFBTyxLQUFLLEVBQUUsT0FDWixhQUFhRixNQUFLLFNBQVMsTUFBTSxRQUFRLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFBQSxJQUN4RCxPQUFPLEtBQUssRUFBRTtBQUFBLFVBQ2xCO0FBQUEsUUFDRjtBQUVBLFlBQUksUUFBUSxJQUFJLGdCQUFnQixlQUFlO0FBQzdDLGVBQUssU0FBUztBQUFBLFlBQ1osTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsUUFBUSxTQUFTLEtBQUssSUFBSTtBQUFBLFVBQzVCLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLE1BRUEsVUFBVSxNQUFNLFFBQVE7QUFDdEIsWUFBSSxTQUFTLE1BQU0sR0FBRztBQUNwQixpQkFBTyxnQkFBZ0IsTUFBTSxNQUFNO0FBQUEsUUFDckMsV0FBVyxVQUFVLE1BQU0sR0FBRztBQUM1QixpQkFBTztBQUFBLFlBQ0w7QUFBQSxZQUNBO0FBQUEsWUFDQSxTQUFTO0FBQUEsWUFDVCxLQUFLO0FBQUEsVUFDUDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsicGF0aCIsICJjcmVhdGVVbnBsdWdpbiIsICJwYXRoIiwgInBhdGgiLCAicGF0aCIsICJjcmVhdGVVbnBsdWdpbiIsICJwYXRoIiwgInJlYWRGaWxlIiwgInBhdGgiLCAicG9zdGNzcyIsICJwYXJzZXIiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAicGF0aCIsICJyZWFkRmlsZSIsICJyZWFkRmlsZSIsICJwYXRoIiwgImNyZWF0ZVVucGx1Z2luIiwgImJhYmVsUGFyc2VyIiwgInJlY2FzdCIsICJwYXJzZU9wdGlvbnMiLCAicGF0aCIsICJyZWNhc3QiLCAicmVjYXN0IiwgIm5vZGUiLCAicGF0aCIsICJyZWFkRmlsZSIsICJjcmVhdGVVbnBsdWdpbiJdCn0K
|
|
668
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtdW5wbHVnaW4uanMiLCAiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1qcy11bnBsdWdpbi5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyIsICIuLi8uLi8uLi9zcmMvbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2lzSW5zaWRlR2xvYmFsLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmVwbGFjZUdsaW1tZXJBc3QuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9mc0V4aXN0cy5qcyIsICIuLi8uLi8uLi9zcmMvYnVpbGQvYXBwLXNjb3BlZGNzcy13ZWJwYWNrLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2V0RmlsZXMuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9zY29wZWQtY3NzLXVucGx1Z2luLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmVwbGFjZUhic0luSnMuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlSGJzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmVuYW1lQ2xhc3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gZnJvbSAndW5wbHVnaW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVVbnBsdWdpbigoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1jc3MtdW5wbHVnaW4nLFxuXG4gICAgLy8gbG9hZEluY2x1ZGUoaWQpe1xuICAgIC8vICAgaWYoaWQuZW5kc1dpdGgoJy5jc3MnKSl7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vICAgfVxuICAgIC8vIH0sXG5cbiAgICAvLyBsb2FkKGlkKXtcbiAgICAvLyAgIC8vIHRoaXMuYWRkV2F0Y2hGaWxlKGlkKTtcbiAgICAvLyAgIHJldHVybiAnY29uc29sZS5sb2coJyArIEpTT04uc3RyaW5naWZ5KGlkKSArICcpOyc7XG4gICAgLy8gfSxcblxuICAgIC8vIHRyYW5zZm9ybUluY2x1ZGUoaWQpIHtcbiAgICAvLyAgIGlmKGlkLmVuZHNXaXRoKCcuY3NzJykpe1xuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LFxuXG4gICAgLy8gYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgLy8gICByZXR1cm4gY29kZTtcbiAgICAvLyB9LFxuICB9O1xufSk7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi4vbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJlcGxhY2VHbGltbWVyQXN0IGZyb20gJy4uL2xpYi9yZXBsYWNlR2xpbW1lckFzdC5qcyc7XG5cbmZ1bmN0aW9uKiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzKSB7XG4gIGZvciAobGV0IGluc3RydWN0aW9uIG9mIG9wY29kZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB5aWVsZCBpbnN0cnVjdGlvbjtcblxuICAgIGZvciAobGV0IHN1Ykluc3RydWN0aW9uIG9mIGl0ZXJhdGVPcGNvZGVzKGluc3RydWN0aW9uKSkge1xuICAgICAgeWllbGQgc3ViSW5zdHJ1Y3Rpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVUYWdOYW1lKHRhZykge1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIGlmICh0YWcgPT09IDApIHtcbiAgICAgIHJldHVybiAnZGl2JztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMSkge1xuICAgICAgcmV0dXJuICdzcGFuJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMikge1xuICAgICAgcmV0dXJuICdwJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMykge1xuICAgICAgcmV0dXJuICdhJztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdGFnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVVucGx1Z2luKCh7IGFwcERpciB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1qcy11bnBsdWdpbicsXG5cbiAgICB0cmFuc2Zvcm1JbmNsdWRlKGlkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpZC5pbmNsdWRlcyhwYXRoLmJhc2VuYW1lKGFwcERpcikpICYmXG4gICAgICAgIChpZC5lbmRzV2l0aCgnLmpzJykgfHwgaWQuZW5kc1dpdGgoJy5oYnMnKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2hvbGUgdGhpbmcgaXMgZXJyb3IgcHJvbmUsIGFuZCB3ZSBzaG91bGQgc3dpdGNoIHRoZSBlbWJyb2lkZXJcbiAgICAgKiB0ZWNobmlxdWUgdG8gdXNpbmcgYSBiYWJlbCBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBVc2luZyBhIHdlYnBhY2sgcGx1Z2luIGlzIHRvbyBsYXRlIGluIHRoZSBwcm9jZXNzLlxuICAgICAqIFdlIGRvbid0IHdhbnQgdG8gYmUgZGVhbGluZyB3aXRoIHdpcmUtZm9ybWF0LCBiZWNhdXNlXG4gICAgICogLSBpdCdzIG5vdCBwdWJsaWMgQVBJXG4gICAgICogLSBpdCBjYW4gY2hhbmdlIGFzIGVtYmVyLXNvdXJjZSBpcyB1cGdyYWRlZFxuICAgICAqIC0gdGhlIG51bWJlcnMgYXJlIG5vdCBcInN0YWJsZVwiLCBpbiB0aGF0IHRoZXkgYXJlIGJpdHdpc2UgYW5kZWQgYW5kIG9yZWRcbiAgICAgKiAgIHRvZ2V0aGVyIHNvIHRoYXQgc3RvcmFnZSBpcyBlZmZpY2llbnQgLS0gd2hpY2ggbWVhbnMgd2UnZCBuZWVkIHRvIGtub3dcbiAgICAgKiAgIGFsbCB0aGUgb3Bjb2RlcyBhbmQgYXBwcm9wcmlhdGVseSB8IC8gJiB0byBkZWNvbnN0cnVjdCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBsZXQgY3NzUGF0aCA9IGlkLnJlcGxhY2UoLyhcXC5qcyl8KFxcLmhicykvLCAnLmNzcycpO1xuICAgICAgbGV0IG1vZHVsZUdyb3VwUGF0aCA9IGNzc1BhdGg7XG5cbiAgICAgIC8qKlxuICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgKlxuICAgICAgICogTm90ZSB0aGF0IFBvZC1jb21wb25lbnRzIHdpbGwgbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICAgICAgICovXG4gICAgICBsZXQgaXNQb2QgPSAhaWQuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmIGlkLmVuZHNXaXRoKCcvdGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgIGlmIChpc1BvZCkge1xuICAgICAgICBjc3NQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpZCksICdzdHlsZXMuY3NzJyk7XG4gICAgICAgIG1vZHVsZUdyb3VwUGF0aCA9IHBhdGguZGlybmFtZShjc3NQYXRoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChtb2R1bGVHcm91cFBhdGgpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVwbGFjZUdsaW1tZXJBc3QoY29kZSwgaWQsIChvcGNvZGVzLCBjc3MpID0+IHtcbiAgICAgICAgY29uc3QgeyBjbGFzc2VzLCB0YWdzIH0gPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcbiAgICAgICAgLy8gdGhpcy5hZGRXYXRjaEZpbGUoY3NzUGF0aCk7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbnN0cnVjdGlvbiBvZiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzWzBdKSkge1xuICAgICAgICAgIC8vIHJlcGxhY2UgY2xhc3Nlc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzBdID09PSAxNCAmJlxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMV0gPT09IDAgJiZcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzJdICYmXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXS5zcGxpdCgnICcpLmZpbmQoKGkpID0+IGNsYXNzZXMuaGFzKGkudHJpbSgpKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXSA9IGluc3RydWN0aW9uWzJdXG4gICAgICAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUudHJpbSgpICYmIGNsYXNzZXMuaGFzKGNsYXNzTmFtZS50cmltKCkpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnRyaW0oKSArICdfJyArIHBvc3RmaXg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlcGxhY2Ugc3RyaW5ncyBpbiBpZiBjb25kaXRpb25zXG4gICAgICAgICAgLy8gdGhpcyBpcyBicml0dGxlLCBiZWNhdXNlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBkZWVwbHkgbmVzdGVkXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyB0aGlzIHBhcnRpY3VsYXIgb25lIGlzIDxkaXYgY2xhc3M9XCJnbG9iYWwtcHJvYmFibHkge3tpZiBAY29uZGl0aW9uIFwiYS1sb2NhbC1jbGFzc1wifX1cIj5cIlxuICAgICAgICAgIC8vIGlmIChpbnN0cnVjdGlvblswXSA9PT0gMTUgJiYgQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvblsxXSkgJiYgaW5zdHJ1Y3Rpb25bMV1bMF0gPT09IDI5KSB7XG5cbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBhZGQgcG9zdGZpeCB0byB0YWdzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMF0gPT09IDEwICYmXG4gICAgICAgICAgICB0YWdzLmhhcyhpbmZsYXRlVGFnTmFtZShpbnN0cnVjdGlvblsxXSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyAxMCAtIG9wZW4gZWxlbWVudFxuICAgICAgICAgICAgbGV0IGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbjtcblxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbGV0IGkgPSBvcGNvZGVzWzBdLmluZGV4T2YoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICAgICAgICBpIDw9IG9wY29kZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAob3Bjb2Rlc1swXVtpXVswXSA9PT0gMTQgJiYgb3Bjb2Rlc1swXVtpXVsxXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDbGFzc0luc3RydWN0aW9uID0gb3Bjb2Rlc1swXVtpXTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG9wY29kZXNbMF1baV1bMF0gPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgLy8gMTIgLSBmbHVzaCBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgICBleGlzdGluZ0NsYXNzSW5zdHJ1Y3Rpb25bMl0gKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5zdHJ1Y3Rpb24gPSBbMTQsIDAsIHBvc3RmaXgsIHVuZGVmaW5lZF07XG5cbiAgICAgICAgICAgICAgaW5zZXJ0aW9ucy5wdXNoKFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluc2VydCBuZXcgaW5zdHJ1Y3Rpb25zXG4gICAgICAgIGZvciAobGV0IFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0gb2YgaW5zZXJ0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3Bjb2Rlc1swXS5pbmRleE9mKGluc3RydWN0aW9uKTtcblxuICAgICAgICAgIG9wY29kZXNbMF0uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2xhc3NJbnN0cnVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXdyaXRlIG9wY29kZXNcbiAgICAgICAgLy8gY29uc3QgZGJnID0gbmV3IFdpcmVGb3JtYXREZWJ1Z2dlcihvcGNvZGVzKTtcbiAgICAgICAgLy8gY29uc3Qgd2ZkID0gZGJnLmZvcm1hdChvcGNvZGVzKTtcblxuICAgICAgICByZXR1cm4gb3Bjb2RlcztcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59KTtcbiIsICJpbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcblxuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICAvKipcbiAgICogUG9kcyBzdXBwb3J0LlxuICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9kcyBmb3IgY29tcG9uZW50cyB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAgICovXG4gIGxldCBpc1BvZCA9XG4gICAgIXBhY2thZ2VSZWxhdGl2ZS5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykgJiZcbiAgICAocGFja2FnZVJlbGF0aXZlLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSk7XG5cbiAgaWYgKGlzUG9kKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5mdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG5jb25zdCBDQUNIRSA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBzb3VyY2UgcGF0aCwgaWYgd2UgaGF2ZSBzZWVuIGFcbiAqIHNvdXJjZSBmaWxlIHdpdGhpbiB0aGUgd29ya3NwYWNlIGRpcmVjdG9yeSxcbiAqIGZpbmQgdGhhdCB3b3Jrc3BhY2UgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXQuXG4gKi9cbmZ1bmN0aW9uIGhhc1NlZW4oc291cmNlUGF0aCkge1xuICBmb3IgKGxldCBlbnRyeSBvZiBDQUNIRSkge1xuICAgIGlmIChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG5cbiAgLy8gd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIHNvdXJjZSBwYXRoIHlldFxuICByZXR1cm47XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5mdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCBzZWVuID0gaGFzU2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFVwLnN5bmMoJ3BhY2thZ2UuanNvbicsIHtcbiAgICBjd2Q6IHBhdGguZGlybmFtZShzb3VyY2VQYXRoKSxcbiAgfSk7XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIENBQ0hFLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG5cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoKHJlbGF0aXZlUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiAnZScgKyBtZDUocmVsYXRpdmVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiBnZXRDbGFzc2VzQW5kVGFncyhzZWwsIGNsYXNzZXMsIHRhZ3MpIHtcbiAgY29uc3QgdHJhbnNmb3JtID0gKHNscykgPT4ge1xuICAgIHNscy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdjbGFzcycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBjbGFzc2VzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgdGFncy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3MpIHtcbiAgY29uc3QgY2xhc3NlcyA9IG5ldyBTZXQoKTtcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoKTtcblxuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScpIHtcbiAgICAgIGdldENsYXNzZXNBbmRUYWdzKG5vZGUuc2VsZWN0b3IsIGNsYXNzZXMsIHRhZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHsgY2xhc3NlcywgdGFncyB9O1xufVxuXG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJbnNpZGVHbG9iYWwobm9kZSwgZnVuYykge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdwc2V1ZG8nICYmIHBhcmVudC52YWx1ZSA9PT0gJzpnbG9iYWwnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVHbG9iYWwocGFyZW50LCBmdW5jKTtcbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5pbXBvcnQgZnNFeGlzdHMgZnJvbSAnLi9mc0V4aXN0cy5qcyc7XG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgcGFyc2VyOiBiYWJlbFBhcnNlcixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VHbGltbWVyQXN0KHNjcmlwdCwgaWQsIHJlcGxhY2VGdW5jdGlvbikge1xuICBjb25zdCBhc3QgPSByZWNhc3QucGFyc2Uoc2NyaXB0LCBwYXJzZU9wdGlvbnMpO1xuICBjb25zdCBjc3NQYXRoID0gaWQucmVwbGFjZSgvKFxcLmpzKXwoXFwuaGJzKS8sICcuY3NzJyk7XG4gIGxldCBjc3M7XG5cbiAgY29uc3QgY3NzRXhpc3RzID0gYXdhaXQgZnNFeGlzdHMoY3NzUGF0aCk7XG5cbiAgaWYgKGNzc0V4aXN0cykge1xuICAgIGNzcyA9IGF3YWl0IHJlYWRGaWxlKGNzc1BhdGgsICd1dGYtOCcpO1xuICB9XG5cbiAgaWYgKCFjc3MpIHtcbiAgICByZXR1cm4gc2NyaXB0O1xuICB9XG5cbiAgcmVjYXN0LnZpc2l0KGFzdCwge1xuICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZVBhdGgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUGF0aC5ub2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdjcmVhdGVUZW1wbGF0ZUZhY3RvcnknICYmXG4gICAgICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrUHJvcCA9IG5vZGUuYXJndW1lbnRzWzBdLnByb3BlcnRpZXMuZmluZChcbiAgICAgICAgICAocHJvcCkgPT4gcHJvcC5rZXkudmFsdWUgPT09ICdibG9jaycsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9wY29kZXMgPSBKU09OLnBhcnNlKGJsb2NrUHJvcC52YWx1ZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld09wY29kZXMgPSByZXBsYWNlRnVuY3Rpb24ob3Bjb2RlcywgY3NzKTtcblxuICAgICAgICBibG9ja1Byb3AudmFsdWUudmFsdWUgPSBKU09OLnN0cmluZ2lmeShuZXdPcGNvZGVzKTtcblxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG4gICAgICAgIC8vIGlmICghaW1wb3J0UGF0aCkge1xuICAgICAgICAvLyAgIHVucGx1Z2luLmFkZFdhdGNoRmlsZShjc3NQYXRoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBpbXBvcnRDc3MgPSByZWNhc3QucGFyc2UoXG4gICAgICAgICAgYGltcG9ydCAnLi8ke2ZpbGVOYW1lfSc7XFxuYCxcbiAgICAgICAgICBwYXJzZU9wdGlvbnMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGltcG9ydENzc05vZGUgPSBpbXBvcnRDc3MucHJvZ3JhbS5ib2R5WzBdO1xuXG4gICAgICAgIGFzdC5wcm9ncmFtLmJvZHkudW5zaGlmdChpbXBvcnRDc3NOb2RlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmF2ZXJzZShub2RlUGF0aCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0U2NyaXB0ID0gcmVjYXN0LnByaW50KGFzdCkuY29kZTtcblxuICByZXR1cm4gcmVzdWx0U2NyaXB0O1xufVxuIiwgImltcG9ydCB7IHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGF0KHBhdGgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvLyBpbXBvcnQgeyBSYXdTb3VyY2UgfSAgZnJvbSAnd2VicGFjay1zb3VyY2VzJztcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRGaWxlcyBmcm9tICcuLi9saWIvZ2V0RmlsZXMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB7XG4gIGFwcGx5KGNvbXBpbGVyKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkVNQkVSX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29tcGlsZXIuaG9va3MuZW1pdC50YXBBc3luYyhcbiAgICAgICdzY29wZWQtd2VicGFjay1wbHVnaW4nLFxuICAgICAgYXN5bmMgKGNvbXBpbGF0aW9uLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNzc0ZpbGVzID0gYXdhaXQgZ2V0RmlsZXMoXG4gICAgICAgICAgICBwYXRoLnJlc29sdmUoY29tcGlsZXIuY29udGV4dCwgJyoqLyouY3NzJyksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJld3JpdGUgdGhlIENTUyBmaWxlc1xuICAgICAgICAgIGNvbnN0IHJld3JpdHRlbkZpbGVzID0gW107XG5cbiAgICAgICAgICAvLyBjb25zdCByZXdyaXRlbkZpbGVzID0gY3NzRmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBjc3NGaWxlcykge1xuICAgICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoYC8ke3BhdGguYmFzZW5hbWUoY29tcGlsZXIuY29udGV4dCl9LmNzc2ApKSB7XG4gICAgICAgICAgICAgIC8vIGltcG9ydCBzY29wZWQuY3NzIGludG8gYXBwLmNzc1xuICAgICAgICAgICAgICBsZXQgYXBwQ3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGUsIGBAaW1wb3J0IFwic2NvcGVkLmNzc1wiO1xcbiR7YXBwQ3NzfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwYXRoLmJhc2VuYW1lKGNvbXBpbGVyLmNvbnRleHQpICsgJy5jc3MnLFxuICAgICAgICAgICAgICAgICd0ZXN0LXN1cHBvcnQuY3NzJyxcbiAgICAgICAgICAgICAgXS5zb21lKChmKSA9PiBmaWxlLmVuZHNXaXRoKGYpKSB8fFxuICAgICAgICAgICAgICBmaWxlLmluY2x1ZGVzKCcvdmVuZG9yLycpIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuanMnKSkpIHx8XG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuaGJzJykpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goZmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUpO1xuXG4gICAgICAgICAgICByZXdyaXR0ZW5GaWxlcy5wdXNoKHJld3JpdHRlbkNzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ29uY2F0ZW5hdGUgdGhlIHJld3JpdHRlbiBDU1MgZmlsZXNcbiAgICAgICAgICBsZXQgY29uY2F0ZW5hdGVkQ1NTID0gcmV3cml0dGVuRmlsZXMuam9pbignXFxuXFxuJyk7XG5cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY29uY2F0ZW5hdGVkIENTUyBpbiB0aGUgYXNzZXRzL3Njb3BlZC1jb21wb25lbnRzLmNzc1xuICAgICAgICAgIGNvbXBpbGF0aW9uLmFzc2V0c1snYXNzZXRzL3Njb3BlZC5jc3MnXSA9IHtcbiAgICAgICAgICAgIHNvdXJjZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLFxuICAgICAgICAgICAgc2l6ZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLmxlbmd0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZ2xvYlBhdGgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnbG9iKGdsb2JQYXRoLCAoZXJyLCBmaWxlcykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi4vbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyc7XG5pbXBvcnQgcmVwbGFjZUhic0luSnMgZnJvbSAnLi4vbGliL3JlcGxhY2VIYnNJbkpzLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4uL2xpYi9yZXdyaXRlSGJzLmpzJztcblxuZnVuY3Rpb24gaXNKc0ZpbGUoaWQpIHtcbiAgcmV0dXJuIGlkLmVuZHNXaXRoKCcuanMnKSB8fCBpZC5lbmRzV2l0aCgnLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzQ3NzRmlsZShpZCkge1xuICByZXR1cm4gaWQuZW5kc1dpdGgoJy5jc3MnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCkge1xuICBjb25zdCBjc3NQYXRoID0ganNQYXRoLnJlcGxhY2UoLyhcXC5oYnMpP1xcLigoanMpfCh0cykpJC8sICcuY3NzJyk7XG4gIGNvbnN0IGNzc0ZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShjc3NQYXRoKTtcblxuICBjb25zdCBjc3NFeGlzdHMgPSBhd2FpdCBmc0V4aXN0cyhjc3NQYXRoKTtcbiAgbGV0IGNzcztcblxuICBpZiAoY3NzRXhpc3RzKSB7XG4gICAgY3NzID0gYXdhaXQgcmVhZEZpbGUoY3NzUGF0aCwgJ3V0ZjgnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZSxcbiAgICAgIG1hcDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gYWRkIGNzcyBpbXBvcnQgZm9yIGpzIGFuZCBnanMgZmlsZXNcbiAgY29kZSA9IGBpbXBvcnQgJy4vJHtjc3NGaWxlTmFtZX0nO1xcblxcbiR7Y29kZX1gO1xuXG4gIC8vIHJld3JpdGUgaGJzIGluIGpzIGluIGNhc2UgaXQgaXMgZ2pzIGZpbGUgKGZvciBnanMgZmlsZXMgaGJzIGlzIGFscmVhZHkgaW4ganMgZmlsZSlcblxuICBjb25zdCByZXdyaXR0ZW5Db2RlID0gcmVwbGFjZUhic0luSnMoY29kZSwgKGhicykgPT4ge1xuICAgIGNvbnN0IHsgY2xhc3NlcywgdGFncyB9ID0gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcyk7XG4gICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChjc3NQYXRoKTtcbiAgICBjb25zdCByZXdyaXR0ZW4gPSByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGNvZGU6IHJld3JpdHRlbkNvZGUsXG4gICAgbWFwOiBudWxsLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1Dc3NGaWxlKGNvZGUsIGlkLCBsYXllck5hbWUsIGVtaXRGaWxlKSB7XG4gIGNvbnN0IGpzUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCAnLmdqcycpO1xuICBjb25zdCBndHNQYXRoID0gaWQucmVwbGFjZSgvXFwuY3NzJC8sICcuZ3RzJyk7XG4gIGNvbnN0IGhic1BhdGggPSBpZC5yZXBsYWNlKC9cXC5jc3MkLywgJy5oYnMnKTtcblxuICBjb25zdCBbanNFeGlzdHMsIGd0c0V4aXN0cywgaGJzRXhpc3RzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBmc0V4aXN0cyhqc1BhdGgpLFxuICAgIGZzRXhpc3RzKGd0c1BhdGgpLFxuICAgIGZzRXhpc3RzKGhic1BhdGgpLFxuICBdKTtcblxuICBpZiAoanNFeGlzdHMgfHwgaGJzRXhpc3RzIHx8IGd0c0V4aXN0cykge1xuICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goaWQpO1xuXG4gICAgY29kZSA9IHJld3JpdGVDc3MoY29kZSwgcG9zdGZpeCwgcGF0aC5iYXNlbmFtZShpZCksIGxheWVyTmFtZSk7XG4gIH1cblxuICBjb25zdCBlbWl0dGVkRmlsZU5hbWUgPSBpZC5yZXBsYWNlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnc3JjLycpLCAnJyk7XG5cbiAgZW1pdEZpbGUoe1xuICAgIHR5cGU6ICdhc3NldCcsXG4gICAgZmlsZU5hbWU6IGVtaXR0ZWRGaWxlTmFtZSxcbiAgICBzb3VyY2U6IGNvZGUsXG4gIH0pO1xuXG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVW5wbHVnaW4oXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGF5ZXJOYW1lXSB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGxhY2UgdGhlIGdlbmVyYXRlZCBjc3MuIERlZmF1bHRzIHRvIFwiY29tcG9uZW50c1wiXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnZW1iZXItc2NvcGVkLWNzcy11bnBsdWdpbicsXG5cbiAgICAgIGdlbmVyYXRlQnVuZGxlKGEsIGJ1bmRsZSkge1xuICAgICAgICBsZXQgY3NzRmlsZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBhc3NldCBpbiBidW5kbGUpIHtcbiAgICAgICAgICBjb25zdCBjc3NBc3NldCA9IGFzc2V0LnJlcGxhY2UoJ2pzJywgJ2NzcycpO1xuXG4gICAgICAgICAgaWYgKCFhc3NldC5lbmRzV2l0aCgnanMnKSB8fCAhYnVuZGxlW2Nzc0Fzc2V0XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICBjc3NGaWxlcy5wdXNoKGJ1bmRsZVtjc3NBc3NldF0uc291cmNlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBidW5kbGVbY3NzQXNzZXRdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBhZGQgaW1wb3J0IHRvIGpzIGZpbGVzXG4gICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGUgPVxuICAgICAgICAgICAgICBgaW1wb3J0ICcuLyR7cGF0aC5iYXNlbmFtZShhc3NldC5yZXBsYWNlKCcuanMnLCAnLmNzcycpKX0nO1xcbmAgK1xuICAgICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5lbWl0RmlsZSh7XG4gICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgZmlsZU5hbWU6ICdzY29wZWQuY3NzJyxcbiAgICAgICAgICAgIHNvdXJjZTogY3NzRmlsZXMuam9pbignXFxuJyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHRyYW5zZm9ybShjb2RlLCBqc1BhdGgpIHtcbiAgICAgICAgaWYgKGlzSnNGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDc3NGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtQ3NzRmlsZShcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICBqc1BhdGgsXG4gICAgICAgICAgICBvcHRpb25zPy5sYXllck5hbWUsXG4gICAgICAgICAgICB0aGlzLmVtaXRGaWxlLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbik7XG4iLCAiaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSB7XG4gIHBhcnNlcjoge1xuICAgIHBhcnNlKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhYmVsUGFyc2VyLnBhcnNlKHNvdXJjZSwge1xuICAgICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJyxcbiAgICAgICAgYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlOiB0cnVlLFxuICAgICAgICB0b2tlbnM6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHNjcmlwdCwgcmVwbGFjZUZ1bmN0aW9uKSB7XG4gIGNvbnN0IGFzdCA9IHJlY2FzdC5wYXJzZShzY3JpcHQsIHBhcnNlT3B0aW9ucyk7XG5cbiAgcmVjYXN0LnZpc2l0KGFzdCwge1xuICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24ocGF0aCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHBhdGgubm9kZTtcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnX19HTElNTUVSX1RFTVBMQVRFJyB8fFxuICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAncHJlY29tcGlsZVRlbXBsYXRlJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnVGVtcGxhdGVMaXRlcmFsJykge1xuICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5yYXcgPSByZXBsYWNlRnVuY3Rpb24oXG4gICAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS5xdWFzaXNbMF0udmFsdWUucmF3LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnIHx8XG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udHlwZSA9PT0gJ0xpdGVyYWwnXG4gICAgICAgICkge1xuICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlID0gcmVwbGFjZUZ1bmN0aW9uKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYXZlcnNlKHBhdGgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiByZWNhc3QucHJpbnQoYXN0KS5jb2RlO1xufVxuIiwgImltcG9ydCByZWNhc3QgZnJvbSAnZW1iZXItdGVtcGxhdGUtcmVjYXN0JztcblxuaW1wb3J0IHJlbmFtZUNsYXNzIGZyb20gJy4vcmVuYW1lQ2xhc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCkge1xuICBsZXQgYXN0ID0gcmVjYXN0LnBhcnNlKGhicyk7XG4gIGxldCBzdGFjayA9IFtdO1xuXG4gIHJlY2FzdC50cmF2ZXJzZShhc3QsIHtcbiAgICBBdHRyTm9kZShub2RlKSB7XG4gICAgICBpZiAobm9kZS5uYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICAgIGlmIChub2RlLnZhbHVlLnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgbm9kZS52YWx1ZS5jaGFycykge1xuICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKG5vZGUudmFsdWUuY2hhcnMsIHBvc3RmaXgsIGNsYXNzZXMpO1xuXG4gICAgICAgICAgbm9kZS52YWx1ZS5jaGFycyA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnZhbHVlLnR5cGUgPT09ICdDb25jYXRTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgZm9yIChsZXQgcGFydCBvZiBub2RlLnZhbHVlLnBhcnRzKSB7XG4gICAgICAgICAgICBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnICYmIHBhcnQuY2hhcnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3MocGFydC5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICAgICAgcGFydC5jaGFycyA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgIHJlY2FzdC50cmF2ZXJzZShwYXJ0LCB7XG4gICAgICAgICAgICAgICAgU3RyaW5nTGl0ZXJhbChub2RlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUgPSByZW5hbWVkQ2xhc3M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIEVsZW1lbnROb2RlKG5vZGUpIHtcbiAgICAgIGlmICh0YWdzLmhhcyhub2RlLnRhZykpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgY2xhc3MgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzXG4gICAgICAgIGNvbnN0IGNsYXNzQXR0ciA9IG5vZGUuYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09ICdjbGFzcycpO1xuXG4gICAgICAgIGlmIChjbGFzc0F0dHIpIHtcbiAgICAgICAgICBjbGFzc0F0dHIudmFsdWUuY2hhcnMgKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBwdXNoIGNsYXNzIGF0dHJpYnV0ZVxuICAgICAgICAgIG5vZGUuYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgcmVjYXN0LmJ1aWxkZXJzLmF0dHIoJ2NsYXNzJywgcmVjYXN0LmJ1aWxkZXJzLnRleHQocG9zdGZpeCkpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgQWxsOiB7XG4gICAgICBlbnRlcihub2RlKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobm9kZSk7XG4gICAgICB9LFxuICAgICAgZXhpdCgpIHtcbiAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBNdXN0YWNoZVN0YXRlbWVudChub2RlKSB7XG4gICAgICBsZXQgY3NzQ2xhc3M7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5vcmlnaW5hbCA9PT0gJ3Njb3BlZC1jbGFzcycgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUucGF0aD8ucGF0aD8ub3JpZ2luYWwgPT09ICdzY29wZWQtY2xhc3MnICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhdGgucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMudGV4dChyZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCkpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdBdHRyTm9kZScpIHtcbiAgICAgICAgICBwYXJlbnQucXVvdGVUeXBlID0gJ1wiJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgU3ViRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUucGF0aD8ub3JpZ2luYWwgPT09ICdzY29wZWQtY2xhc3MnICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMubGl0ZXJhbChcbiAgICAgICAgICAnU3RyaW5nTGl0ZXJhbCcsXG4gICAgICAgICAgcmVuYW1lQ2xhc3MoY3NzQ2xhc3MsIHBvc3RmaXgpLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICBsZXQgcmVzdWx0ID0gcmVjYXN0LnByaW50KGFzdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5hbWVDbGFzcyhcbiAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gIHBvc3RmaXg6IHN0cmluZyxcbiAgY2xhc3Nlc0luQ3NzPzogU2V0PHN0cmluZz4sXG4pIHtcbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pO1xuICBjb25zdCByZW5hbWVkQ2xhc3NlcyA9IGNsYXNzZXNcbiAgICAuZmlsdGVyKChjKSA9PiBjKVxuICAgIC5tYXAoKGMpID0+IGMudHJpbSgpKVxuICAgIC5tYXAoKGMpID0+IHtcbiAgICAgIGlmICghY2xhc3Nlc0luQ3NzIHx8IGNsYXNzZXNJbkNzcy5oYXMoYykpIHtcbiAgICAgICAgaWYgKGMuZW5kc1dpdGgocG9zdGZpeCkpIHJldHVybiBjO1xuXG4gICAgICAgIHJldHVybiBjICsgJ18nICsgcG9zdGZpeDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGM7XG4gICAgfSlcbiAgICAuam9pbignICcpO1xuXG4gIGNvbnN0IHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzID0gY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgY2xhc3NOYW1lLnRyaW1TdGFydCgpLnRyaW1FbmQoKSxcbiAgICByZW5hbWVkQ2xhc3NlcyxcbiAgKTtcblxuICByZXR1cm4gcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXM7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7QUFBQSxTQUFTLHNCQUFzQjtBQUUvQixJQUFPLDJCQUFRLGVBQWUsTUFBTTtBQUNsQyxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBc0JSO0FBQ0YsQ0FBQzs7O0FDM0JELE9BQU9BLFdBQVU7QUFFakIsU0FBUyxrQkFBQUMsdUJBQXNCOzs7QUNGL0IsT0FBTyxZQUFZO0FBQ25CLE9BQU8sVUFBVTtBQUVqQixPQUFPLFlBQVk7OztBQ0huQixPQUFPLFNBQVM7QUFFRCxTQUFSLHlCQUEwQyxjQUFzQjtBQUNyRSxTQUFPLE1BQU0sSUFBSSxZQUFZLEVBQUUsVUFBVSxHQUFHLENBQUM7QUFDL0M7OztBREdlLFNBQVIsNkJBQThDLGNBQWM7QUFNakUsUUFBTSxhQUFh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QSxZQUNOLFVBQVU7QUFBQSxZQUNWLFFBQVEsU0FBUyxLQUFLLElBQUk7QUFBQSxVQUM1QixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxNQUVBLFVBQVUsTUFBTSxRQUFRO0FBQ3RCLFlBQUksU0FBUyxNQUFNLEdBQUc7QUFDcEIsaUJBQU8sZ0JBQWdCLE1BQU0sTUFBTTtBQUFBLFFBQ3JDLFdBQVcsVUFBVSxNQUFNLEdBQUc7QUFDNUIsaUJBQU87QUFBQSxZQUNMO0FBQUEsWUFDQTtBQUFBLFlBQ0EsU0FBUztBQUFBLFlBQ1QsS0FBSztBQUFBLFVBQ1A7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBhdGgiLCAiY3JlYXRlVW5wbHVnaW4iLCAicGF0aCIsICJwYXRoIiwgInBhdGgiLCAiY3JlYXRlVW5wbHVnaW4iLCAicGF0aCIsICJyZWFkRmlsZSIsICJwYXRoIiwgInBvc3Rjc3MiLCAicGFyc2VyIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInBhdGgiLCAicmVhZEZpbGUiLCAicmVhZEZpbGUiLCAicGF0aCIsICJjcmVhdGVVbnBsdWdpbiIsICJiYWJlbFBhcnNlciIsICJyZWNhc3QiLCAicGFyc2VPcHRpb25zIiwgInBhdGgiLCAicmVjYXN0IiwgInJlY2FzdCIsICJub2RlIiwgInBhdGgiLCAicmVhZEZpbGUiLCAiY3JlYXRlVW5wbHVnaW4iXQp9Cg==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ember-scoped-css",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ember-addon"
|
|
@@ -40,8 +40,9 @@
|
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@babel/parser": "^7.23.
|
|
43
|
+
"@babel/parser": "^7.23.5",
|
|
44
44
|
"@embroider/addon-shim": "^1.8.6",
|
|
45
|
+
"acorn": "^8.11.2",
|
|
45
46
|
"blueimp-md5": "^2.19.0",
|
|
46
47
|
"broccoli-concat": "^4.2.5",
|
|
47
48
|
"broccoli-funnel": "^3.0.8",
|
|
@@ -49,7 +50,7 @@
|
|
|
49
50
|
"broccoli-persistent-filter": "^3.1.3",
|
|
50
51
|
"broccoli-stew": "^3.0.0",
|
|
51
52
|
"cheerio": "1.0.0-rc.12",
|
|
52
|
-
"ember-cli-babel": "^8.
|
|
53
|
+
"ember-cli-babel": "^8.2.0",
|
|
53
54
|
"ember-source": "^4.10.0",
|
|
54
55
|
"ember-template-recast": "^6.1.3",
|
|
55
56
|
"ember-template-tag": "^2.3.15",
|
|
@@ -57,12 +58,12 @@
|
|
|
57
58
|
"glob": "^8.1.0",
|
|
58
59
|
"postcss": "^8.4.21",
|
|
59
60
|
"postcss-selector-parser": "^6.0.11",
|
|
60
|
-
"recast": "^0.
|
|
61
|
+
"recast": "^0.23.4",
|
|
61
62
|
"rollup": "^2.67.0",
|
|
62
63
|
"unplugin": "^1.3.1"
|
|
63
64
|
},
|
|
64
65
|
"devDependencies": {
|
|
65
|
-
"@babel/eslint-parser": "^7.
|
|
66
|
+
"@babel/eslint-parser": "^7.23.3",
|
|
66
67
|
"@nullvoxpopuli/eslint-configs": "^3.2.2",
|
|
67
68
|
"@tsconfig/ember": "^3.0.1",
|
|
68
69
|
"@tsconfig/strictest": "^2.0.2",
|
|
@@ -2,7 +2,15 @@ import babelParser from '@babel/parser';
|
|
|
2
2
|
import recast from 'recast';
|
|
3
3
|
|
|
4
4
|
const parseOptions = {
|
|
5
|
-
parser:
|
|
5
|
+
parser: {
|
|
6
|
+
parse(source) {
|
|
7
|
+
return babelParser.parse(source, {
|
|
8
|
+
sourceType: 'module',
|
|
9
|
+
allowImportExportEverywhere: true,
|
|
10
|
+
tokens: true,
|
|
11
|
+
});
|
|
12
|
+
},
|
|
13
|
+
},
|
|
6
14
|
};
|
|
7
15
|
|
|
8
16
|
export default function (script, replaceFunction) {
|