@blinkk/root-password-protect 3.0.1 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,7 +11,7 @@ const packageJson = require(path.join(__dirname, '../package.json'));
11
11
 
12
12
  async function main(argv) {
13
13
  const cli = new CliRunner('root-password-protect', packageJson.version);
14
- await cli.run();
14
+ await cli.run(argv);
15
15
  }
16
16
 
17
17
  main(process.argv);
@@ -0,0 +1,6 @@
1
+ export declare class CliRunner {
2
+ private name;
3
+ private version;
4
+ constructor(name: string, version: string);
5
+ run(argv: string[]): Promise<void>;
6
+ }
@@ -0,0 +1 @@
1
+ export declare function generateHash(password: string): Promise<void>;
package/dist/cli.js CHANGED
@@ -71,4 +71,4 @@ var CliRunner = class {
71
71
  export {
72
72
  CliRunner
73
73
  };
74
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaS9jbGkudHMiLCAiLi4vc3JjL2NvcmUvcGFzc3dvcmQudHMiLCAiLi4vc3JjL2NsaS9nZW5lcmF0ZS1oYXNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0NvbW1hbmR9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge2JnR3JlZW4sIGJsYWNrfSBmcm9tICdrbGV1ci9jb2xvcnMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2h9IGZyb20gJy4vZ2VuZXJhdGUtaGFzaC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDbGlSdW5uZXIge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gIH1cblxuICBhc3luYyBydW4oYXJndjogc3RyaW5nW10pIHtcbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQodGhpcy5uYW1lKTtcbiAgICBwcm9ncmFtLnZlcnNpb24odGhpcy52ZXJzaW9uKTtcbiAgICBwcm9ncmFtLm9wdGlvbignLXEsIC0tcXVpZXQnLCAncXVpZXQnKTtcbiAgICBwcm9ncmFtLmhvb2soJ3ByZUFjdGlvbicsIChjbWQpID0+IHtcbiAgICAgIGlmICghY21kLm9wdHMoKS5xdWlldCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgXHVEODNFXHVERDU1ICR7YmdHcmVlbihibGFjayhgICR7dGhpcy5uYW1lfSBgKSl9IHYke3RoaXMudmVyc2lvbn1cXG5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2dlbmVyYXRlLWhhc2ggPHBhc3N3b3JkPicpXG4gICAgICAuZGVzY3JpcHRpb24oJ2dlbmVyYXRlcyBhIGhhc2gvc2FsdCBwYWlyIGZyb20gYSBwbGFpbi10ZXh0IHBhc3N3b3JkJylcbiAgICAgIC5hY3Rpb24oZ2VuZXJhdGVIYXNoKTtcbiAgICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMoYXJndik7XG4gIH1cbn1cbiIsICJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IFBBU1NXT1JEX0lURVJBVElPTlMgPSAxMDAwMDtcbmNvbnN0IFBBU1NXT1JEX0hBU0hfTEVOR1RIID0gNjQ7XG5jb25zdCBQQVNTV09SRF9ESUdFU1QgPSAnc2hhMjU2JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc2hQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7aGFzaDogc3RyaW5nOyBzYWx0OiBzdHJpbmd9PiB7XG4gIGNvbnN0IHNhbHQgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgaGFzaCA9IGF3YWl0IGdlbmVyYXRlSGFzaChwYXNzd29yZCwgc2FsdCk7XG4gIHJldHVybiB7aGFzaCwgc2FsdH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgaGFzaDogc3RyaW5nLFxuICBzYWx0OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBnZW5lcmF0ZWRIYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIGhhc2ggPT09IGdlbmVyYXRlZEhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2gocGFzc3dvcmQ6IHN0cmluZywgc2FsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjcnlwdG8ucGJrZGYyKFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBzYWx0LFxuICAgICAgUEFTU1dPUkRfSVRFUkFUSU9OUyxcbiAgICAgIFBBU1NXT1JEX0hBU0hfTEVOR1RILFxuICAgICAgUEFTU1dPUkRfRElHRVNULFxuICAgICAgKGVyciwgZGVyaXZlZEtleSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigncGFzc3dvcmQgaGFzaGluZyBmYWlsZWQnKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2ggPSBkZXJpdmVkS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgcmVzb2x2ZShoYXNoKTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQge2hhc2hQYXNzd29yZH0gZnJvbSAnLi4vY29yZS9wYXNzd29yZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUhhc2gocGFzc3dvcmQ6IHN0cmluZykge1xuICBjb25zdCB7aGFzaCwgc2FsdH0gPSBhd2FpdCBoYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuICBjb25zb2xlLmxvZygnLy8gR2VuZXJhdGVkIGJ5OiBgcm9vdC1wYXNzd29yZC1wcm90ZWN0IGdlbmVyYXRlLWhhc2ggXCIuLi5cImAuJyk7XG4gIGNvbnNvbGUubG9nKCdwYXNzd29yZDogeycpO1xuICBjb25zb2xlLmxvZyhgICBoYXNoOiAnJHtoYXNofScsYCk7XG4gIGNvbnNvbGUubG9nKGAgIHNhbHQ6ICcke3NhbHR9JyxgKTtcbiAgY29uc29sZS5sb2coJ30nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFRLGVBQWM7QUFDdEIsU0FBUSxTQUFTLGFBQVk7OztBQ0Q3QixPQUFPLFlBQVk7QUFFbkIsSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxrQkFBa0I7QUFFeEIsZUFBc0IsYUFDcEIsVUFDdUM7QUFDdkMsUUFBTSxPQUFPLE9BQU8sWUFBWSxFQUFFLEVBQUUsU0FBUyxLQUFLO0FBQ2xELFFBQU0sT0FBTyxNQUFNLGFBQWEsVUFBVSxJQUFJO0FBQzlDLFNBQU8sRUFBQyxNQUFNLEtBQUk7QUFDcEI7QUFXTyxTQUFTLGFBQWEsVUFBa0IsTUFBK0I7QUFDNUUsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxDQUFDLEtBQUssZUFBZTtBQUNuQixZQUFJLEtBQUs7QUFDUCxrQkFBUSxNQUFNLHlCQUF5QjtBQUN2QyxrQkFBUSxNQUFNLEdBQUc7QUFDakIsaUJBQU8sR0FBRztBQUNWO0FBQUEsUUFDRjtBQUNBLGNBQU0sT0FBTyxXQUFXLFNBQVMsS0FBSztBQUN0QyxnQkFBUSxJQUFJO0FBQUEsTUFDZDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDs7O0FDekNBLGVBQXNCQSxjQUFhLFVBQWtCO0FBQ25ELFFBQU0sRUFBQyxNQUFNLEtBQUksSUFBSSxNQUFNLGFBQWEsUUFBUTtBQUNoRCxVQUFRLElBQUksK0RBQStEO0FBQzNFLFVBQVEsSUFBSSxhQUFhO0FBQ3pCLFVBQVEsSUFBSSxZQUFZLElBQUksSUFBSTtBQUNoQyxVQUFRLElBQUksWUFBWSxJQUFJLElBQUk7QUFDaEMsVUFBUSxJQUFJLEdBQUc7QUFDakI7OztBRkxPLElBQU0sWUFBTixNQUFnQjtBQUFBLEVBQ2I7QUFBQSxFQUNBO0FBQUEsRUFFUixZQUFZLE1BQWMsU0FBaUI7QUFDekMsU0FBSyxPQUFPO0FBQ1osU0FBSyxVQUFVO0FBQUEsRUFDakI7QUFBQSxFQUVBLE1BQU0sSUFBSSxNQUFnQjtBQUN4QixVQUFNLFVBQVUsSUFBSSxRQUFRLEtBQUssSUFBSTtBQUNyQyxZQUFRLFFBQVEsS0FBSyxPQUFPO0FBQzVCLFlBQVEsT0FBTyxlQUFlLE9BQU87QUFDckMsWUFBUSxLQUFLLGFBQWEsQ0FBQyxRQUFRO0FBQ2pDLFVBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxPQUFPO0FBQ3JCLGdCQUFRO0FBQUEsVUFDTixhQUFNLFFBQVEsTUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTztBQUFBO0FBQUEsUUFDekQ7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQ0QsWUFDRyxRQUFRLDBCQUEwQixFQUNsQyxZQUFZLHVEQUF1RCxFQUNuRSxPQUFPQyxhQUFZO0FBQ3RCLFVBQU0sUUFBUSxXQUFXLElBQUk7QUFBQSxFQUMvQjtBQUNGOyIsCiAgIm5hbWVzIjogWyJnZW5lcmF0ZUhhc2giLCAiZ2VuZXJhdGVIYXNoIl0KfQo=
74
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaS9jbGkudHMiLCAiLi4vc3JjL2NvcmUvcGFzc3dvcmQudHMiLCAiLi4vc3JjL2NsaS9nZW5lcmF0ZS1oYXNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0NvbW1hbmR9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge2JnR3JlZW4sIGJsYWNrfSBmcm9tICdrbGV1ci9jb2xvcnMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2h9IGZyb20gJy4vZ2VuZXJhdGUtaGFzaC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDbGlSdW5uZXIge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gIH1cblxuICBhc3luYyBydW4oYXJndjogc3RyaW5nW10pIHtcbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQodGhpcy5uYW1lKTtcbiAgICBwcm9ncmFtLnZlcnNpb24odGhpcy52ZXJzaW9uKTtcbiAgICBwcm9ncmFtLm9wdGlvbignLXEsIC0tcXVpZXQnLCAncXVpZXQnKTtcbiAgICBwcm9ncmFtLmhvb2soJ3ByZUFjdGlvbicsIChjbWQpID0+IHtcbiAgICAgIGlmICghY21kLm9wdHMoKS5xdWlldCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgXHVEODNFXHVERDU1ICR7YmdHcmVlbihibGFjayhgICR7dGhpcy5uYW1lfSBgKSl9IHYke3RoaXMudmVyc2lvbn1cXG5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2dlbmVyYXRlLWhhc2ggPHBhc3N3b3JkPicpXG4gICAgICAuZGVzY3JpcHRpb24oJ2dlbmVyYXRlcyBhIGhhc2gvc2FsdCBwYWlyIGZyb20gYSBwbGFpbi10ZXh0IHBhc3N3b3JkJylcbiAgICAgIC5hY3Rpb24oZ2VuZXJhdGVIYXNoKTtcbiAgICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMoYXJndik7XG4gIH1cbn1cbiIsICJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IFBBU1NXT1JEX0lURVJBVElPTlMgPSAxMDAwMDtcbmNvbnN0IFBBU1NXT1JEX0hBU0hfTEVOR1RIID0gNjQ7XG5jb25zdCBQQVNTV09SRF9ESUdFU1QgPSAnc2hhMjU2JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc2hQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7aGFzaDogc3RyaW5nOyBzYWx0OiBzdHJpbmd9PiB7XG4gIGNvbnN0IHNhbHQgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgaGFzaCA9IGF3YWl0IGdlbmVyYXRlSGFzaChwYXNzd29yZCwgc2FsdCk7XG4gIHJldHVybiB7aGFzaCwgc2FsdH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgaGFzaDogc3RyaW5nLFxuICBzYWx0OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBnZW5lcmF0ZWRIYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIGhhc2ggPT09IGdlbmVyYXRlZEhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2gocGFzc3dvcmQ6IHN0cmluZywgc2FsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjcnlwdG8ucGJrZGYyKFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBzYWx0LFxuICAgICAgUEFTU1dPUkRfSVRFUkFUSU9OUyxcbiAgICAgIFBBU1NXT1JEX0hBU0hfTEVOR1RILFxuICAgICAgUEFTU1dPUkRfRElHRVNULFxuICAgICAgKGVyciwgZGVyaXZlZEtleSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigncGFzc3dvcmQgaGFzaGluZyBmYWlsZWQnKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2ggPSBkZXJpdmVkS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgcmVzb2x2ZShoYXNoKTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQge2hhc2hQYXNzd29yZH0gZnJvbSAnLi4vY29yZS9wYXNzd29yZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUhhc2gocGFzc3dvcmQ6IHN0cmluZykge1xuICBjb25zdCB7aGFzaCwgc2FsdH0gPSBhd2FpdCBoYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuICBjb25zb2xlLmxvZygnLy8gR2VuZXJhdGVkIGJ5OiBgcm9vdC1wYXNzd29yZC1wcm90ZWN0IGdlbmVyYXRlLWhhc2ggXCIuLi5cImAuJyk7XG4gIGNvbnNvbGUubG9nKCdwYXNzd29yZDogeycpO1xuICBjb25zb2xlLmxvZyhgICBoYXNoOiAnJHtoYXNofScsYCk7XG4gIGNvbnNvbGUubG9nKGAgIHNhbHQ6ICcke3NhbHR9JyxgKTtcbiAgY29uc29sZS5sb2coJ30nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFRLGVBQWM7QUFDdEIsU0FBUSxTQUFTLGFBQVk7OztBQ0Q3QixPQUFPLFlBQVk7QUFFbkIsSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxrQkFBa0I7QUFFeEIsZUFBc0IsYUFDcEIsVUFDdUM7QUFDdkMsUUFBTSxPQUFPLE9BQU8sWUFBWSxFQUFFLEVBQUUsU0FBUyxLQUFLO0FBQ2xELFFBQU0sT0FBTyxNQUFNLGFBQWEsVUFBVSxJQUFJO0FBQzlDLFNBQU8sRUFBQyxNQUFNLEtBQUk7QUFDcEI7QUFXTyxTQUFTLGFBQWEsVUFBa0IsTUFBK0I7QUFDNUUsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxDQUFDLEtBQUssZUFBZTtBQUNuQixZQUFJLEtBQUs7QUFDUCxrQkFBUSxNQUFNLHlCQUF5QjtBQUN2QyxrQkFBUSxNQUFNLEdBQUc7QUFDakIsaUJBQU8sR0FBRztBQUNWO0FBQUEsUUFDRjtBQUNBLGNBQU0sT0FBTyxXQUFXLFNBQVMsS0FBSztBQUN0QyxnQkFBUSxJQUFJO0FBQUEsTUFDZDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDs7O0FDekNBLGVBQXNCQSxjQUFhLFVBQWtCO0FBQ25ELFFBQU0sRUFBQyxNQUFNLEtBQUksSUFBSSxNQUFNLGFBQWEsUUFBUTtBQUNoRCxVQUFRLElBQUksK0RBQStEO0FBQzNFLFVBQVEsSUFBSSxhQUFhO0FBQ3pCLFVBQVEsSUFBSSxZQUFZLElBQUksSUFBSTtBQUNoQyxVQUFRLElBQUksWUFBWSxJQUFJLElBQUk7QUFDaEMsVUFBUSxJQUFJLEdBQUc7QUFDakI7OztBRkxPLElBQU0sWUFBTixNQUFnQjtBQUFBLEVBQ2I7QUFBQSxFQUNBO0FBQUEsRUFFUixZQUFZLE1BQWMsU0FBaUI7QUFDekMsU0FBSyxPQUFPO0FBQ1osU0FBSyxVQUFVO0FBQUEsRUFDakI7QUFBQSxFQUVBLE1BQU0sSUFBSSxNQUFnQjtBQUN4QixVQUFNLFVBQVUsSUFBSSxRQUFRLEtBQUssSUFBSTtBQUNyQyxZQUFRLFFBQVEsS0FBSyxPQUFPO0FBQzVCLFlBQVEsT0FBTyxlQUFlLE9BQU87QUFDckMsWUFBUSxLQUFLLGFBQWEsQ0FBQyxRQUFRO0FBQ2pDLFVBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxPQUFPO0FBQ3JCLGdCQUFRO0FBQUEsVUFDTixhQUFNLFFBQVEsTUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTztBQUFBO0FBQUEsUUFDekQ7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQ0QsWUFDRyxRQUFRLDBCQUEwQixFQUNsQyxZQUFZLHVEQUF1RCxFQUNuRSxPQUFPQyxhQUFZO0FBQ3RCLFVBQU0sUUFBUSxXQUFXLElBQUk7QUFBQSxFQUMvQjtBQUNGOyIsCiAgIm5hbWVzIjogWyJnZW5lcmF0ZUhhc2giLCAiZ2VuZXJhdGVIYXNoIl0KfQo=
@@ -0,0 +1 @@
1
+ export declare const CSS = "\n.signin {\n font-family: 'Inter', system-ui, sans-serif;\n text-align: center;\n padding: 48px 20px;\n color: #3c4043;\n}\n\n.signin__headline {\n margin-bottom: 40px;\n}\n\n.signin__headline__icon {\n margin-bottom: 20px;\n}\n\n.signin__headline__icon svg {\n width: 72px;\n height: 72px;\n}\n\n.signin__headline__title {\n font-size: 36px;\n line-height: 1.3;\n font-weight: 500;\n margin-bottom: 20px;\n}\n\n.signin__headline__body {\n font-size: 18px;\n line-height: 1.5;\n font-weight: 500;\n}\n\n.signin__form {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n.signin__form__password {\n box-sizing: border-box;\n border: 1px solid #dadce0;\n border-radius: 4px;\n height: 40px;\n font-family: inherit;\n font-size: 14px;\n line-height: 1;\n letter-spacing: .25px;\n padding: 0 12px;\n min-width: 250px;\n transition: all 0.218s ease;\n}\n\n.signin__form__password:focus {\n border-color: #d2e3fc;\n background-color: rgba(66, 133, 244, 0.04);\n}\n\n.signin__button {\n align-items: center;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n display: inline-flex;\n align-items: center;\n text-align: center;\n gap: 12px;\n padding: 8px 11px;\n background: white;\n border: 1px solid #dadce0;\n border-radius: 4px;\n cursor: pointer;\n font-family: inherit;\n padding: 0 12px;\n height: 40px;\n box-sizing: border-box;\n transition: all 0.218s ease;\n}\n\n.signin__button:hover {\n border-color: #d2e3fc;\n background-color: rgba(66, 133, 244, 0.04);\n}\n\n.signin__button__icon {\n width: 18px;\n height: 18px;\n background-color: white;\n}\n\n.signin__button__label {\n font-size: 14px;\n line-height: 1;\n letter-spacing: .25px;\n font-weight: 500;\n color: #3c4043;\n}\n\n.signin__error {\n color: red;\n font-weight: bold;\n text-align: center;\n max-width: 60ch;\n margin: 20px auto 0;\n}\n";
@@ -0,0 +1,5 @@
1
+ export interface PasswordPageProps {
2
+ nonce: string;
3
+ error?: string;
4
+ }
5
+ export declare function PasswordPage(props: PasswordPageProps): import("preact").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './password.js';
@@ -0,0 +1,3 @@
1
+ import { Response } from '@blinkk/root';
2
+ export declare function generateNonce(): string;
3
+ export declare function setSecurityHeaders(res: Response, nonce: string): void;
@@ -0,0 +1,6 @@
1
+ export declare function hashPassword(password: string): Promise<{
2
+ hash: string;
3
+ salt: string;
4
+ }>;
5
+ export declare function verifyPassword(password: string, hash: string, salt: string): Promise<boolean>;
6
+ export declare function generateHash(password: string, salt: string): Promise<string>;
package/dist/core.js CHANGED
@@ -38,4 +38,4 @@ export {
38
38
  hashPassword,
39
39
  verifyPassword
40
40
  };
41
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvcmUvcGFzc3dvcmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgUEFTU1dPUkRfSVRFUkFUSU9OUyA9IDEwMDAwO1xuY29uc3QgUEFTU1dPUkRfSEFTSF9MRU5HVEggPSA2NDtcbmNvbnN0IFBBU1NXT1JEX0RJR0VTVCA9ICdzaGEyNTYnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFzaFBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nXG4pOiBQcm9taXNlPHtoYXNoOiBzdHJpbmc7IHNhbHQ6IHN0cmluZ30+IHtcbiAgY29uc3Qgc2FsdCA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBoYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIHtoYXNoLCBzYWx0fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBoYXNoOiBzdHJpbmcsXG4gIHNhbHQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGdlbmVyYXRlZEhhc2ggPSBhd2FpdCBnZW5lcmF0ZUhhc2gocGFzc3dvcmQsIHNhbHQpO1xuICByZXR1cm4gaGFzaCA9PT0gZ2VuZXJhdGVkSGFzaDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaChwYXNzd29yZDogc3RyaW5nLCBzYWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNyeXB0by5wYmtkZjIoXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHNhbHQsXG4gICAgICBQQVNTV09SRF9JVEVSQVRJT05TLFxuICAgICAgUEFTU1dPUkRfSEFTSF9MRU5HVEgsXG4gICAgICBQQVNTV09SRF9ESUdFU1QsXG4gICAgICAoZXJyLCBkZXJpdmVkS2V5KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdwYXNzd29yZCBoYXNoaW5nIGZhaWxlZCcpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzaCA9IGRlcml2ZWRLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICByZXNvbHZlKGhhc2gpO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sWUFBWTtBQUVuQixJQUFNLHNCQUFzQjtBQUM1QixJQUFNLHVCQUF1QjtBQUM3QixJQUFNLGtCQUFrQjtBQUV4QixlQUFzQixhQUNwQixVQUN1QztBQUN2QyxRQUFNLE9BQU8sT0FBTyxZQUFZLEVBQUUsRUFBRSxTQUFTLEtBQUs7QUFDbEQsUUFBTSxPQUFPLE1BQU0sYUFBYSxVQUFVLElBQUk7QUFDOUMsU0FBTyxFQUFDLE1BQU0sS0FBSTtBQUNwQjtBQUVBLGVBQXNCLGVBQ3BCLFVBQ0EsTUFDQSxNQUNrQjtBQUNsQixRQUFNLGdCQUFnQixNQUFNLGFBQWEsVUFBVSxJQUFJO0FBQ3ZELFNBQU8sU0FBUztBQUNsQjtBQUVPLFNBQVMsYUFBYSxVQUFrQixNQUErQjtBQUM1RSxTQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN0QyxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLENBQUMsS0FBSyxlQUFlO0FBQ25CLFlBQUksS0FBSztBQUNQLGtCQUFRLE1BQU0seUJBQXlCO0FBQ3ZDLGtCQUFRLE1BQU0sR0FBRztBQUNqQixpQkFBTyxHQUFHO0FBQ1Y7QUFBQSxRQUNGO0FBQ0EsY0FBTSxPQUFPLFdBQVcsU0FBUyxLQUFLO0FBQ3RDLGdCQUFRLElBQUk7QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
41
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvcmUvcGFzc3dvcmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgUEFTU1dPUkRfSVRFUkFUSU9OUyA9IDEwMDAwO1xuY29uc3QgUEFTU1dPUkRfSEFTSF9MRU5HVEggPSA2NDtcbmNvbnN0IFBBU1NXT1JEX0RJR0VTVCA9ICdzaGEyNTYnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFzaFBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nXG4pOiBQcm9taXNlPHtoYXNoOiBzdHJpbmc7IHNhbHQ6IHN0cmluZ30+IHtcbiAgY29uc3Qgc2FsdCA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBoYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIHtoYXNoLCBzYWx0fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBoYXNoOiBzdHJpbmcsXG4gIHNhbHQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGdlbmVyYXRlZEhhc2ggPSBhd2FpdCBnZW5lcmF0ZUhhc2gocGFzc3dvcmQsIHNhbHQpO1xuICByZXR1cm4gaGFzaCA9PT0gZ2VuZXJhdGVkSGFzaDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaChwYXNzd29yZDogc3RyaW5nLCBzYWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNyeXB0by5wYmtkZjIoXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHNhbHQsXG4gICAgICBQQVNTV09SRF9JVEVSQVRJT05TLFxuICAgICAgUEFTU1dPUkRfSEFTSF9MRU5HVEgsXG4gICAgICBQQVNTV09SRF9ESUdFU1QsXG4gICAgICAoZXJyLCBkZXJpdmVkS2V5KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdwYXNzd29yZCBoYXNoaW5nIGZhaWxlZCcpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzaCA9IGRlcml2ZWRLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICByZXNvbHZlKGhhc2gpO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sWUFBWTtBQUVuQixJQUFNLHNCQUFzQjtBQUM1QixJQUFNLHVCQUF1QjtBQUM3QixJQUFNLGtCQUFrQjtBQUV4QixlQUFzQixhQUNwQixVQUN1QztBQUN2QyxRQUFNLE9BQU8sT0FBTyxZQUFZLEVBQUUsRUFBRSxTQUFTLEtBQUs7QUFDbEQsUUFBTSxPQUFPLE1BQU0sYUFBYSxVQUFVLElBQUk7QUFDOUMsU0FBTyxFQUFDLE1BQU0sS0FBSTtBQUNwQjtBQUVBLGVBQXNCLGVBQ3BCLFVBQ0EsTUFDQSxNQUNrQjtBQUNsQixRQUFNLGdCQUFnQixNQUFNLGFBQWEsVUFBVSxJQUFJO0FBQ3ZELFNBQU8sU0FBUztBQUNsQjtBQUVPLFNBQVMsYUFBYSxVQUFrQixNQUErQjtBQUM1RSxTQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN0QyxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLENBQUMsS0FBSyxlQUFlO0FBQ25CLFlBQUksS0FBSztBQUNQLGtCQUFRLE1BQU0seUJBQXlCO0FBQ3ZDLGtCQUFRLE1BQU0sR0FBRztBQUNqQixpQkFBTyxHQUFHO0FBQ1Y7QUFBQSxRQUNGO0FBQ0EsY0FBTSxPQUFPLFdBQVcsU0FBUyxLQUFLO0FBQ3RDLGdCQUFRLElBQUk7QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,11 +1,10 @@
1
- import { Plugin, Request, Response } from '@blinkk/root';
2
-
3
- declare enum PasswordProtectError {
1
+ import { Request, Response, Plugin } from '@blinkk/root';
2
+ export declare enum PasswordProtectError {
4
3
  UNKNOWN = "UNKNOWN",
5
4
  PASSWORD_REQUIRED = "PASSWORD_REQUIRED",
6
5
  PASSWORD_INVALID = "PASSWORD_INVALID"
7
6
  }
8
- interface PasswordProtectedRoute {
7
+ export interface PasswordProtectedRoute {
9
8
  /**
10
9
  * URL glob pattern to match (regex not supported yet).
11
10
  */
@@ -33,15 +32,13 @@ interface PasswordProtectedRoute {
33
32
  salt: string;
34
33
  };
35
34
  }
36
- interface PasswordProtectPluginOptions {
35
+ export interface PasswordProtectPluginOptions {
37
36
  protectedRoutes: PasswordProtectedRoute[];
38
37
  }
39
- declare function passwordProtectPlugin(options: PasswordProtectPluginOptions): Plugin;
38
+ export declare function passwordProtectPlugin(options: PasswordProtectPluginOptions): Plugin;
40
39
  /**
41
40
  * Renders the login page to a response.
42
41
  */
43
- declare function renderPasswordPage(req: Request, res: Response, options?: {
42
+ export declare function renderPasswordPage(req: Request, res: Response, options?: {
44
43
  error?: PasswordProtectError;
45
44
  }): Promise<void>;
46
-
47
- export { PasswordProtectError, type PasswordProtectPluginOptions, type PasswordProtectedRoute, passwordProtectPlugin, renderPasswordPage };
package/dist/plugin.js CHANGED
@@ -190,7 +190,7 @@ function ShieldIcon() {
190
190
  }
191
191
 
192
192
  // src/core/csp.ts
193
- import crypto from "crypto";
193
+ import crypto from "node:crypto";
194
194
  function generateNonce() {
195
195
  return crypto.randomBytes(16).toString("base64");
196
196
  }
@@ -374,4 +374,4 @@ export {
374
374
  passwordProtectPlugin,
375
375
  renderPasswordPage
376
376
  };
377
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3BsdWdpbi9wbHVnaW4udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkUGFnZS9QYXNzd29yZFBhZ2UuY3NzLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkUGFnZS9QYXNzd29yZFBhZ2UudHN4IiwgIi4uL3NyYy9jb3JlL2NzcC50cyIsICIuLi9zcmMvY29yZS9wYXNzd29yZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uLCBQbHVnaW4sIFNlcnZlcn0gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCB7cmVuZGVySnN4VG9TdHJpbmd9IGZyb20gJ0BibGlua2svcm9vdC9qc3gnO1xuaW1wb3J0IGJvZHlQYXJzZXIgZnJvbSAnYm9keS1wYXJzZXInO1xuaW1wb3J0IG1pY3JvbWF0Y2ggZnJvbSAnbWljcm9tYXRjaCc7XG5pbXBvcnQge1Bhc3N3b3JkUGFnZX0gZnJvbSAnLi4vY29tcG9uZW50cy9QYXNzd29yZFBhZ2UvUGFzc3dvcmRQYWdlLmpzJztcbmltcG9ydCB7Z2VuZXJhdGVOb25jZSwgc2V0U2VjdXJpdHlIZWFkZXJzfSBmcm9tICcuLi9jb3JlL2NzcC5qcyc7XG5pbXBvcnQge2hhc2hQYXNzd29yZCwgdmVyaWZ5UGFzc3dvcmR9IGZyb20gJy4uL2NvcmUvcGFzc3dvcmQuanMnO1xuXG5jb25zdCBTRVNTSU9OX0NPT0tJRV9IQVNIID0gJ3Bhc3N3b3JkX3Byb3RlY3QuaGFzaCc7XG5jb25zdCBTRVNTSU9OX0NPT0tJRV9TQUxUID0gJ3Bhc3N3b3JkX3Byb3RlY3Quc2FsdCc7XG5cbmV4cG9ydCBlbnVtIFBhc3N3b3JkUHJvdGVjdEVycm9yIHtcbiAgVU5LTk9XTiA9ICdVTktOT1dOJyxcbiAgUEFTU1dPUkRfUkVRVUlSRUQgPSAnUEFTU1dPUkRfUkVRVUlSRUQnLFxuICBQQVNTV09SRF9JTlZBTElEID0gJ1BBU1NXT1JEX0lOVkFMSUQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUHJvdGVjdGVkUm91dGUge1xuICAvKipcbiAgICogVVJMIGdsb2IgcGF0dGVybiB0byBtYXRjaCAocmVnZXggbm90IHN1cHBvcnRlZCB5ZXQpLlxuICAgKi9cbiAgc291cmNlOiBzdHJpbmc7XG5cbiAgcGFzc3dvcmQ6IHtcbiAgICAvKipcbiAgICAgKiBBIGhhc2ggb2YgdGhlIHBhc3N3b3JkLiBOb3RlOiBhIHBsYWluLXRleHQgcGFzc3dvcmQgc2hvdWxkIG5ldmVyIGJlXG4gICAgICogc3RvcmVkIGluIGNvZGUuIENvbnNpZGVyIHN0b3JpbmcgdGhpcyB2YWx1ZSBpbiBhIGAuZW52YCBmaWxlIGZvciBleHRyYVxuICAgICAqIHNlY3VyaXR5LlxuICAgICAqXG4gICAgICogR2VuZXJhdGUgdGhpcyBieSBydW5uaW5nOlxuICAgICAqIGBgYFxuICAgICAqIHJvb3QtcGFzc3dvcmQtcHJvdGVjdCBnZW5lcmF0ZS1oYXNoIFwiTVlfUEFTU1dPUkRcIlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICBoYXNoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHJhbmRvbSBzdHJpbmcgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcGFzc3dvcmQgaGFzaC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlIHRoaXMgYnkgcnVubmluZzpcbiAgICAgKiBgYGBcbiAgICAgKiByb290LXBhc3N3b3JkLXByb3RlY3QgZ2VuZXJhdGUtaGFzaCBcIk1ZX1BBU1NXT1JEXCJcbiAgICAgKiBgYGBgXG4gICAgICovXG4gICAgc2FsdDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUHJvdGVjdFBsdWdpbk9wdGlvbnMge1xuICBwcm90ZWN0ZWRSb3V0ZXM6IFBhc3N3b3JkUHJvdGVjdGVkUm91dGVbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhc3N3b3JkUHJvdGVjdFBsdWdpbihcbiAgb3B0aW9uczogUGFzc3dvcmRQcm90ZWN0UGx1Z2luT3B0aW9uc1xuKTogUGx1Z2luIHtcbiAgY29uc3QgcHJvdGVjdGVkUm91dGVzVXNlckNvbmZpZyA9IG9wdGlvbnMucHJvdGVjdGVkUm91dGVzIHx8IFtdO1xuICBjb25zdCBwcm90ZWN0ZWRSb3V0ZXMgPSBwcm90ZWN0ZWRSb3V0ZXNVc2VyQ29uZmlnLmZpbHRlcigocHJvdGVjdGVkUm91dGUpID0+IHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHByb3RlY3RlZFJvdXRlLnNvdXJjZSAmJlxuICAgICAgICBwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZCAmJlxuICAgICAgICBwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5oYXNoICYmXG4gICAgICAgIHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkLnNhbHRcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3QgcGFzc3dvcmQtcHJvdGVjdGVkIHJvdXRlIHRoYXQgbWF0Y2hlcy5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFByb3RlY3RlZFJvdXRlQ29uZmlnKFxuICAgIHJlcTogUmVxdWVzdFxuICApOiBQYXNzd29yZFByb3RlY3RlZFJvdXRlIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBwcm90ZWN0ZWRSb3V0ZSBvZiBwcm90ZWN0ZWRSb3V0ZXMpIHtcbiAgICAgIGlmIChtaWNyb21hdGNoLmlzTWF0Y2gocmVxLnBhdGgsIHByb3RlY3RlZFJvdXRlLnNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHByb3RlY3RlZFJvdXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3Jvb3QtcGFzc3dvcmQtcHJvdGVjdCcsXG4gICAgY29uZmlndXJlU2VydmVyOiAoc2VydmVyOiBTZXJ2ZXIpID0+IHtcbiAgICAgIGlmIChwcm90ZWN0ZWRSb3V0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlcnZlci51c2UoYm9keVBhcnNlci51cmxlbmNvZGVkKHtleHRlbmRlZDogdHJ1ZX0pKTtcbiAgICAgIHNlcnZlci51c2UoYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3RlY3RlZFJvdXRlID0gZ2V0UHJvdGVjdGVkUm91dGVDb25maWcocmVxKTtcbiAgICAgICAgaWYgKHByb3RlY3RlZFJvdXRlKSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlUHJvdGVjdGVkUm91dGUocHJvdGVjdGVkUm91dGUsIHJlcSwgcmVzLCBuZXh0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUHJvdGVjdGVkUm91dGUoXG4gIHByb3RlY3RlZFJvdXRlOiBQYXNzd29yZFByb3RlY3RlZFJvdXRlLFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIG5leHQ6IE5leHRGdW5jdGlvblxuKSB7XG4gIGlmIChyZXEubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAvLyBWZXJpZnkgcGFzc3dvcmQgYW5kIGlmIHZhbGlkIHNldCBhIHNlc3Npb24gY29va2llLlxuICAgIGlmIChcbiAgICAgIHJlcS5nZXQoJ2NvbnRlbnQtdHlwZScpICE9PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB8fFxuICAgICAgIXJlcS5ib2R5IHx8XG4gICAgICAhcmVxLmJvZHkucGFzc3dvcmRcbiAgICApIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKTtcbiAgICAgIHJldHVybiByZW5kZXJQYXNzd29yZFBhZ2UocmVxLCByZXMsIHtcbiAgICAgICAgZXJyb3I6IFBhc3N3b3JkUHJvdGVjdEVycm9yLlBBU1NXT1JEX1JFUVVJUkVELFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc3dvcmQgPSByZXEuYm9keS5wYXNzd29yZCBhcyBzdHJpbmc7XG4gICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHZlcmlmeVBhc3N3b3JkKFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5oYXNoLFxuICAgICAgcHJvdGVjdGVkUm91dGUucGFzc3dvcmQuc2FsdFxuICAgICk7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gcmVuZGVyUGFzc3dvcmRQYWdlKHJlcSwgcmVzLCB7XG4gICAgICAgIGVycm9yOiBQYXNzd29yZFByb3RlY3RFcnJvci5QQVNTV09SRF9JTlZBTElELFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFNldCBhIHNlc3Npb24gY29va2llIHZhbHVlIHRvIHZlcmlmeSBzdWJzZXF1ZW50IHJlcXVlc3RzLlxuICAgIGF3YWl0IHNldFNlc3Npb25Db29raWUocHJvdGVjdGVkUm91dGUsIHJlcyk7XG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxuXG4gIC8vIElmIHByZXZpb3VzbHkgbG9nZ2VkIGluLCBjaGVjayB0aGUgc2Vzc2lvbiBjb29raWUgYWdhaW5zdCB0aGUgY3VycmVudFxuICAvLyBwYXNzd29yZCBoYXNoLlxuICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgdmVyaWZ5U2Vzc2lvbkNvb2tpZShwcm90ZWN0ZWRSb3V0ZSwgcmVxKTtcbiAgaWYgKGlzVmFsaWQpIHtcbiAgICByZXR1cm4gbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlclBhc3N3b3JkUGFnZShyZXEsIHJlcyk7XG59XG5cbi8qKlxuICogU2F2ZXMgYSB2ZXJpZmljYXRpb24gdG9rZW4gdG8gdGhlIHNlc3Npb24gY29va2llIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzLlxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRTZXNzaW9uQ29va2llKFxuICBwcm90ZWN0ZWRSb3V0ZTogUGFzc3dvcmRQcm90ZWN0ZWRSb3V0ZSxcbiAgcmVzOiBSZXNwb25zZVxuKSB7XG4gIGNvbnN0IHtoYXNoLCBzYWx0fSA9IGF3YWl0IGhhc2hQYXNzd29yZChwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5oYXNoKTtcbiAgcmVzLnNlc3Npb24uc2V0SXRlbShTRVNTSU9OX0NPT0tJRV9IQVNILCBoYXNoKTtcbiAgcmVzLnNlc3Npb24uc2V0SXRlbShTRVNTSU9OX0NPT0tJRV9TQUxULCBzYWx0KTtcbiAgcmVzLnNhdmVTZXNzaW9uKCk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhlIHNlc3Npb24gY29va2llIHZhbHVlIGlzIHZhbGlkLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlTZXNzaW9uQ29va2llKFxuICBwcm90ZWN0ZWRSb3V0ZTogUGFzc3dvcmRQcm90ZWN0ZWRSb3V0ZSxcbiAgcmVxOiBSZXF1ZXN0XG4pIHtcbiAgY29uc3QgaGFzaCA9IHJlcS5zZXNzaW9uLmdldEl0ZW0oU0VTU0lPTl9DT09LSUVfSEFTSCk7XG4gIGNvbnN0IHNhbHQgPSByZXEuc2Vzc2lvbi5nZXRJdGVtKFNFU1NJT05fQ09PS0lFX1NBTFQpO1xuICBpZiAoIWhhc2ggfHwgIXNhbHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHZlcmlmeVBhc3N3b3JkKHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkLmhhc2gsIGhhc2gsIHNhbHQpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGxvZ2luIHBhZ2UgdG8gYSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclBhc3N3b3JkUGFnZShcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBvcHRpb25zPzoge2Vycm9yPzogUGFzc3dvcmRQcm90ZWN0RXJyb3J9XG4pIHtcbiAgLy8gSWYgdGhlcmUncyBubyBgLzQwMWAgcm91dGUsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBwYXNzd29yZCBwYWdlLlxuICBjb25zdCBkZWZhdWx0SGFuZGxlciA9ICgpID0+IHtcbiAgICBjb25zdCBub25jZSA9IGdlbmVyYXRlTm9uY2UoKTtcbiAgICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgcmVzLnN0YXR1cyg0MDEpO1xuICAgIHNldFNlY3VyaXR5SGVhZGVycyhyZXMsIG5vbmNlKTtcbiAgICBjb25zdCBlcnJvck1zZyA9IGdldEVycm9yTWVzc2FnZShvcHRpb25zPy5lcnJvcik7XG4gICAgY29uc3QgbWFpbkh0bWwgPSByZW5kZXJKc3hUb1N0cmluZyhcbiAgICAgIDxQYXNzd29yZFBhZ2UgZXJyb3I9e2Vycm9yTXNnfSBub25jZT17bm9uY2V9IC8+XG4gICAgKTtcbiAgICBjb25zdCBodG1sID0gYDwhZG9jdHlwZSBodG1sPlxcbiR7bWFpbkh0bWx9YDtcbiAgICByZXMuc2VuZChodG1sKTtcbiAgfTtcblxuICAvLyBJZiB0aGUgYXBwIGRlZmluZXMgYHJvdXRlcy80MDEudHN4YCwgcmVuZGVyIHRoYXQgcGFnZS5cbiAgaWYgKHJlcS5yZW5kZXJlcikge1xuICAgIGNvbnN0IFtyb3V0ZSwgcm91dGVQYXJhbXNdID0gcmVxLnJlbmRlcmVyLmdldFJvdXRlKCcvNDAxJyk7XG4gICAgaWYgKHJvdXRlKSB7XG4gICAgICAvLyBBZGQgdGhlIGVycm9yIHR5cGUgdG8gdGhlIHJlcSBvYmplY3QuIFJvdXRlcyB0aGF0IGRlZmluZSBhIGBoYW5kbGUoKWBcbiAgICAgIC8vIG1ldGhvZCBzaG91bGQgYmUgYWJsZSB0byByZWFkIGZyb20gaXQgdG8gY29uc3RydWN0IGFuIGFwcHJvcHJpYXRlXG4gICAgICAvLyBlcnJvciBtZXNzYWdlIGZvciB0aGUgcGFnZS5cbiAgICAgIChyZXEgYXMgYW55KS5wYXNzd29yZFByb3RlY3QgPSB7ZXJyb3I6IG9wdGlvbnM/LmVycm9yfTtcbiAgICAgIHJldHVybiByZXEucmVuZGVyZXIuaGFuZGxlUm91dGUocmVxLCByZXMsIGRlZmF1bHRIYW5kbGVyLCByb3V0ZSwge1xuICAgICAgICBkZWZhdWx0U3RhdHVzQ29kZTogNDAxLFxuICAgICAgICByb3V0ZVBhcmFtczogcm91dGVQYXJhbXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBgUGFzc3dvcmRQcm90ZWN0RXJyb3JgIHRvIGEgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZXJyb3I/OiBQYXNzd29yZFByb3RlY3RFcnJvcikge1xuICBpZiAoIWVycm9yKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZXJyb3IgPT09IFBhc3N3b3JkUHJvdGVjdEVycm9yLlBBU1NXT1JEX1JFUVVJUkVEKSB7XG4gICAgcmV0dXJuICdCYWQgcmVxdWVzdCAobm8gcGFzc3dvcmQpLic7XG4gIH1cbiAgaWYgKGVycm9yID09PSBQYXNzd29yZFByb3RlY3RFcnJvci5QQVNTV09SRF9JTlZBTElEKSB7XG4gICAgcmV0dXJuICdJbmNvcnJlY3QgcGFzc3dvcmQuJztcbiAgfVxuICByZXR1cm4gJ1Vua25vd24gZXJyb3IuJztcbn1cbiIsICJleHBvcnQgY29uc3QgQ1NTID0gYFxuLnNpZ25pbiB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogNDhweCAyMHB4O1xuICBjb2xvcjogIzNjNDA0Mztcbn1cblxuLnNpZ25pbl9faGVhZGxpbmUge1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xufVxuXG4uc2lnbmluX19oZWFkbGluZV9faWNvbiB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5zaWduaW5fX2hlYWRsaW5lX19pY29uIHN2ZyB7XG4gIHdpZHRoOiA3MnB4O1xuICBoZWlnaHQ6IDcycHg7XG59XG5cbi5zaWduaW5fX2hlYWRsaW5lX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMzZweDtcbiAgbGluZS1oZWlnaHQ6IDEuMztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnNpZ25pbl9faGVhZGxpbmVfX2JvZHkge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5zaWduaW5fX2Zvcm0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5zaWduaW5fX2Zvcm1fX3Bhc3N3b3JkIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RhZGNlMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBsZXR0ZXItc3BhY2luZzogLjI1cHg7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgbWluLXdpZHRoOiAyNTBweDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMjE4cyBlYXNlO1xufVxuXG4uc2lnbmluX19mb3JtX19wYXNzd29yZDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogI2QyZTNmYztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2NiwgMTMzLCAyNDQsIDAuMDQpO1xufVxuXG4uc2lnbmluX19idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZ2FwOiAxMnB4O1xuICBwYWRkaW5nOiA4cHggMTFweDtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkYWRjZTA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgcGFkZGluZzogMCAxMnB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHRyYW5zaXRpb246IGFsbCAwLjIxOHMgZWFzZTtcbn1cblxuLnNpZ25pbl9fYnV0dG9uOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDJlM2ZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY2LCAxMzMsIDI0NCwgMC4wNCk7XG59XG5cbi5zaWduaW5fX2J1dHRvbl9faWNvbiB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuXG4uc2lnbmluX19idXR0b25fX2xhYmVsIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgbGV0dGVyLXNwYWNpbmc6IC4yNXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzNjNDA0Mztcbn1cblxuLnNpZ25pbl9fZXJyb3Ige1xuICBjb2xvcjogcmVkO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDYwY2g7XG4gIG1hcmdpbjogMjBweCBhdXRvIDA7XG59XG5gO1xuIiwgImltcG9ydCB7Q1NTfSBmcm9tICcuL1Bhc3N3b3JkUGFnZS5jc3MuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUGFnZVByb3BzIHtcbiAgbm9uY2U6IHN0cmluZztcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQYXNzd29yZFBhZ2UocHJvcHM6IFBhc3N3b3JkUGFnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWwgbGFuZz1cImVuXCI+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPG1ldGEgY2hhcnNldD1cInV0Zi04XCIgLz5cbiAgICAgICAgPHRpdGxlPlByb3RlY3RlZDwvdGl0bGU+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwiaWNvblwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9paks1MFRmUWxWX3lKdzNpLUNNbG5ENm9zSDRQYm9aQklMWnJKY1dob05NRW1veUNENWUxYkF4WGJhT1BlNXc0Z0dfU2NmMzdFWHJtWjZwOHNQMmx1ZTVmTFo0MTltNUp5TE1zPWUzODUtdzI1NlwiXG4gICAgICAgICAgdHlwZT1cImltYWdlL3BuZ1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEA0MDA7NTAwOzYwMDs3MDA7OTAwXCJcbiAgICAgICAgICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgICAgICAgICBub25jZT17cHJvcHMubm9uY2V9XG4gICAgICAgIC8+XG4gICAgICAgIDxzdHlsZSBub25jZT17cHJvcHMubm9uY2V9PntDU1N9PC9zdHlsZT5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lnbmluXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZ25pbl9faGVhZGxpbmVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaWduaW5fX2hlYWRsaW5lX19pY29uXCI+XG4gICAgICAgICAgICAgICAgPFNoaWVsZEljb24gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMT5UaGlzIHBhZ2UgaXMgcHJvdGVjdGVkLjwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInNpZ25pbl9faGVhZGxpbmVfX2JvZHlcIj5cbiAgICAgICAgICAgICAgICBFbnRlciB0aGUgcGFzc3dvcmQgYmVsb3cgdG8gY29udGludWU6XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGZvcm0gY2xhc3NOYW1lPVwic2lnbmluX19mb3JtXCIgbWV0aG9kPVwiUE9TVFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzaWduaW5fX2Zvcm1fX3Bhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInNpZ25pbl9fYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lnbmluX19idXR0b25fX2xhYmVsXCI+U3VibWl0PC9kaXY+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAge3Byb3BzLmVycm9yICYmIDxwIGNsYXNzTmFtZT1cInNpZ25pbl9fZXJyb3JcIj57cHJvcHMuZXJyb3J9PC9wPn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuXG5mdW5jdGlvbiBTaGllbGRJY29uKCkge1xuICByZXR1cm4gKFxuICAgIDxzdmdcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgd2lkdGg9XCIzNlwiXG4gICAgICBoZWlnaHQ9XCIzNlwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICBzdHJva2U9XCIjZmY0NTAwXCJcbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgID5cbiAgICAgIDxwYXRoIHN0cm9rZT1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTEuOTk4IDJsLjExOCAuMDA3bC4wNTkgLjAwOGwuMDYxIC4wMTNsLjExMSAuMDM0YS45OTMgLjk5MyAwIDAgMSAuMjE3IC4xMTJsLjEwNCAuMDgybC4yNTUgLjIxOGExMSAxMSAwIDAgMCA3LjE4OSAyLjUzN2wuMzQyIC0uMDFhMSAxIDAgMCAxIDEuMDA1IC43MTdhMTMgMTMgMCAwIDEgLTkuMjA4IDE2LjI1YTEgMSAwIDAgMSAtLjUwMiAwYTEzIDEzIDAgMCAxIC05LjIwOSAtMTYuMjVhMSAxIDAgMCAxIDEuMDA1IC0uNzE3YTExIDExIDAgMCAwIDcuNTMxIC0yLjUyN2wuMjYzIC0uMjI1bC4wOTYgLS4wNzVhLjk5MyAuOTkzIDAgMCAxIC4yMTcgLS4xMTJsLjExMiAtLjAzNGEuOTcgLjk3IDAgMCAxIC4xMTkgLS4wMjFsLjExNSAtLjAwN3ptLjAwMiA3YTIgMiAwIDAgMCAtMS45OTUgMS44NWwtLjAwNSAuMTVsLjAwNSAuMTVhMiAyIDAgMCAwIC45OTUgMS41ODF2MS43NjlsLjAwNyAuMTE3YTEgMSAwIDAgMCAxLjk5MyAtLjExN2wuMDAxIC0xLjc2OGEyIDIgMCAwIDAgLTEuMDAxIC0zLjczMnpcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIwXCJcbiAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICApO1xufVxuIiwgImltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHtSZXNwb25zZX0gZnJvbSAnQGJsaW5ray9yb290JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTm9uY2UoKSB7XG4gIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNlY3VyaXR5SGVhZGVycyhyZXM6IFJlc3BvbnNlLCBub25jZTogc3RyaW5nKSB7XG4gIHJlcy5zZXRIZWFkZXIoJ3gtZnJhbWUtb3B0aW9ucycsICdTQU1FT1JJR0lOJyk7XG4gIHJlcy5zZXRIZWFkZXIoXG4gICAgJ3N0cmljdC10cmFuc3BvcnQtc2VjdXJpdHknLFxuICAgICdtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCdcbiAgKTtcbiAgcmVzLnNldEhlYWRlcigneC1jb250ZW50LXR5cGUtb3B0aW9ucycsICdub3NuaWZmJyk7XG4gIHJlcy5zZXRIZWFkZXIoJ3gteHNzLXByb3RlY3Rpb24nLCAnMTsgbW9kZT1ibG9jaycpO1xuXG4gIC8vIGh0dHBzOi8vY3NwLndpdGhnb29nbGUuY29tL2RvY3Mvc3RyaWN0LWNzcC5odG1sXG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBbXG4gICAgXCJiYXNlLXVyaSAnbm9uZSdcIixcbiAgICBcIm9iamVjdC1zcmMgJ25vbmUnXCIsXG4gICAgYHNjcmlwdC1zcmMgJ25vbmNlLSR7bm9uY2V9JyAndW5zYWZlLWlubGluZScgJ3Vuc2FmZS1ldmFsJyAnc3RyaWN0LWR5bmFtaWMnIGh0dHBzOiBodHRwOmAsXG4gIF07XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtc2VjdXJpdHktcG9saWN5LXJlcG9ydC1vbmx5JywgZGlyZWN0aXZlcy5qb2luKCc7JykpO1xufVxuIiwgImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgUEFTU1dPUkRfSVRFUkFUSU9OUyA9IDEwMDAwO1xuY29uc3QgUEFTU1dPUkRfSEFTSF9MRU5HVEggPSA2NDtcbmNvbnN0IFBBU1NXT1JEX0RJR0VTVCA9ICdzaGEyNTYnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFzaFBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nXG4pOiBQcm9taXNlPHtoYXNoOiBzdHJpbmc7IHNhbHQ6IHN0cmluZ30+IHtcbiAgY29uc3Qgc2FsdCA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBoYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIHtoYXNoLCBzYWx0fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBoYXNoOiBzdHJpbmcsXG4gIHNhbHQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGdlbmVyYXRlZEhhc2ggPSBhd2FpdCBnZW5lcmF0ZUhhc2gocGFzc3dvcmQsIHNhbHQpO1xuICByZXR1cm4gaGFzaCA9PT0gZ2VuZXJhdGVkSGFzaDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaChwYXNzd29yZDogc3RyaW5nLCBzYWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNyeXB0by5wYmtkZjIoXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHNhbHQsXG4gICAgICBQQVNTV09SRF9JVEVSQVRJT05TLFxuICAgICAgUEFTU1dPUkRfSEFTSF9MRU5HVEgsXG4gICAgICBQQVNTV09SRF9ESUdFU1QsXG4gICAgICAoZXJyLCBkZXJpdmVkS2V5KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdwYXNzd29yZCBoYXNoaW5nIGZhaWxlZCcpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzaCA9IGRlcml2ZWRLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICByZXNvbHZlKGhhc2gpO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVEseUJBQXdCO0FBQ2hDLE9BQU8sZ0JBQWdCO0FBQ3ZCLE9BQU8sZ0JBQWdCOzs7QUNIaEIsSUFBTSxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ1ViLFNBQ0UsS0FERjtBQUhDLFNBQVMsYUFBYSxPQUEwQjtBQUNyRCxTQUNFLHFCQUFDLFVBQUssTUFBSyxNQUNUO0FBQUEseUJBQUMsVUFDQztBQUFBLDBCQUFDLFVBQUssU0FBUSxTQUFRO0FBQUEsTUFDdEIsb0JBQUMsV0FB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LEtBQ0E7QUFDQSxRQUFNLEVBQUMsTUFBTSxLQUFJLElBQUksTUFBTSxhQUFhLGVBQWUsU0FBUyxJQUFJO0FBQ3BFLE1BQUksUUFBUSxRQUFRLHFCQUFxQixJQUFJO0FBQzdDLE1BQUksUUFBUSxRQUFRLHFCQUFxQixJQUFJO0FBQzdDLE1BQUksWUFBWTtBQUNsQjtBQUtBLGVBQWUsb0JBQ2IsZ0JBQ0EsS0FDQTtBQUNBLFFBQU0sT0FBTyxJQUFJLFFBQVEsUUFBUSxtQkFBbUI7QUFDcEQsUUFBTSxPQUFPLElBQUksUUFBUSxRQUFRLG1CQUFtQjtBQUNwRCxNQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDbEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLE1BQU0sZUFBZSxlQUFlLFNBQVMsTUFBTSxNQUFNLElBQUk7QUFDdEU7QUFLQSxlQUFzQixtQkFDcEIsS0FDQSxLQUNBLFNBQ0E7QUFFQSxRQUFNLGlCQUFpQixNQUFNO0FBQzNCLFVBQU0sUUFBUSxjQUFjO0FBQzVCLFFBQUksVUFBVSxnQkFBZ0IsV0FBVztBQUN6QyxRQUFJLE9BQU8sR0FBRztBQUNkLHVCQUFtQixLQUFLLEtBQUs7QUFDN0IsVUFBTSxXQUFXLGdCQUFnQixTQUFTLEtBQUs7QUFDL0MsVUFBTSxXQUFXO0FBQUEsTUFDZixnQkFBQUYsS0FBQyxnQkFBYSxPQUFPLFVBQVUsT0FBYztBQUFBLElBQy9DO0FBQ0EsVUFBTSxPQUFPO0FBQUEsRUFBb0IsUUFBUTtBQUN6QyxRQUFJLEtBQUssSUFBSTtBQUFBLEVBQ2Y7QUFHQSxNQUFJLElBQUksVUFBVTtBQUNoQixVQUFNLENBQUMsT0FBTyxXQUFXLElBQUksSUFBSSxTQUFTLFNBQVMsTUFBTTtBQUN6RCxRQUFJLE9BQU87QUFJVCxNQUFDLElBQVksa0JBQWtCLEVBQUMsT0FBTyxTQUFTLE1BQUs7QUFDckQsYUFBTyxJQUFJLFNBQVMsWUFBWSxLQUFLLEtBQUssZ0JBQWdCLE9BQU87QUFBQSxRQUMvRCxtQkFBbUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0EsU0FBTyxlQUFlO0FBQ3hCO0FBS0EsU0FBUyxnQkFBZ0IsT0FBOEI7QUFDckQsTUFBSSxDQUFDLE9BQU87QUFDVixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksVUFBVSw2Q0FBd0M7QUFDcEQsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFVBQVUsMkNBQXVDO0FBQ25ELFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJjcnlwdG8iLCAianN4IiwgIlBhc3N3b3JkUHJvdGVjdEVycm9yIiwgImlzVmFsaWQiXQp9Cg==
377
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3BsdWdpbi9wbHVnaW4udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkUGFnZS9QYXNzd29yZFBhZ2UuY3NzLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkUGFnZS9QYXNzd29yZFBhZ2UudHN4IiwgIi4uL3NyYy9jb3JlL2NzcC50cyIsICIuLi9zcmMvY29yZS9wYXNzd29yZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uLCBQbHVnaW4sIFNlcnZlcn0gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCB7cmVuZGVySnN4VG9TdHJpbmd9IGZyb20gJ0BibGlua2svcm9vdC9qc3gnO1xuaW1wb3J0IGJvZHlQYXJzZXIgZnJvbSAnYm9keS1wYXJzZXInO1xuaW1wb3J0IG1pY3JvbWF0Y2ggZnJvbSAnbWljcm9tYXRjaCc7XG5pbXBvcnQge1Bhc3N3b3JkUGFnZX0gZnJvbSAnLi4vY29tcG9uZW50cy9QYXNzd29yZFBhZ2UvUGFzc3dvcmRQYWdlLmpzJztcbmltcG9ydCB7Z2VuZXJhdGVOb25jZSwgc2V0U2VjdXJpdHlIZWFkZXJzfSBmcm9tICcuLi9jb3JlL2NzcC5qcyc7XG5pbXBvcnQge2hhc2hQYXNzd29yZCwgdmVyaWZ5UGFzc3dvcmR9IGZyb20gJy4uL2NvcmUvcGFzc3dvcmQuanMnO1xuXG5jb25zdCBTRVNTSU9OX0NPT0tJRV9IQVNIID0gJ3Bhc3N3b3JkX3Byb3RlY3QuaGFzaCc7XG5jb25zdCBTRVNTSU9OX0NPT0tJRV9TQUxUID0gJ3Bhc3N3b3JkX3Byb3RlY3Quc2FsdCc7XG5cbmV4cG9ydCBlbnVtIFBhc3N3b3JkUHJvdGVjdEVycm9yIHtcbiAgVU5LTk9XTiA9ICdVTktOT1dOJyxcbiAgUEFTU1dPUkRfUkVRVUlSRUQgPSAnUEFTU1dPUkRfUkVRVUlSRUQnLFxuICBQQVNTV09SRF9JTlZBTElEID0gJ1BBU1NXT1JEX0lOVkFMSUQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUHJvdGVjdGVkUm91dGUge1xuICAvKipcbiAgICogVVJMIGdsb2IgcGF0dGVybiB0byBtYXRjaCAocmVnZXggbm90IHN1cHBvcnRlZCB5ZXQpLlxuICAgKi9cbiAgc291cmNlOiBzdHJpbmc7XG5cbiAgcGFzc3dvcmQ6IHtcbiAgICAvKipcbiAgICAgKiBBIGhhc2ggb2YgdGhlIHBhc3N3b3JkLiBOb3RlOiBhIHBsYWluLXRleHQgcGFzc3dvcmQgc2hvdWxkIG5ldmVyIGJlXG4gICAgICogc3RvcmVkIGluIGNvZGUuIENvbnNpZGVyIHN0b3JpbmcgdGhpcyB2YWx1ZSBpbiBhIGAuZW52YCBmaWxlIGZvciBleHRyYVxuICAgICAqIHNlY3VyaXR5LlxuICAgICAqXG4gICAgICogR2VuZXJhdGUgdGhpcyBieSBydW5uaW5nOlxuICAgICAqIGBgYFxuICAgICAqIHJvb3QtcGFzc3dvcmQtcHJvdGVjdCBnZW5lcmF0ZS1oYXNoIFwiTVlfUEFTU1dPUkRcIlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICBoYXNoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHJhbmRvbSBzdHJpbmcgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcGFzc3dvcmQgaGFzaC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlIHRoaXMgYnkgcnVubmluZzpcbiAgICAgKiBgYGBcbiAgICAgKiByb290LXBhc3N3b3JkLXByb3RlY3QgZ2VuZXJhdGUtaGFzaCBcIk1ZX1BBU1NXT1JEXCJcbiAgICAgKiBgYGBgXG4gICAgICovXG4gICAgc2FsdDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUHJvdGVjdFBsdWdpbk9wdGlvbnMge1xuICBwcm90ZWN0ZWRSb3V0ZXM6IFBhc3N3b3JkUHJvdGVjdGVkUm91dGVbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhc3N3b3JkUHJvdGVjdFBsdWdpbihcbiAgb3B0aW9uczogUGFzc3dvcmRQcm90ZWN0UGx1Z2luT3B0aW9uc1xuKTogUGx1Z2luIHtcbiAgY29uc3QgcHJvdGVjdGVkUm91dGVzVXNlckNvbmZpZyA9IG9wdGlvbnMucHJvdGVjdGVkUm91dGVzIHx8IFtdO1xuICBjb25zdCBwcm90ZWN0ZWRSb3V0ZXMgPSBwcm90ZWN0ZWRSb3V0ZXNVc2VyQ29uZmlnLmZpbHRlcigocHJvdGVjdGVkUm91dGUpID0+IHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHByb3RlY3RlZFJvdXRlLnNvdXJjZSAmJlxuICAgICAgcHJvdGVjdGVkUm91dGUucGFzc3dvcmQgJiZcbiAgICAgIHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkLmhhc2ggJiZcbiAgICAgIHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkLnNhbHRcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3QgcGFzc3dvcmQtcHJvdGVjdGVkIHJvdXRlIHRoYXQgbWF0Y2hlcy5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFByb3RlY3RlZFJvdXRlQ29uZmlnKFxuICAgIHJlcTogUmVxdWVzdFxuICApOiBQYXNzd29yZFByb3RlY3RlZFJvdXRlIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBwcm90ZWN0ZWRSb3V0ZSBvZiBwcm90ZWN0ZWRSb3V0ZXMpIHtcbiAgICAgIGlmIChtaWNyb21hdGNoLmlzTWF0Y2gocmVxLnBhdGgsIHByb3RlY3RlZFJvdXRlLnNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHByb3RlY3RlZFJvdXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3Jvb3QtcGFzc3dvcmQtcHJvdGVjdCcsXG4gICAgY29uZmlndXJlU2VydmVyOiAoc2VydmVyOiBTZXJ2ZXIpID0+IHtcbiAgICAgIGlmIChwcm90ZWN0ZWRSb3V0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlcnZlci51c2UoYm9keVBhcnNlci51cmxlbmNvZGVkKHtleHRlbmRlZDogdHJ1ZX0pKTtcbiAgICAgIHNlcnZlci51c2UoYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3RlY3RlZFJvdXRlID0gZ2V0UHJvdGVjdGVkUm91dGVDb25maWcocmVxKTtcbiAgICAgICAgaWYgKHByb3RlY3RlZFJvdXRlKSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlUHJvdGVjdGVkUm91dGUocHJvdGVjdGVkUm91dGUsIHJlcSwgcmVzLCBuZXh0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUHJvdGVjdGVkUm91dGUoXG4gIHByb3RlY3RlZFJvdXRlOiBQYXNzd29yZFByb3RlY3RlZFJvdXRlLFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIG5leHQ6IE5leHRGdW5jdGlvblxuKSB7XG4gIGlmIChyZXEubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAvLyBWZXJpZnkgcGFzc3dvcmQgYW5kIGlmIHZhbGlkIHNldCBhIHNlc3Npb24gY29va2llLlxuICAgIGlmIChcbiAgICAgIHJlcS5nZXQoJ2NvbnRlbnQtdHlwZScpICE9PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB8fFxuICAgICAgIXJlcS5ib2R5IHx8XG4gICAgICAhcmVxLmJvZHkucGFzc3dvcmRcbiAgICApIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKTtcbiAgICAgIHJldHVybiByZW5kZXJQYXNzd29yZFBhZ2UocmVxLCByZXMsIHtcbiAgICAgICAgZXJyb3I6IFBhc3N3b3JkUHJvdGVjdEVycm9yLlBBU1NXT1JEX1JFUVVJUkVELFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc3dvcmQgPSByZXEuYm9keS5wYXNzd29yZCBhcyBzdHJpbmc7XG4gICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHZlcmlmeVBhc3N3b3JkKFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5oYXNoLFxuICAgICAgcHJvdGVjdGVkUm91dGUucGFzc3dvcmQuc2FsdFxuICAgICk7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gcmVuZGVyUGFzc3dvcmRQYWdlKHJlcSwgcmVzLCB7XG4gICAgICAgIGVycm9yOiBQYXNzd29yZFByb3RlY3RFcnJvci5QQVNTV09SRF9JTlZBTElELFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFNldCBhIHNlc3Npb24gY29va2llIHZhbHVlIHRvIHZlcmlmeSBzdWJzZXF1ZW50IHJlcXVlc3RzLlxuICAgIGF3YWl0IHNldFNlc3Npb25Db29raWUocHJvdGVjdGVkUm91dGUsIHJlcyk7XG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxuXG4gIC8vIElmIHByZXZpb3VzbHkgbG9nZ2VkIGluLCBjaGVjayB0aGUgc2Vzc2lvbiBjb29raWUgYWdhaW5zdCB0aGUgY3VycmVudFxuICAvLyBwYXNzd29yZCBoYXNoLlxuICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgdmVyaWZ5U2Vzc2lvbkNvb2tpZShwcm90ZWN0ZWRSb3V0ZSwgcmVxKTtcbiAgaWYgKGlzVmFsaWQpIHtcbiAgICByZXR1cm4gbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlclBhc3N3b3JkUGFnZShyZXEsIHJlcyk7XG59XG5cbi8qKlxuICogU2F2ZXMgYSB2ZXJpZmljYXRpb24gdG9rZW4gdG8gdGhlIHNlc3Npb24gY29va2llIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzLlxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRTZXNzaW9uQ29va2llKFxuICBwcm90ZWN0ZWRSb3V0ZTogUGFzc3dvcmRQcm90ZWN0ZWRSb3V0ZSxcbiAgcmVzOiBSZXNwb25zZVxuKSB7XG4gIGNvbnN0IHtoYXNoLCBzYWx0fSA9IGF3YWl0IGhhc2hQYXNzd29yZChwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5oYXNoKTtcbiAgcmVzLnNlc3Npb24uc2V0SXRlbShTRVNTSU9OX0NPT0tJRV9IQVNILCBoYXNoKTtcbiAgcmVzLnNlc3Npb24uc2V0SXRlbShTRVNTSU9OX0NPT0tJRV9TQUxULCBzYWx0KTtcbiAgcmVzLnNhdmVTZXNzaW9uKCk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhlIHNlc3Npb24gY29va2llIHZhbHVlIGlzIHZhbGlkLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlTZXNzaW9uQ29va2llKFxuICBwcm90ZWN0ZWRSb3V0ZTogUGFzc3dvcmRQcm90ZWN0ZWRSb3V0ZSxcbiAgcmVxOiBSZXF1ZXN0XG4pIHtcbiAgY29uc3QgaGFzaCA9IHJlcS5zZXNzaW9uLmdldEl0ZW0oU0VTU0lPTl9DT09LSUVfSEFTSCk7XG4gIGNvbnN0IHNhbHQgPSByZXEuc2Vzc2lvbi5nZXRJdGVtKFNFU1NJT05fQ09PS0lFX1NBTFQpO1xuICBpZiAoIWhhc2ggfHwgIXNhbHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHZlcmlmeVBhc3N3b3JkKHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkLmhhc2gsIGhhc2gsIHNhbHQpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGxvZ2luIHBhZ2UgdG8gYSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclBhc3N3b3JkUGFnZShcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBvcHRpb25zPzoge2Vycm9yPzogUGFzc3dvcmRQcm90ZWN0RXJyb3J9XG4pIHtcbiAgLy8gSWYgdGhlcmUncyBubyBgLzQwMWAgcm91dGUsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBwYXNzd29yZCBwYWdlLlxuICBjb25zdCBkZWZhdWx0SGFuZGxlciA9ICgpID0+IHtcbiAgICBjb25zdCBub25jZSA9IGdlbmVyYXRlTm9uY2UoKTtcbiAgICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgcmVzLnN0YXR1cyg0MDEpO1xuICAgIHNldFNlY3VyaXR5SGVhZGVycyhyZXMsIG5vbmNlKTtcbiAgICBjb25zdCBlcnJvck1zZyA9IGdldEVycm9yTWVzc2FnZShvcHRpb25zPy5lcnJvcik7XG4gICAgY29uc3QgbWFpbkh0bWwgPSByZW5kZXJKc3hUb1N0cmluZyhcbiAgICAgIDxQYXNzd29yZFBhZ2UgZXJyb3I9e2Vycm9yTXNnfSBub25jZT17bm9uY2V9IC8+XG4gICAgKTtcbiAgICBjb25zdCBodG1sID0gYDwhZG9jdHlwZSBodG1sPlxcbiR7bWFpbkh0bWx9YDtcbiAgICByZXMuc2VuZChodG1sKTtcbiAgfTtcblxuICAvLyBJZiB0aGUgYXBwIGRlZmluZXMgYHJvdXRlcy80MDEudHN4YCwgcmVuZGVyIHRoYXQgcGFnZS5cbiAgaWYgKHJlcS5yZW5kZXJlcikge1xuICAgIGNvbnN0IFtyb3V0ZSwgcm91dGVQYXJhbXNdID0gcmVxLnJlbmRlcmVyLmdldFJvdXRlKCcvNDAxJyk7XG4gICAgaWYgKHJvdXRlKSB7XG4gICAgICAvLyBBZGQgdGhlIGVycm9yIHR5cGUgdG8gdGhlIHJlcSBvYmplY3QuIFJvdXRlcyB0aGF0IGRlZmluZSBhIGBoYW5kbGUoKWBcbiAgICAgIC8vIG1ldGhvZCBzaG91bGQgYmUgYWJsZSB0byByZWFkIGZyb20gaXQgdG8gY29uc3RydWN0IGFuIGFwcHJvcHJpYXRlXG4gICAgICAvLyBlcnJvciBtZXNzYWdlIGZvciB0aGUgcGFnZS5cbiAgICAgIChyZXEgYXMgYW55KS5wYXNzd29yZFByb3RlY3QgPSB7ZXJyb3I6IG9wdGlvbnM/LmVycm9yfTtcbiAgICAgIHJldHVybiByZXEucmVuZGVyZXIuaGFuZGxlUm91dGUocmVxLCByZXMsIGRlZmF1bHRIYW5kbGVyLCByb3V0ZSwge1xuICAgICAgICBkZWZhdWx0U3RhdHVzQ29kZTogNDAxLFxuICAgICAgICByb3V0ZVBhcmFtczogcm91dGVQYXJhbXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBgUGFzc3dvcmRQcm90ZWN0RXJyb3JgIHRvIGEgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZXJyb3I/OiBQYXNzd29yZFByb3RlY3RFcnJvcikge1xuICBpZiAoIWVycm9yKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZXJyb3IgPT09IFBhc3N3b3JkUHJvdGVjdEVycm9yLlBBU1NXT1JEX1JFUVVJUkVEKSB7XG4gICAgcmV0dXJuICdCYWQgcmVxdWVzdCAobm8gcGFzc3dvcmQpLic7XG4gIH1cbiAgaWYgKGVycm9yID09PSBQYXNzd29yZFByb3RlY3RFcnJvci5QQVNTV09SRF9JTlZBTElEKSB7XG4gICAgcmV0dXJuICdJbmNvcnJlY3QgcGFzc3dvcmQuJztcbiAgfVxuICByZXR1cm4gJ1Vua25vd24gZXJyb3IuJztcbn1cbiIsICJleHBvcnQgY29uc3QgQ1NTID0gYFxuLnNpZ25pbiB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogNDhweCAyMHB4O1xuICBjb2xvcjogIzNjNDA0Mztcbn1cblxuLnNpZ25pbl9faGVhZGxpbmUge1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xufVxuXG4uc2lnbmluX19oZWFkbGluZV9faWNvbiB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5zaWduaW5fX2hlYWRsaW5lX19pY29uIHN2ZyB7XG4gIHdpZHRoOiA3MnB4O1xuICBoZWlnaHQ6IDcycHg7XG59XG5cbi5zaWduaW5fX2hlYWRsaW5lX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMzZweDtcbiAgbGluZS1oZWlnaHQ6IDEuMztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnNpZ25pbl9faGVhZGxpbmVfX2JvZHkge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5zaWduaW5fX2Zvcm0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5zaWduaW5fX2Zvcm1fX3Bhc3N3b3JkIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RhZGNlMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBsZXR0ZXItc3BhY2luZzogLjI1cHg7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgbWluLXdpZHRoOiAyNTBweDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMjE4cyBlYXNlO1xufVxuXG4uc2lnbmluX19mb3JtX19wYXNzd29yZDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogI2QyZTNmYztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2NiwgMTMzLCAyNDQsIDAuMDQpO1xufVxuXG4uc2lnbmluX19idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZ2FwOiAxMnB4O1xuICBwYWRkaW5nOiA4cHggMTFweDtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkYWRjZTA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgcGFkZGluZzogMCAxMnB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHRyYW5zaXRpb246IGFsbCAwLjIxOHMgZWFzZTtcbn1cblxuLnNpZ25pbl9fYnV0dG9uOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDJlM2ZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY2LCAxMzMsIDI0NCwgMC4wNCk7XG59XG5cbi5zaWduaW5fX2J1dHRvbl9faWNvbiB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuXG4uc2lnbmluX19idXR0b25fX2xhYmVsIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgbGV0dGVyLXNwYWNpbmc6IC4yNXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzNjNDA0Mztcbn1cblxuLnNpZ25pbl9fZXJyb3Ige1xuICBjb2xvcjogcmVkO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDYwY2g7XG4gIG1hcmdpbjogMjBweCBhdXRvIDA7XG59XG5gO1xuIiwgImltcG9ydCB7Q1NTfSBmcm9tICcuL1Bhc3N3b3JkUGFnZS5jc3MuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUGFnZVByb3BzIHtcbiAgbm9uY2U6IHN0cmluZztcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQYXNzd29yZFBhZ2UocHJvcHM6IFBhc3N3b3JkUGFnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWwgbGFuZz1cImVuXCI+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPG1ldGEgY2hhcnNldD1cInV0Zi04XCIgLz5cbiAgICAgICAgPHRpdGxlPlByb3RlY3RlZDwvdGl0bGU+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwiaWNvblwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9paks1MFRmUWxWX3lKdzNpLUNNbG5ENm9zSDRQYm9aQklMWnJKY1dob05NRW1veUNENWUxYkF4WGJhT1BlNXc0Z0dfU2NmMzdFWHJtWjZwOHNQMmx1ZTVmTFo0MTltNUp5TE1zPWUzODUtdzI1NlwiXG4gICAgICAgICAgdHlwZT1cImltYWdlL3BuZ1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEA0MDA7NTAwOzYwMDs3MDA7OTAwXCJcbiAgICAgICAgICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgICAgICAgICBub25jZT17cHJvcHMubm9uY2V9XG4gICAgICAgIC8+XG4gICAgICAgIDxzdHlsZSBub25jZT17cHJvcHMubm9uY2V9PntDU1N9PC9zdHlsZT5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lnbmluXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZ25pbl9faGVhZGxpbmVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaWduaW5fX2hlYWRsaW5lX19pY29uXCI+XG4gICAgICAgICAgICAgICAgPFNoaWVsZEljb24gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMT5UaGlzIHBhZ2UgaXMgcHJvdGVjdGVkLjwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInNpZ25pbl9faGVhZGxpbmVfX2JvZHlcIj5cbiAgICAgICAgICAgICAgICBFbnRlciB0aGUgcGFzc3dvcmQgYmVsb3cgdG8gY29udGludWU6XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGZvcm0gY2xhc3NOYW1lPVwic2lnbmluX19mb3JtXCIgbWV0aG9kPVwiUE9TVFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzaWduaW5fX2Zvcm1fX3Bhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInNpZ25pbl9fYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lnbmluX19idXR0b25fX2xhYmVsXCI+U3VibWl0PC9kaXY+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAge3Byb3BzLmVycm9yICYmIDxwIGNsYXNzTmFtZT1cInNpZ25pbl9fZXJyb3JcIj57cHJvcHMuZXJyb3J9PC9wPn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuXG5mdW5jdGlvbiBTaGllbGRJY29uKCkge1xuICByZXR1cm4gKFxuICAgIDxzdmdcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgd2lkdGg9XCIzNlwiXG4gICAgICBoZWlnaHQ9XCIzNlwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICBzdHJva2U9XCIjZmY0NTAwXCJcbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgID5cbiAgICAgIDxwYXRoIHN0cm9rZT1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTEuOTk4IDJsLjExOCAuMDA3bC4wNTkgLjAwOGwuMDYxIC4wMTNsLjExMSAuMDM0YS45OTMgLjk5MyAwIDAgMSAuMjE3IC4xMTJsLjEwNCAuMDgybC4yNTUgLjIxOGExMSAxMSAwIDAgMCA3LjE4OSAyLjUzN2wuMzQyIC0uMDFhMSAxIDAgMCAxIDEuMDA1IC43MTdhMTMgMTMgMCAwIDEgLTkuMjA4IDE2LjI1YTEgMSAwIDAgMSAtLjUwMiAwYTEzIDEzIDAgMCAxIC05LjIwOSAtMTYuMjVhMSAxIDAgMCAxIDEuMDA1IC0uNzE3YTExIDExIDAgMCAwIDcuNTMxIC0yLjUyN2wuMjYzIC0uMjI1bC4wOTYgLS4wNzVhLjk5MyAuOTkzIDAgMCAxIC4yMTcgLS4xMTJsLjExMiAtLjAzNGEuOTcgLjk3IDAgMCAxIC4xMTkgLS4wMjFsLjExNSAtLjAwN3ptLjAwMiA3YTIgMiAwIDAgMCAtMS45OTUgMS44NWwtLjAwNSAuMTVsLjAwNSAuMTVhMiAyIDAgMCAwIC45OTUgMS41ODF2MS43NjlsLjAwNyAuMTE3YTEgMSAwIDAgMCAxLjk5MyAtLjExN2wuMDAxIC0xLjc2OGEyIDIgMCAwIDAgLTEuMDAxIC0zLjczMnpcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIwXCJcbiAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICApO1xufVxuIiwgImltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHtSZXNwb25zZX0gZnJvbSAnQGJsaW5ray9yb290JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTm9uY2UoKSB7XG4gIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNlY3VyaXR5SGVhZGVycyhyZXM6IFJlc3BvbnNlLCBub25jZTogc3RyaW5nKSB7XG4gIHJlcy5zZXRIZWFkZXIoJ3gtZnJhbWUtb3B0aW9ucycsICdTQU1FT1JJR0lOJyk7XG4gIHJlcy5zZXRIZWFkZXIoXG4gICAgJ3N0cmljdC10cmFuc3BvcnQtc2VjdXJpdHknLFxuICAgICdtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCdcbiAgKTtcbiAgcmVzLnNldEhlYWRlcigneC1jb250ZW50LXR5cGUtb3B0aW9ucycsICdub3NuaWZmJyk7XG4gIHJlcy5zZXRIZWFkZXIoJ3gteHNzLXByb3RlY3Rpb24nLCAnMTsgbW9kZT1ibG9jaycpO1xuXG4gIC8vIGh0dHBzOi8vY3NwLndpdGhnb29nbGUuY29tL2RvY3Mvc3RyaWN0LWNzcC5odG1sXG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBbXG4gICAgXCJiYXNlLXVyaSAnbm9uZSdcIixcbiAgICBcIm9iamVjdC1zcmMgJ25vbmUnXCIsXG4gICAgYHNjcmlwdC1zcmMgJ25vbmNlLSR7bm9uY2V9JyAndW5zYWZlLWlubGluZScgJ3Vuc2FmZS1ldmFsJyAnc3RyaWN0LWR5bmFtaWMnIGh0dHBzOiBodHRwOmAsXG4gIF07XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtc2VjdXJpdHktcG9saWN5LXJlcG9ydC1vbmx5JywgZGlyZWN0aXZlcy5qb2luKCc7JykpO1xufVxuIiwgImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgUEFTU1dPUkRfSVRFUkFUSU9OUyA9IDEwMDAwO1xuY29uc3QgUEFTU1dPUkRfSEFTSF9MRU5HVEggPSA2NDtcbmNvbnN0IFBBU1NXT1JEX0RJR0VTVCA9ICdzaGEyNTYnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFzaFBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nXG4pOiBQcm9taXNlPHtoYXNoOiBzdHJpbmc7IHNhbHQ6IHN0cmluZ30+IHtcbiAgY29uc3Qgc2FsdCA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBoYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIHtoYXNoLCBzYWx0fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBoYXNoOiBzdHJpbmcsXG4gIHNhbHQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGdlbmVyYXRlZEhhc2ggPSBhd2FpdCBnZW5lcmF0ZUhhc2gocGFzc3dvcmQsIHNhbHQpO1xuICByZXR1cm4gaGFzaCA9PT0gZ2VuZXJhdGVkSGFzaDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaChwYXNzd29yZDogc3RyaW5nLCBzYWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNyeXB0by5wYmtkZjIoXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHNhbHQsXG4gICAgICBQQVNTV09SRF9JVEVSQVRJT05TLFxuICAgICAgUEFTU1dPUkRfSEFTSF9MRU5HVEgsXG4gICAgICBQQVNTV09SRF9ESUdFU1QsXG4gICAgICAoZXJyLCBkZXJpdmVkS2V5KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdwYXNzd29yZCBoYXNoaW5nIGZhaWxlZCcpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzaCA9IGRlcml2ZWRLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICByZXNvbHZlKGhhc2gpO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVEseUJBQXdCO0FBQ2hDLE9BQU8sZ0JBQWdCO0FBQ3ZCLE9BQU8sZ0JBQWdCOzs7QUNIaEIsSUFBTSxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ1ViLFNBQ0UsS0FERjtBQUhDLFNBQVMsYUFBYSxPQUEwQjtBQUNyRCxTQUNFLHFCQUFDLFVBQUssTUFBSyxNQUNUO0FBQUEseUJBQUMsVUFDQztBQUFBLDBCQUFDLFVBQUssU0FBUSxTQUFRO0FBQUEsTUFDdEIsb0JBQUMsV0FBTSx1QkFBUztBQUFBLE1BQ2hCO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxLQUFJO0FBQUEsVUFDSixNQUFLO0FBQUEsVUFDTCxNQUFLO0FBQUE7QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0MsTUFBSztBQUFBLFVBQ0wsS0FBSTtBQUFBLFVBQ0osT0FBTyxNQUFNO0FBQUE7QUFBQSxNQUNmO0FBQUEsTUFDQSxvQkFBQyxXQUFNLE9BQU8sTUFBTSxPQUFRLGVBQUk7QUFBQSxPQUNsQztBQUFBLElBQ0Esb0JBQUMsVUFDQyw4QkFBQyxTQUFJLElBQUcsUUFDTiwrQkFBQyxTQUFJLFdBQVUsVUFDYjtBQUFBLDJCQUFDLFNBQUksV0FBVSxvQkFDYjtBQUFBLDRCQUFDLFNBQUksV0FBVSwwQkFDYiw4QkFBQyxjQUFXLEdBQ2Q7QUFBQSxRQUNBLG9CQUFDLFFBQUcscUNBQXVCO0FBQUEsUUFDM0Isb0JBQUMsT0FBRSxXQUFVLDBCQUF5QixtREFFdEM7QUFBQSxTQUNGO0FBQUEsTUFDQSxxQkFBQyxVQUFLLFdBQVUsZ0JBQWUsUUFBTyxRQUNwQztBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxJQUFHO0FBQUEsWUFDSCxXQUFVO0FBQUEsWUFDVixNQUFLO0FBQUEsWUFDTCxNQUFLO0FBQUEsWUFDTCxhQUFZO0FBQUEsWUFDWixXQUFXO0FBQUE7QUFBQSxRQUNiO0FBQUEsUUFDQSxvQkFBQyxZQUFPLFdBQVUsa0JBQWlCLE1BQUssVUFDdEMsOEJBQUMsU0FBSSxXQUFVLHlCQUF3QixvQkFBTSxHQUMvQztBQUFBLFNBQ0Y7QUFBQSxNQUNDLE1BQU0sU0FBUyxvQkFBQyxPQUFFLFdBQVUsaUJBQWlCLGdCQUFNLE9BQU07QUFBQSxPQUM1RCxHQUNGLEdBQ0Y7QUFBQSxLQUNGO0FBRUo7QUFFQSxTQUFTLGFBQWE7QUFDcEIsU0FDRTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsT0FBTTtBQUFBLE1BQ04sT0FBTTtBQUFBLE1BQ04sUUFBTztBQUFBLE1BQ1AsU0FBUTtBQUFBLE1BQ1IsZ0JBQWE7QUFBQSxNQUNiLFFBQU87QUFBQSxNQUNQLE1BQUs7QUFBQSxNQUNMLGtCQUFlO0FBQUEsTUFDZixtQkFBZ0I7QUFBQSxNQUVoQjtBQUFBLDRCQUFDLFVBQUssUUFBTyxRQUFPLEdBQUUsaUJBQWdCLE1BQUssUUFBTztBQUFBLFFBQ2xEO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxHQUFFO0FBQUEsWUFDRixnQkFBYTtBQUFBLFlBQ2IsTUFBSztBQUFBO0FBQUEsUUFDUDtBQUFBO0FBQUE7QUFBQSxFQUNGO0FBRUo7OztBQy9FQSxPQUFPLFlBQVk7QUFHWixTQUFTLGdCQUFnQjtBQUM5QixTQUFPLE9BQU8sWUFBWSxFQUFFLEVBQUUsU0FBUyxRQUFRO0FBQ2pEO0FBRU8sU0FBUyxtQkFBbUIsS0FBZSxPQUFlO0FBQy9ELE1BQUksVUFBVSxtQkFBbUIsWUFBWTtBQUM3QyxNQUFJO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsTUFBSSxVQUFVLDBCQUEwQixTQUFTO0FBQ2pELE1BQUksVUFBVSxvQkFBb0IsZUFBZTtBQUdqRCxRQUFNLGFBQWE7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBLHFCQUFxQixLQUFLO0FBQUEsRUFDNUI7QUFDQSxNQUFJLFVBQVUsdUNBQXVDLFdBQVcsS0FBSyxHQUFHLENBQUM7QUFDM0U7OztBQ3ZCQSxPQUFPQSxhQUFZO0FBRW5CLElBQU0sc0JBQXNCO0FBQzVCLElBQU0sdUJBQXVCO0FBQzdCLElBQU0sa0JBQWtCO0FBRXhCLGVBQXNCLGFBQ3BCLFVBQ3VDO0FBQ3ZDLFFBQU0sT0FBT0EsUUFBTyxZQUFZLEVBQUUsRUFBRSxTQUFTLEtBQUs7QUFDbEQsUUFBTSxPQUFPLE1BQU0sYUFBYSxVQUFVLElBQUk7QUFDOUMsU0FBTyxFQUFDLE1BQU0sS0FBSTtBQUNwQjtBQUVBLGVBQXNCLGVBQ3BCLFVBQ0EsTUFDQSxNQUNrQjtBQUNsQixRQUFNLGdCQUFnQixNQUFNLGFBQWEsVUFBVSxJQUFJO0FBQ3ZELFNBQU8sU0FBUztBQUNsQjtBQUVPLFNBQVMsYUFBYSxVQUFrQixNQUErQjtBQUM1RSxTQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN0QyxJQUFBQSxRQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLENBQUMsS0FBSyxlQUFlO0FBQ25CLFlBQUksS0FBSztBQUNQLGtCQUFRLE1BQU0seUJBQXlCO0FBQ3ZDLGtCQUFRLE1BQU0sR0FBRztBQUNqQixpQkFBTyxHQUFHO0FBQ1Y7QUFBQSxRQUNGO0FBQ0EsY0FBTSxPQUFPLFdBQVcsU0FBUyxLQUFLO0FBQ3RDLGdCQUFRLElBQUk7QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIOzs7QUpnSk0sZ0JBQUFDLFlBQUE7QUFuTE4sSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSxzQkFBc0I7QUFFckIsSUFBSyx1QkFBTCxrQkFBS0MsMEJBQUw7QUFDTCxFQUFBQSxzQkFBQSxhQUFVO0FBQ1YsRUFBQUEsc0JBQUEsdUJBQW9CO0FBQ3BCLEVBQUFBLHNCQUFBLHNCQUFtQjtBQUhULFNBQUFBO0FBQUEsR0FBQTtBQXlDTCxTQUFTLHNCQUNkLFNBQ1E7QUFDUixRQUFNLDRCQUE0QixRQUFRLG1CQUFtQixDQUFDO0FBQzlELFFBQU0sa0JBQWtCLDBCQUEwQixPQUFPLENBQUMsbUJBQW1CO0FBQzNFLFdBQU87QUFBQSxNQUNMLGVBQWUsVUFDZixlQUFlLFlBQ2YsZUFBZSxTQUFTLFFBQ3hCLGVBQWUsU0FBUztBQUFBLElBQzFCO0FBQUEsRUFDRixDQUFDO0FBS0QsV0FBUyx3QkFDUCxLQUMrQjtBQUMvQixlQUFXLGtCQUFrQixpQkFBaUI7QUFDNUMsVUFBSSxXQUFXLFFBQVEsSUFBSSxNQUFNLGVBQWUsTUFBTSxHQUFHO0FBQ3ZELGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04saUJBQWlCLENBQUMsV0FBbUI7QUFDbkMsVUFBSSxnQkFBZ0IsV0FBVyxHQUFHO0FBQ2hDO0FBQUEsTUFDRjtBQUNBLGFBQU8sSUFBSSxXQUFXLFdBQVcsRUFBQyxVQUFVLEtBQUksQ0FBQyxDQUFDO0FBQ2xELGFBQU8sSUFBSSxPQUFPLEtBQWMsS0FBZSxTQUF1QjtBQUNwRSxjQUFNLGlCQUFpQix3QkFBd0IsR0FBRztBQUNsRCxZQUFJLGdCQUFnQjtBQUNsQixnQkFBTSxxQkFBcUIsZ0JBQWdCLEtBQUssS0FBSyxJQUFJO0FBQ3pEO0FBQUEsUUFDRjtBQUNBLGFBQUs7QUFBQSxNQUNQLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGO0FBRUEsZUFBZSxxQkFDYixnQkFDQSxLQUNBLEtBQ0EsTUFDQTtBQUNBLE1BQUksSUFBSSxXQUFXLFFBQVE7QUFFekIsUUFDRSxJQUFJLElBQUksY0FBYyxNQUFNLHVDQUM1QixDQUFDLElBQUksUUFDTCxDQUFDLElBQUksS0FBSyxVQUNWO0FBQ0EsVUFBSSxPQUFPLEdBQUc7QUFDZCxhQUFPLG1CQUFtQixLQUFLLEtBQUs7QUFBQSxRQUNsQyxPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sV0FBVyxJQUFJLEtBQUs7QUFDMUIsVUFBTUMsV0FBVSxNQUFNO0FBQUEsTUFDcEI7QUFBQSxNQUNBLGVBQWUsU0FBUztBQUFBLE1BQ3hCLGVBQWUsU0FBUztBQUFBLElBQzFCO0FBQ0EsUUFBSSxDQUFDQSxVQUFTO0FBQ1osYUFBTyxtQkFBbUIsS0FBSyxLQUFLO0FBQUEsUUFDbEMsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0g7QUFFQSxVQUFNLGlCQUFpQixnQkFBZ0IsR0FBRztBQUMxQyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBSUEsUUFBTSxVQUFVLE1BQU0sb0JBQW9CLGdCQUFnQixHQUFHO0FBQzdELE1BQUksU0FBUztBQUNYLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFFQSxTQUFPLG1CQUFtQixLQUFLLEdBQUc7QUFDcEM7QUFLQSxlQUFlLGlCQUNiLGdCQUNBLEtBQ0E7QUFDQSxRQUFNLEVBQUMsTUFBTSxLQUFJLElBQUksTUFBTSxhQUFhLGVBQWUsU0FBUyxJQUFJO0FBQ3BFLE1BQUksUUFBUSxRQUFRLHFCQUFxQixJQUFJO0FBQzdDLE1BQUksUUFBUSxRQUFRLHFCQUFxQixJQUFJO0FBQzdDLE1BQUksWUFBWTtBQUNsQjtBQUtBLGVBQWUsb0JBQ2IsZ0JBQ0EsS0FDQTtBQUNBLFFBQU0sT0FBTyxJQUFJLFFBQVEsUUFBUSxtQkFBbUI7QUFDcEQsUUFBTSxPQUFPLElBQUksUUFBUSxRQUFRLG1CQUFtQjtBQUNwRCxNQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDbEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLE1BQU0sZUFBZSxlQUFlLFNBQVMsTUFBTSxNQUFNLElBQUk7QUFDdEU7QUFLQSxlQUFzQixtQkFDcEIsS0FDQSxLQUNBLFNBQ0E7QUFFQSxRQUFNLGlCQUFpQixNQUFNO0FBQzNCLFVBQU0sUUFBUSxjQUFjO0FBQzVCLFFBQUksVUFBVSxnQkFBZ0IsV0FBVztBQUN6QyxRQUFJLE9BQU8sR0FBRztBQUNkLHVCQUFtQixLQUFLLEtBQUs7QUFDN0IsVUFBTSxXQUFXLGdCQUFnQixTQUFTLEtBQUs7QUFDL0MsVUFBTSxXQUFXO0FBQUEsTUFDZixnQkFBQUYsS0FBQyxnQkFBYSxPQUFPLFVBQVUsT0FBYztBQUFBLElBQy9DO0FBQ0EsVUFBTSxPQUFPO0FBQUEsRUFBb0IsUUFBUTtBQUN6QyxRQUFJLEtBQUssSUFBSTtBQUFBLEVBQ2Y7QUFHQSxNQUFJLElBQUksVUFBVTtBQUNoQixVQUFNLENBQUMsT0FBTyxXQUFXLElBQUksSUFBSSxTQUFTLFNBQVMsTUFBTTtBQUN6RCxRQUFJLE9BQU87QUFJVCxNQUFDLElBQVksa0JBQWtCLEVBQUMsT0FBTyxTQUFTLE1BQUs7QUFDckQsYUFBTyxJQUFJLFNBQVMsWUFBWSxLQUFLLEtBQUssZ0JBQWdCLE9BQU87QUFBQSxRQUMvRCxtQkFBbUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0EsU0FBTyxlQUFlO0FBQ3hCO0FBS0EsU0FBUyxnQkFBZ0IsT0FBOEI7QUFDckQsTUFBSSxDQUFDLE9BQU87QUFDVixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksVUFBVSw2Q0FBd0M7QUFDcEQsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFVBQVUsMkNBQXVDO0FBQ25ELFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJjcnlwdG8iLCAianN4IiwgIlBhc3N3b3JkUHJvdGVjdEVycm9yIiwgImlzVmFsaWQiXQp9Cg==
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@blinkk/root-password-protect",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
4
4
  "author": "s@blinkk.com",
5
5
  "license": "MIT",
6
6
  "engines": {
7
- "node": ">=18.0.0"
7
+ "node": ">=22.0.0"
8
8
  },
9
9
  "repository": {
10
10
  "type": "git",
@@ -19,14 +19,14 @@
19
19
  },
20
20
  "type": "module",
21
21
  "module": "./dist/core.js",
22
- "types": "./dist/core.d.ts",
22
+ "types": "./dist/core/core.d.ts",
23
23
  "exports": {
24
24
  ".": {
25
- "types": "./dist/core.d.ts",
25
+ "types": "./dist/core/core.d.ts",
26
26
  "import": "./dist/core.js"
27
27
  },
28
28
  "./plugin": {
29
- "types": "./dist/plugin.d.ts",
29
+ "types": "./dist/plugin/plugin.d.ts",
30
30
  "import": "./dist/plugin.js"
31
31
  }
32
32
  },
@@ -37,19 +37,20 @@
37
37
  "micromatch": "4.0.5"
38
38
  },
39
39
  "peerDependencies": {
40
- "@blinkk/root": "3.0.1",
40
+ "@blinkk/root": "3.0.3",
41
41
  "preact": ">=10"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/body-parser": "1.19.3",
45
45
  "@types/micromatch": "4.0.6",
46
- "@types/node": "20.11.25",
46
+ "@types/node": "25.9.1",
47
+ "esbuild": "0.28.0",
47
48
  "preact": "10.27.1",
48
- "tsup": "8.5.0",
49
- "@blinkk/root": "3.0.1"
49
+ "typescript": "6.0.3",
50
+ "@blinkk/root": "3.0.3"
50
51
  },
51
52
  "scripts": {
52
- "build": "rm -rf dist && tsup-node",
53
+ "build": "node ../../scripts/build-esbuild.mjs ./esbuild.config.json",
53
54
  "dev": "pnpm build --watch",
54
55
  "test": "pnpm build"
55
56
  }
package/dist/core.d.ts DELETED
@@ -1,8 +0,0 @@
1
- declare function hashPassword(password: string): Promise<{
2
- hash: string;
3
- salt: string;
4
- }>;
5
- declare function verifyPassword(password: string, hash: string, salt: string): Promise<boolean>;
6
- declare function generateHash(password: string, salt: string): Promise<string>;
7
-
8
- export { generateHash, hashPassword, verifyPassword };