vg-coder-cli 2.0.45 → 2.0.47

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.
@@ -2,11 +2,11 @@
2
2
  /******/ "use strict";
3
3
  /******/ var __webpack_modules__ = ({
4
4
 
5
- /***/ "./chrome/src/script-injector.ts":
5
+ /***/ "./chrome/src/script-injector.ts"
6
6
  /*!***************************************!*\
7
7
  !*** ./chrome/src/script-injector.ts ***!
8
8
  \***************************************/
9
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
10
10
 
11
11
  __webpack_require__.r(__webpack_exports__);
12
12
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -319,13 +319,13 @@ class ScriptInjector {
319
319
  }
320
320
 
321
321
 
322
- /***/ }),
322
+ /***/ },
323
323
 
324
- /***/ "./chrome/src/utils/ai-domains.ts":
324
+ /***/ "./chrome/src/utils/ai-domains.ts"
325
325
  /*!****************************************!*\
326
326
  !*** ./chrome/src/utils/ai-domains.ts ***!
327
327
  \****************************************/
328
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
328
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
329
329
 
330
330
  __webpack_require__.r(__webpack_exports__);
331
331
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -363,13 +363,13 @@ function isAIChatDomain(hostname) {
363
363
  }
364
364
 
365
365
 
366
- /***/ }),
366
+ /***/ },
367
367
 
368
- /***/ "./chrome/src/utils/injector-script.ts":
368
+ /***/ "./chrome/src/utils/injector-script.ts"
369
369
  /*!*********************************************!*\
370
370
  !*** ./chrome/src/utils/injector-script.ts ***!
371
371
  \*********************************************/
372
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
372
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
373
373
 
374
374
  __webpack_require__.r(__webpack_exports__);
375
375
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -423,7 +423,7 @@ const VG_CODER_INJECTOR_SCRIPT = `
423
423
  `;
424
424
 
425
425
 
426
- /***/ })
426
+ /***/ }
427
427
 
428
428
  /******/ });
429
429
  /************************************************************************/
@@ -445,6 +445,12 @@ const VG_CODER_INJECTOR_SCRIPT = `
445
445
  /******/ };
446
446
  /******/
447
447
  /******/ // Execute the module function
448
+ /******/ if (!(moduleId in __webpack_modules__)) {
449
+ /******/ delete __webpack_module_cache__[moduleId];
450
+ /******/ var e = new Error("Cannot find module '" + moduleId + "'");
451
+ /******/ e.code = 'MODULE_NOT_FOUND';
452
+ /******/ throw e;
453
+ /******/ }
448
454
  /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
449
455
  /******/
450
456
  /******/ // Return the exports of the module
@@ -604,6 +610,32 @@ const setupRemoveExtensionListener = () => __awaiter(void 0, void 0, void 0, fun
604
610
  });
605
611
  // Setup remove extension listener
606
612
  setupRemoveExtensionListener();
613
+ // Bridge: VETGO_PROXY_FETCH from MAIN world → background → reply via postMessage
614
+ window.addEventListener('message', (event) => {
615
+ var _a;
616
+ if (event.source !== window)
617
+ return;
618
+ if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) !== 'VETGO_PROXY_FETCH')
619
+ return;
620
+ const { reqId, url, opts } = event.data;
621
+ chrome.runtime.sendMessage({ action: 'PROXY_FETCH', url, opts }, (response) => {
622
+ window.postMessage(Object.assign({ type: 'VETGO_PROXY_FETCH_REPLY', reqId }, (response || { ok: false, error: 'no_response' })), '*');
623
+ });
624
+ });
625
+ // Bridge: VETGO_CAPTURE from MAIN world → background calls
626
+ // chrome.tabs.captureVisibleTab — native screenshot of the active tab in the
627
+ // current window. Reply via postMessage with dataUrl.
628
+ window.addEventListener('message', (event) => {
629
+ var _a;
630
+ if (event.source !== window)
631
+ return;
632
+ if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) !== 'VETGO_CAPTURE')
633
+ return;
634
+ const { reqId, opts } = event.data;
635
+ chrome.runtime.sendMessage({ action: 'CAPTURE_TAB', opts: opts || {} }, (response) => {
636
+ window.postMessage(Object.assign({ type: 'VETGO_CAPTURE_REPLY', reqId }, (response || { ok: false, error: 'no_response' })), '*');
637
+ });
638
+ });
607
639
  // Setup CDP click bridge
608
640
  // Listens for CDP click requests from MAIN world
609
641
  window.addEventListener('message', (event) => {
@@ -632,4 +664,4 @@ console.log('✅ VetGo CDP Click Bridge initialized');
632
664
 
633
665
  /******/ })()
634
666
  ;
635
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QzthQUN2QztpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxLQUFLLENBQUMsQ0FBQzthQUN2RDtRQUNILENBQUMsQ0FDRixDQUFDO0tBQ0g7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3ZnLWNvZGVyLy4vY2hyb21lL3NyYy9zY3JpcHQtaW5qZWN0b3IudHMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvc3JjL3V0aWxzL2FpLWRvbWFpbnMudHMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvc3JjL3V0aWxzL2luamVjdG9yLXNjcmlwdC50cyIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3ZnLWNvZGVyLy4vY2hyb21lL3NyYy9jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEFsdGVybmF0aXZlIHNjcmlwdCBpbmplY3Rpb24gbWV0aG9kcyBmb3IgQ1NQLXJlc3RyaWN0ZWQgZW52aXJvbm1lbnRzXG5cbmV4cG9ydCBjbGFzcyBTY3JpcHRJbmplY3RvciB7XG5cbiAgLyoqXG4gICAqIERldGVjdCBpZiBzaXRlIGhhcyBzdHJpY3QgQ1NQIHRoYXQgYmxvY2tzIGJsb2IvZGF0YSBVUkxzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXRlY3RTdHJpY3RDU1AoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGZvciBDU1AgbWV0YSB0YWdzXG4gICAgICBjb25zdCBjc3BNZXRhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ21ldGFbaHR0cC1lcXVpdj1cIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNzcE1ldGFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBjc3BNZXRhc1tpXTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IG1ldGEuZ2V0QXR0cmlidXRlKCdjb250ZW50JykgfHwgJyc7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCdzY3JpcHQtc3JjJykgJiYgIWNvbnRlbnQuaW5jbHVkZXMoJ2Jsb2I6JykgJiYgIWNvbnRlbnQuaW5jbHVkZXMoJ2RhdGE6JykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBjb21tb24gc3RyaWN0IENTUCBkb21haW5zXG4gICAgICBjb25zdCBzdHJpY3REb21haW5zID0gW1xuICAgICAgICAnbWlkam91cm5leS5jb20nLFxuICAgICAgICAnb3BlbmFpLmNvbScsXG4gICAgICAgICdnaXRodWIuY29tJyxcbiAgICAgICAgJ2dvb2dsZS5jb20nLFxuICAgICAgICAnZ29vZ2xldGFnbWFuYWdlci5jb20nLFxuICAgICAgICAnZmFjZWJvb2suY29tJyxcbiAgICAgICAgJ3R3aXR0ZXIuY29tJyxcbiAgICAgICAgJ2xpbmtlZGluLmNvbSdcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gc3RyaWN0RG9tYWlucy5zb21lKGRvbWFpbiA9PiBob3N0bmFtZS5pbmNsdWRlcyhkb21haW4pKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQ1NQIGRldGVjdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBnZXQgaGVhZCBlbGVtZW50IG9yIHdhaXQgZm9yIGl0XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRIZWFkRWxlbWVudCgpOiBQcm9taXNlPEhUTUxIZWFkRWxlbWVudD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgdHJ5R2V0SGVhZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICAgICAgaWYgKGhlYWQpIHtcbiAgICAgICAgICByZXNvbHZlKGhlYWQgYXMgSFRNTEhlYWRFbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBubyBoZWFkLCB3YWl0IGZvciBET01cbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCB0cnlHZXRIZWFkLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGhlYWQgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICAgIGNvbnN0IG5ld0hlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoZWFkJyk7XG4gICAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKG5ld0hlYWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShuZXdIZWFkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTGFzdCByZXNvcnQ6IHdhaXQgYSBiaXQgYW5kIHRyeSBhZ2FpblxuICAgICAgICAgICAgc2V0VGltZW91dCh0cnlHZXRIZWFkLCAxMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdHJ5R2V0SGVhZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAxOiBCbG9iIFVSTCBpbmplY3Rpb24gKHdvcmtzIGluIG1vc3QgY2FzZXMpXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5qZWN0VmlhQmxvYihzY3JpcHQ6IHN0cmluZywgYWN0aW9uVHlwZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbc2NyaXB0XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcgfSk7XG4gICAgICBjb25zdCBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0RWxlbWVudC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBzY3JpcHRFbGVtZW50LmlkID0gYWN0aW9uVHlwZTtcbiAgICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gYmxvYlVybDtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNjcmlwdEVsZW1lbnQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY3JpcHRFbGVtZW50Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSBhd2FpdCB0aGlzLmdldEhlYWRFbGVtZW50KCk7XG4gICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGhlYWQgZWxlbWVudDonLCBlcnJvcik7XG4gICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Jsb2IgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAyOiBEYXRhIFVSTCBpbmplY3Rpb24gKGZhbGxiYWNrKVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluamVjdFZpYURhdGFVcmwoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhVXJsID0gJ2RhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsJyArIGJ0b2Eoc2NyaXB0KTtcbiAgICAgIGNvbnN0IHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdEVsZW1lbnQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgc2NyaXB0RWxlbWVudC5pZCA9IGFjdGlvblR5cGUgKyAnX2RhdGEnO1xuICAgICAgc2NyaXB0RWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2NyaXB0RWxlbWVudC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHRydWUpO1xuICAgICAgICBzY3JpcHRFbGVtZW50Lm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKGZhbHNlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSBhd2FpdCB0aGlzLmdldEhlYWRFbGVtZW50KCk7XG4gICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGdldCBoZWFkIGVsZW1lbnQgZm9yIGRhdGEgVVJMOicpO1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ0RhdGEgVVJMIGluamVjdGlvbiBmYWlsZWQ6Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAzOiBQb3N0TWVzc2FnZSBicmlkZ2UgaW5qZWN0aW9uXG4gICAqL1xuICBzdGF0aWMgaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgYnJpZGdlIHNjcmlwdCB0aGF0IGxpc3RlbnMgZm9yIHBvc3RNZXNzYWdlXG4gICAgICAgIGNvbnN0IGJyaWRnZVNjcmlwdCA9IGBcbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cgfHwgIWV2ZW50LmRhdGEudHlwZSB8fCBldmVudC5kYXRhLnR5cGUgIT09ICdWRVRHT19TQ1JJUFRfSU5KRUNUJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBmdW5jID0gbmV3IEZ1bmN0aW9uKGV2ZW50LmRhdGEuc2NyaXB0KTtcbiAgICAgICAgICAgICAgZnVuYygpO1xuICAgICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2Uoe3R5cGU6ICdWRVRHT19TQ1JJUFRfU1VDQ0VTUycsIGFjdGlvblR5cGU6IGV2ZW50LmRhdGEuYWN0aW9uVHlwZX0sICcqJyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdQb3N0TWVzc2FnZSBzY3JpcHQgZXhlY3V0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7dHlwZTogJ1ZFVEdPX1NDUklQVF9FUlJPUicsIGFjdGlvblR5cGU6IGV2ZW50LmRhdGEuYWN0aW9uVHlwZSwgZXJyb3I6IGVycm9yLm1lc3NhZ2V9LCAnKicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICBgO1xuICAgICAgICBcbiAgICAgICAgLy8gRmlyc3QgaW5qZWN0IHRoZSBicmlkZ2VcbiAgICAgICAgdGhpcy5pbmplY3RWaWFCbG9iKGJyaWRnZVNjcmlwdCwgYWN0aW9uVHlwZSArICdfYnJpZGdlJykudGhlbigoYnJpZGdlU3VjY2VzcykgPT4ge1xuICAgICAgICAgIGlmIChicmlkZ2VTdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBMaXN0ZW4gZm9yIHJlc3BvbnNlXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cgfHwgIWV2ZW50LmRhdGEudHlwZSkgcmV0dXJuO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEudHlwZSA9PT0gJ1ZFVEdPX1NDUklQVF9TVUNDRVNTJyAmJiBldmVudC5kYXRhLmFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHJlc3BvbnNlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhLnR5cGUgPT09ICdWRVRHT19TQ1JJUFRfRVJST1InICYmIGV2ZW50LmRhdGEuYWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcmVzcG9uc2VIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZXNwb25zZUhhbmRsZXIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTZW5kIHNjcmlwdCB2aWEgcG9zdE1lc3NhZ2VcbiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdWRVRHT19TQ1JJUFRfSU5KRUNUJyxcbiAgICAgICAgICAgICAgc2NyaXB0OiBzY3JpcHQsXG4gICAgICAgICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgICAgICAgIH0sICcqJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgYWZ0ZXIgNSBzZWNvbmRzXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZXNwb25zZUhhbmRsZXIpO1xuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUG9zdE1lc3NhZ2UgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCA0OiBCYWNrZ3JvdW5kIHNjcmlwdCBpbmplY3Rpb24gdmlhIGNocm9tZS5zY3JpcHRpbmdcbiAgICovXG4gIHN0YXRpYyBpbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgICBhY3Rpb246IFwiSU5KRUNUX1NDUklQVFwiLFxuICAgICAgICAgIHNjcmlwdDogc2NyaXB0LFxuICAgICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgICAgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmFja2dyb3VuZCBpbmplY3Rpb24gZmFpbGVkOicsIGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcik7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQmFja2dyb3VuZCBzY3JpcHQgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCA1OiBEaXJlY3QgZXZhbCBpbiBjb250ZW50IHNjcmlwdCBjb250ZXh0IChsYXN0IHJlc29ydClcbiAgICovXG4gIHN0YXRpYyBpbmplY3RWaWFFdmFsKHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBdHRlbXB0aW5nIGRpcmVjdCBldmFsIGZvciAke2FjdGlvblR5cGV9YCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGlzb2xhdGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBvbGx1dGluZyBnbG9iYWwgc2NvcGVcbiAgICAgICAgY29uc3QgaXNvbGF0ZWRFeGVjdXRpb24gPSBuZXcgRnVuY3Rpb24oYFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAke3NjcmlwdH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFdmFsIGV4ZWN1dGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICBgKTtcblxuICAgICAgICBjb25zdCBzdWNjZXNzID0gaXNvbGF0ZWRFeGVjdXRpb24oKTtcbiAgICAgICAgcmVzb2x2ZShzdWNjZXNzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V2YWwgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSBhbGwgbWV0aG9kcyBpbiBzbWFydCBvcmRlciBiYXNlZCBvbiBDU1AgZGV0ZWN0aW9uXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5qZWN0U2NyaXB0KHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBoYXNTdHJpY3RDU1AgPSB0aGlzLmRldGVjdFN0cmljdENTUCgpO1xuXG4gICAgLy8gU21hcnQgbWV0aG9kIG9yZGVyaW5nIGJhc2VkIG9uIENTUCBkZXRlY3Rpb25cbiAgICBjb25zdCBtZXRob2RzID0gaGFzU3RyaWN0Q1NQID8gW1xuICAgICAgLy8gRm9yIHN0cmljdCBDU1Agc2l0ZXMsIHRyeSBiYWNrZ3JvdW5kIGluamVjdGlvbiBmaXJzdFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdCwgYWN0aW9uVHlwZSksXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUV2YWwoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhQmxvYihzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFEYXRhVXJsKHNjcmlwdCwgYWN0aW9uVHlwZSlcbiAgICBdIDogW1xuICAgICAgLy8gRm9yIG5vcm1hbCBzaXRlcywgdHJ5IGJsb2IgZmlyc3QgKGZhc3Rlc3QpXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUJsb2Ioc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhRGF0YVVybChzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdCwgYWN0aW9uVHlwZSksXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUV2YWwoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0LCBhY3Rpb25UeXBlKVxuICAgIF07XG5cbiAgICBjb25zb2xlLmxvZyhgSW5qZWN0aW5nIHNjcmlwdCBmb3IgJHthY3Rpb25UeXBlfSAoU3RyaWN0IENTUDogJHtoYXNTdHJpY3RDU1B9KWApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtZXRob2QgPSBtZXRob2RzW2ldO1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGhhc1N0cmljdENTUCA/XG4gICAgICAgIFsnQmFja2dyb3VuZCcsICdFdmFsJywgJ1Bvc3RNZXNzYWdlJywgJ0Jsb2InLCAnRGF0YVVSTCddW2ldIDpcbiAgICAgICAgWydCbG9iJywgJ0RhdGFVUkwnLCAnQmFja2dyb3VuZCcsICdFdmFsJywgJ1Bvc3RNZXNzYWdlJ11baV07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUcnlpbmcgJHttZXRob2ROYW1lfSBpbmplY3Rpb24uLi5gKTtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IG1ldGhvZCgpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGDinIUgU2NyaXB0IGluamVjdGlvbiBzdWNjZXNzZnVsIHZpYSAke21ldGhvZE5hbWV9IGZvciAke2FjdGlvblR5cGV9YCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYOKdjCAke21ldGhvZE5hbWV9IGluamVjdGlvbiBmYWlsZWQgZm9yICR7YWN0aW9uVHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihg4p2MICR7bWV0aG9kTmFtZX0gaW5qZWN0aW9uIGVycm9yOmAsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGDinYwgQWxsIGluamVjdGlvbiBtZXRob2RzIGZhaWxlZCBmb3IgJHthY3Rpb25UeXBlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiLy8gQUkgQ2hhdCBQcm92aWRlcnMgQ29uZmlndXJhdGlvblxuLy8gRG9tYWlucyBmb3IgYXV0b21hdGljIFZHIENvZGVyIGlmcmFtZSBpbmplY3Rpb25cblxuZXhwb3J0IGNvbnN0IEFJX0RPTUFJTlMgPSBbXG4gICdjaGF0Lm9wZW5haS5jb20nLCAgICAgICAgICAgLy8gQ2hhdEdQVCAob2xkIFVSTClcbiAgJ2NoYXRncHQuY29tJywgICAgICAgICAgICAgICAvLyBDaGF0R1BUIChuZXcgVVJMKVxuICAnZ2VtaW5pLmdvb2dsZS5jb20nLCAgICAgICAgIC8vIEdvb2dsZSBHZW1pbmlcbiAgJ2Fpc3R1ZGlvLmdvb2dsZS5jb20nLCAgICAgICAvLyBHb29nbGUgQUkgU3R1ZGlvXG4gICdjaGF0LmRlZXBzZWVrLmNvbScsICAgICAgICAgLy8gRGVlcFNlZWtcbiAgJ2tpbWkuY29tJywgICAgICAgICAgICAgICAgICAvLyBLaW1pIEFJXG4gICd3d3cua2ltaS5jb20nLCAgICAgICAgICAgICAvLyBLaW1pIEFJICh3d3cpXG4gICdncm9rLmNvbScsICAgICAgICAgICAgICAgICAgLy8gR3Jva1xuICAnY2xhdWRlLmFpJywgICAgICAgICAgICAgICAgIC8vIENsYXVkZSAoQW50aHJvcGljKVxuICAncG9lLmNvbScsICAgICAgICAgICAgICAgICAgIC8vIFBvZVxuICAncGVycGxleGl0eS5haScsICAgICAgICAgICAgLy8gUGVycGxleGl0eVxuICAnd3d3LnBlcnBsZXhpdHkuYWknLCAgICAgICAgLy8gUGVycGxleGl0eSAod3d3KVxuXTtcblxuLyoqXG4gKiBDaGVjayBpZiBkb21haW4gc2hvdWxkIGhhdmUgVkcgQ29kZXIgaWZyYW1lIGluamVjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FJQ2hhdERvbWFpbihob3N0bmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNsZWFuSG9zdG5hbWUgPSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL153d3dcXC4vLCAnJyk7XG4gIGNvbnNvbGUubG9nKCfwn5SNIENoZWNraW5nIEFJIGRvbWFpbjonLCBjbGVhbkhvc3RuYW1lKTtcbiAgXG4gIGNvbnN0IGlzTWF0Y2ggPSBBSV9ET01BSU5TLnNvbWUoZG9tYWluID0+IHtcbiAgICBjb25zdCBjbGVhbkRvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL153d3dcXC4vLCAnJyk7XG4gICAgcmV0dXJuIGNsZWFuSG9zdG5hbWUgPT09IGNsZWFuRG9tYWluIHx8IGNsZWFuSG9zdG5hbWUuZW5kc1dpdGgoJy4nICsgY2xlYW5Eb21haW4pO1xuICB9KTtcbiAgXG4gIGNvbnNvbGUubG9nKCfwn46vIEFJIGRvbWFpbiBtYXRjaDonLCBpc01hdGNoKTtcbiAgcmV0dXJuIGlzTWF0Y2g7XG59XG4iLCIvLyBWRyBDb2RlciBTaGFkb3cgRE9NIEJ1bmRsZSBMb2FkZXJcbi8vIFRoaXMgc2NyaXB0IGZldGNoZXMgdGhlIGNvbXBpbGVkIGJ1bmRsZSBmcm9tIHRoZSBsb2NhbCBzZXJ2ZXIgYW5kIGV4ZWN1dGVzIGl0LlxuXG5leHBvcnQgY29uc3QgVkdfQ09ERVJfSU5KRUNUT1JfU0NSSVBUID0gYFxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIFxuICBjb25zdCBDT05GSUcgPSB7XG4gICAgLy8gVHLhu48gdOG7m2kgZmlsZSBidW5kbGUgduG7q2EgYnVpbGRcbiAgICBCVU5ETEVfVVJMOiAnaHR0cDovL2xvY2FsaG9zdDo2ODY4L2Rpc3QvdmctY29kZXItYnVuZGxlLmpzJyxcbiAgICBDT05UQUlORVJfSUQ6ICd2Zy1jb2Rlci1zaGFkb3ctaG9zdCdcbiAgfTtcbiAgXG4gIC8vIDEuIEtp4buDbSB0cmEgbuG6v3UgxJHDoyBpbmplY3QgcuG7k2lcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKENPTkZJRy5DT05UQUlORVJfSUQpKSB7XG4gICAgY29uc29sZS5sb2coJ+KaoSBWRyBDb2RlciBhbHJlYWR5IGluamVjdGVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc29sZS5sb2coJ/CfmoAgTG9hZGluZyBWRyBDb2RlciBCdW5kbGUgZnJvbTonLCBDT05GSUcuQlVORExFX1VSTCk7XG5cbiAgLy8gMi4gVOG6oW8gU2NyaXB0IFRhZyDEkeG7gyBsb2FkIGJ1bmRsZVxuICAvLyBDw6FjaCBuw6B5IHThu5F0IGjGoW4gZmV0Y2grZXZhbCB2w6wgdOG6rW4gZOG7pW5nIGNhY2hlIHbDoCBkZWJ1ZyBk4buFIGjGoW5cbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIHNjcmlwdC5zcmMgPSBDT05GSUcuQlVORExFX1VSTDtcbiAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgXG4gIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ+KchSBWRyBDb2RlciBCdW5kbGUgTG9hZGVkIFN1Y2Nlc3NmdWxseScpO1xuICB9O1xuICBcbiAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcign4p2MIEZhaWxlZCB0byBsb2FkIFZHIENvZGVyIEJ1bmRsZS4gSXMgdGhlIHNlcnZlciBydW5uaW5nIGF0IHBvcnQgNjg2OD8nKTtcbiAgICAvLyBPcHRpb25hbDogU2hvdyBhIHZpc3VhbCBlcnJvciB0b2FzdCBvbiB0aGUgcGFnZVxuICAgIGNvbnN0IHRvYXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdG9hc3Quc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpmaXhlZDsgdG9wOjIwcHg7IHJpZ2h0OjIwcHg7IGJhY2tncm91bmQ6I2ZmM2IzMDsgY29sb3I6d2hpdGU7IHBhZGRpbmc6MTBweCAyMHB4OyBib3JkZXItcmFkaXVzOjhweDsgei1pbmRleDo5OTk5OTk7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGJveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMik7JztcbiAgICB0b2FzdC50ZXh0Q29udGVudCA9ICfimqDvuI8gVkcgQ29kZXIgQ29ubmVjdGlvbiBGYWlsZWQgKElzIFNlcnZlciBSdW5uaW5nPyknO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodG9hc3QpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdG9hc3QucmVtb3ZlKCksIDUwMDApO1xuICB9O1xuXG4gIC8vIDMuIEluamVjdCB2w6BvIEhlYWQgaG/hurdjIEJvZHlcbiAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblxufSkoKTtcbmA7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IFNjcmlwdEluamVjdG9yIH0gZnJvbSAnLi9zY3JpcHQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaXNBSUNoYXREb21haW4gfSBmcm9tICcuL3V0aWxzL2FpLWRvbWFpbnMnO1xuaW1wb3J0IHsgVkdfQ09ERVJfSU5KRUNUT1JfU0NSSVBUIH0gZnJvbSAnLi91dGlscy9pbmplY3Rvci1zY3JpcHQnO1xuXG5jb25zdCBhZGRTY3JpcHQgPSBhc3luYyAoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBTY3JpcHRJbmplY3Rvci5pbmplY3RTY3JpcHQoc2NyaXB0LCBhY3Rpb25UeXBlKTtcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FsbCBzY3JpcHQgaW5qZWN0aW9uIG1ldGhvZHMgZmFpbGVkIGZvcjonLCBhY3Rpb25UeXBlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignU2NyaXB0IGluamVjdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gIH1cbn1cbi8vIFdhaXQgZm9yIERPTSB0byBiZSByZWFkeSBiZWZvcmUgZXhlY3V0aW5nXG5jb25zdCB3YWl0Rm9yRE9NID0gKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gcmVzb2x2ZSgpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG5jb25zdCBpbml0aWFsaXplQ29udHJvbGxlciA9IGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBFbnN1cmUgRE9NIGlzIHJlYWR5XG4gICAgYXdhaXQgd2FpdEZvckRPTSgpO1xuXG4gICAgY29uc3QgY3VycmVudEhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnJlcGxhY2UoLyhodHRwcz86XFwvXFwvKT8od3d3Lik/L2ksICcnKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIEFJIGNoYXQgZG9tYWluIC0gdXNlIGJ1bmRsZWQgaW5qZWN0b3JcbiAgICBpZiAoaXNBSUNoYXREb21haW4oY3VycmVudEhvc3RuYW1lKSkge1xuICAgICAgY29uc29sZS5sb2coJ/CfpJYgQUkgY2hhdCBkb21haW4gZGV0ZWN0ZWQ6JywgY3VycmVudEhvc3RuYW1lKTtcbiAgICAgIC8vIEV4ZWN1dGUgYnVuZGxlZCBpbmplY3RvciBzY3JpcHRcbiAgICAgIGF3YWl0IGFkZFNjcmlwdChWR19DT0RFUl9JTkpFQ1RPUl9TQ1JJUFQsICdWR19DT0RFUl9JTkpFQ1RPUicpO1xuICAgIH1cblxuICAgIC8vIEZvciBub24tQUkgZG9tYWlucywgY29udGludWUgd2l0aCBGaXJlYmFzZSBzY3JpcHQgbG9hZGluZ1xuICAgIGNvbnN0IGFjdGlvblR5cGUgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KFwiYWN0aW9uVHlwZVwiKSB8fCBcIk1BSU5cIjtcbiAgICBjb25zdCBjYWNoZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYWN0aW9uVHlwZSk7XG5cbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIGF3YWl0IGFkZFNjcmlwdChjYWNoZSwgYWN0aW9uVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgYWN0aW9uOiBcIkNPTlRST0xMRVJcIixcbiAgICAgICAgZG9tYWluOiBjdXJyZW50SG9zdG5hbWUsXG4gICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgIH0sIGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignUnVudGltZSBlcnJvcjonLCBjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc2NyaXB0KSB7XG4gICAgICAgICAgY29uc3QgZnVsbFNjcmlwdCA9IGB2YXIgY2hyb21lSWQgPSBcIiR7Y2hyb21lLnJ1bnRpbWUuaWR9XCI7ICR7cmVzcG9uc2Uuc2NyaXB0fWA7XG4gICAgICAgICAgYXdhaXQgYWRkU2NyaXB0KGZ1bGxTY3JpcHQsIGFjdGlvblR5cGUpO1xuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYWN0aW9uVHlwZSwgZnVsbFNjcmlwdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignQ29udHJvbGxlciBpbml0aWFsaXphdGlvbiBlcnJvcjonLCBlcnIpO1xuICB9XG59O1xuXG4vLyBJbml0aWFsaXplIGNvbnRyb2xsZXJcbmluaXRpYWxpemVDb250cm9sbGVyKCk7XG5jb25zdCBzZXR1cFJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyID0gYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFdhaXQgZm9yIERPTSBhbmQgYm9keSB0byBiZSByZWFkeVxuICAgIGF3YWl0IHdhaXRGb3JET00oKTtcblxuICAgIC8vIFdhaXQgZm9yIGJvZHkgZWxlbWVudFxuICAgIGNvbnN0IHdhaXRGb3JCb2R5ID0gKCk6IFByb21pc2U8SFRNTEJvZHlFbGVtZW50PiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tCb2R5ID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIHJlc29sdmUoYm9keSBhcyBIVE1MQm9keUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrQm9keSwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNoZWNrQm9keSgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB3YWl0Rm9yQm9keSgpO1xuXG4gICAgLy8gY2FjaCBkdW5nOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ1JFTU9WRV9FWFRFTlNJT04nLCB7IGRldGFpbDogeyBrZXk6ICd2YWx1ZScgfSB9KSk7XG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdSRU1PVkVfRVhURU5TSU9OJywgZnVuY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgICAgY29uc29sZS5sb2coZXZlbnQuZGV0YWlsKTsgLy8geyBrZXk6ICd2YWx1ZScgfVxuICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uoe2FjdGlvbjogXCJSRU1PVkVfRVhURU5TSU9OXCIsIGRhdGE6IGV2ZW50LmRldGFpbH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignUnVudGltZSBlcnJvcjonLCBjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygndHUgaHV5IHRoYW5oIGNvbmcnLCByZXNwb25zZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignU2V0dXAgcmVtb3ZlIGV4dGVuc2lvbiBsaXN0ZW5lciBlcnJvcjonLCBlcnIpO1xuICB9XG59O1xuXG4vLyBTZXR1cCByZW1vdmUgZXh0ZW5zaW9uIGxpc3RlbmVyXG5zZXR1cFJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyKCk7XG5cbi8vIFNldHVwIENEUCBjbGljayBicmlkZ2Vcbi8vIExpc3RlbnMgZm9yIENEUCBjbGljayByZXF1ZXN0cyBmcm9tIE1BSU4gd29ybGRcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKGV2ZW50KSA9PiB7XG4gIGlmIChldmVudC5zb3VyY2UgIT09IHdpbmRvdykgcmV0dXJuO1xuICBcbiAgaWYgKGV2ZW50LmRhdGEudHlwZSA9PT0gJ1ZFVEdPX0NEUF9DTElDSycpIHtcbiAgICBjb25zdCB7IHgsIHkgfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc29sZS5sb2coYPCfk4sgQ29udGVudCBzY3JpcHQgcmVjZWl2ZWQgQ0RQIGNsaWNrIHJlcXVlc3Q6ICgke3h9LCAke3l9KWApO1xuICAgIFxuICAgIC8vIEZvcndhcmQgdG8gYmFja2dyb3VuZCBzY3JpcHRcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShcbiAgICAgIHsgYWN0aW9uOiAnQ0RQX0NMSUNLJywgeCwgeSB9LFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgQ0RQIGNsaWNrIGZhaWxlZDonLCBjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ+KchSBDRFAgY2xpY2sgc3VjY2Vzc2Z1bCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBDRFAgY2xpY2sgZmFpbGVkOicsIHJlc3BvbnNlPy5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG59KTtcblxuY29uc29sZS5sb2coJ+KchSBWZXRHbyBDRFAgQ2xpY2sgQnJpZGdlIGluaXRpYWxpemVkJyk7XG5cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
667
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtnQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2hFO2lCQUFNLElBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLE9BQU8sRUFBRTtnQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2FBQ3ZDO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3ZEO1FBQ0gsQ0FBQyxDQUNGLENBQUM7S0FDSDtBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvc3JjL3NjcmlwdC1pbmplY3Rvci50cyIsIndlYnBhY2s6Ly92Zy1jb2Rlci8uL2Nocm9tZS9zcmMvdXRpbHMvYWktZG9tYWlucy50cyIsIndlYnBhY2s6Ly92Zy1jb2Rlci8uL2Nocm9tZS9zcmMvdXRpbHMvaW5qZWN0b3Itc2NyaXB0LnRzIiwid2VicGFjazovL3ZnLWNvZGVyL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3ZnLWNvZGVyL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3ZnLWNvZGVyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvc3JjL2NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQWx0ZXJuYXRpdmUgc2NyaXB0IGluamVjdGlvbiBtZXRob2RzIGZvciBDU1AtcmVzdHJpY3RlZCBlbnZpcm9ubWVudHNcblxuZXhwb3J0IGNsYXNzIFNjcmlwdEluamVjdG9yIHtcblxuICAvKipcbiAgICogRGV0ZWN0IGlmIHNpdGUgaGFzIHN0cmljdCBDU1AgdGhhdCBibG9ja3MgYmxvYi9kYXRhIFVSTHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRldGVjdFN0cmljdENTUCgpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgZm9yIENTUCBtZXRhIHRhZ3NcbiAgICAgIGNvbnN0IGNzcE1ldGFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbWV0YVtodHRwLWVxdWl2PVwiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl0nKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3NwTWV0YXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IGNzcE1ldGFzW2ldO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gbWV0YS5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKSB8fCAnJztcbiAgICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ3NjcmlwdC1zcmMnKSAmJiAhY29udGVudC5pbmNsdWRlcygnYmxvYjonKSAmJiAhY29udGVudC5pbmNsdWRlcygnZGF0YTonKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGNvbW1vbiBzdHJpY3QgQ1NQIGRvbWFpbnNcbiAgICAgIGNvbnN0IHN0cmljdERvbWFpbnMgPSBbXG4gICAgICAgICdtaWRqb3VybmV5LmNvbScsXG4gICAgICAgICdvcGVuYWkuY29tJyxcbiAgICAgICAgJ2dpdGh1Yi5jb20nLFxuICAgICAgICAnZ29vZ2xlLmNvbScsXG4gICAgICAgICdnb29nbGV0YWdtYW5hZ2VyLmNvbScsXG4gICAgICAgICdmYWNlYm9vay5jb20nLFxuICAgICAgICAndHdpdHRlci5jb20nLFxuICAgICAgICAnbGlua2VkaW4uY29tJ1xuICAgICAgXTtcblxuICAgICAgY29uc3QgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBzdHJpY3REb21haW5zLnNvbWUoZG9tYWluID0+IGhvc3RuYW1lLmluY2x1ZGVzKGRvbWFpbikpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDU1AgZGV0ZWN0aW9uIGVycm9yOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGdldCBoZWFkIGVsZW1lbnQgb3Igd2FpdCBmb3IgaXRcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldEhlYWRFbGVtZW50KCk6IFByb21pc2U8SFRNTEhlYWRFbGVtZW50PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCB0cnlHZXRIZWFkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgICAgICBpZiAoaGVhZCkge1xuICAgICAgICAgIHJlc29sdmUoaGVhZCBhcyBIVE1MSGVhZEVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG5vIGhlYWQsIHdhaXQgZm9yIERPTVxuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIHRyeUdldEhlYWQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDcmVhdGUgaGVhZCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgY29uc3QgbmV3SGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2hlYWQnKTtcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQobmV3SGVhZCk7XG4gICAgICAgICAgICByZXNvbHZlKG5ld0hlYWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBMYXN0IHJlc29ydDogd2FpdCBhIGJpdCBhbmQgdHJ5IGFnYWluXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRyeUdldEhlYWQsIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0cnlHZXRIZWFkKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIDE6IEJsb2IgVVJMIGluamVjdGlvbiAod29ya3MgaW4gbW9zdCBjYXNlcylcbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbmplY3RWaWFCbG9iKHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtzY3JpcHRdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JyB9KTtcbiAgICAgIGNvbnN0IGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG4gICAgICBjb25zdCBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRFbGVtZW50LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgIHNjcmlwdEVsZW1lbnQuaWQgPSBhY3Rpb25UeXBlO1xuICAgICAgc2NyaXB0RWxlbWVudC5zcmMgPSBibG9iVXJsO1xuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2NyaXB0RWxlbWVudC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjcmlwdEVsZW1lbnQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpO1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaGVhZCA9IGF3YWl0IHRoaXMuZ2V0SGVhZEVsZW1lbnQoKTtcbiAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgaGVhZCBlbGVtZW50OicsIGVycm9yKTtcbiAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpO1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQmxvYiBpbmplY3Rpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIDI6IERhdGEgVVJMIGluamVjdGlvbiAoZmFsbGJhY2spXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5qZWN0VmlhRGF0YVVybChzY3JpcHQ6IHN0cmluZywgYWN0aW9uVHlwZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGFVcmwgPSAnZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCwnICsgYnRvYShzY3JpcHQpO1xuICAgICAgY29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0RWxlbWVudC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBzY3JpcHRFbGVtZW50LmlkID0gYWN0aW9uVHlwZSArICdfZGF0YSc7XG4gICAgICBzY3JpcHRFbGVtZW50LnNyYyA9IGRhdGFVcmw7XG5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzY3JpcHRFbGVtZW50Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIHNjcmlwdEVsZW1lbnQub25lcnJvciA9ICgpID0+IHJlc29sdmUoZmFsc2UpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaGVhZCA9IGF3YWl0IHRoaXMuZ2V0SGVhZEVsZW1lbnQoKTtcbiAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gZ2V0IGhlYWQgZWxlbWVudCBmb3IgZGF0YSBVUkw6Jyk7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnRGF0YSBVUkwgaW5qZWN0aW9uIGZhaWxlZDonKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIDM6IFBvc3RNZXNzYWdlIGJyaWRnZSBpbmplY3Rpb25cbiAgICovXG4gIHN0YXRpYyBpbmplY3RWaWFQb3N0TWVzc2FnZShzY3JpcHQ6IHN0cmluZywgYWN0aW9uVHlwZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDcmVhdGUgYSBicmlkZ2Ugc2NyaXB0IHRoYXQgbGlzdGVucyBmb3IgcG9zdE1lc3NhZ2VcbiAgICAgICAgY29uc3QgYnJpZGdlU2NyaXB0ID0gYFxuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgIT09IHdpbmRvdyB8fCAhZXZlbnQuZGF0YS50eXBlIHx8IGV2ZW50LmRhdGEudHlwZSAhPT0gJ1ZFVEdPX1NDUklQVF9JTkpFQ1QnKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oZXZlbnQuZGF0YS5zY3JpcHQpO1xuICAgICAgICAgICAgICBmdW5jKCk7XG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7dHlwZTogJ1ZFVEdPX1NDUklQVF9TVUNDRVNTJywgYWN0aW9uVHlwZTogZXZlbnQuZGF0YS5hY3Rpb25UeXBlfSwgJyonKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Bvc3RNZXNzYWdlIHNjcmlwdCBleGVjdXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHt0eXBlOiAnVkVUR09fU0NSSVBUX0VSUk9SJywgYWN0aW9uVHlwZTogZXZlbnQuZGF0YS5hY3Rpb25UeXBlLCBlcnJvcjogZXJyb3IubWVzc2FnZX0sICcqJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIGA7XG4gICAgICAgIFxuICAgICAgICAvLyBGaXJzdCBpbmplY3QgdGhlIGJyaWRnZVxuICAgICAgICB0aGlzLmluamVjdFZpYUJsb2IoYnJpZGdlU2NyaXB0LCBhY3Rpb25UeXBlICsgJ19icmlkZ2UnKS50aGVuKChicmlkZ2VTdWNjZXNzKSA9PiB7XG4gICAgICAgICAgaWYgKGJyaWRnZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIC8vIExpc3RlbiBmb3IgcmVzcG9uc2VcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlSGFuZGxlciA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgIT09IHdpbmRvdyB8fCAhZXZlbnQuZGF0YS50eXBlKSByZXR1cm47XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS50eXBlID09PSAnVkVUR09fU0NSSVBUX1NVQ0NFU1MnICYmIGV2ZW50LmRhdGEuYWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcmVzcG9uc2VIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEudHlwZSA9PT0gJ1ZFVEdPX1NDUklQVF9FUlJPUicgJiYgZXZlbnQuZGF0YS5hY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZXNwb25zZUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHJlc3BvbnNlSGFuZGxlcik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFNlbmQgc2NyaXB0IHZpYSBwb3N0TWVzc2FnZVxuICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgdHlwZTogJ1ZFVEdPX1NDUklQVF9JTkpFQ1QnLFxuICAgICAgICAgICAgICBzY3JpcHQ6IHNjcmlwdCxcbiAgICAgICAgICAgICAgYWN0aW9uVHlwZTogYWN0aW9uVHlwZVxuICAgICAgICAgICAgfSwgJyonKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGltZW91dCBhZnRlciA1IHNlY29uZHNcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHJlc3BvbnNlSGFuZGxlcik7XG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQb3N0TWVzc2FnZSBpbmplY3Rpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIDQ6IEJhY2tncm91bmQgc2NyaXB0IGluamVjdGlvbiB2aWEgY2hyb21lLnNjcmlwdGluZ1xuICAgKi9cbiAgc3RhdGljIGluamVjdFZpYUJhY2tncm91bmQoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uoe1xuICAgICAgICAgIGFjdGlvbjogXCJJTkpFQ1RfU0NSSVBUXCIsXG4gICAgICAgICAgc2NyaXB0OiBzY3JpcHQsXG4gICAgICAgICAgYWN0aW9uVHlwZTogYWN0aW9uVHlwZVxuICAgICAgICB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdCYWNrZ3JvdW5kIGluamVjdGlvbiBmYWlsZWQ6JywgY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN1Y2Nlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdCYWNrZ3JvdW5kIHNjcmlwdCBpbmplY3Rpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIDU6IERpcmVjdCBldmFsIGluIGNvbnRlbnQgc2NyaXB0IGNvbnRleHQgKGxhc3QgcmVzb3J0KVxuICAgKi9cbiAgc3RhdGljIGluamVjdFZpYUV2YWwoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYEF0dGVtcHRpbmcgZGlyZWN0IGV2YWwgZm9yICR7YWN0aW9uVHlwZX1gKTtcblxuICAgICAgICAvLyBDcmVhdGUgaXNvbGF0ZWQgZnVuY3Rpb24gdG8gYXZvaWQgcG9sbHV0aW5nIGdsb2JhbCBzY29wZVxuICAgICAgICBjb25zdCBpc29sYXRlZEV4ZWN1dGlvbiA9IG5ldyBGdW5jdGlvbihgXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICR7c2NyaXB0fVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V2YWwgZXhlY3V0aW9uIGVycm9yOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIGApO1xuXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBpc29sYXRlZEV4ZWN1dGlvbigpO1xuICAgICAgICByZXNvbHZlKHN1Y2Nlc3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXZhbCBpbmplY3Rpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IGFsbCBtZXRob2RzIGluIHNtYXJ0IG9yZGVyIGJhc2VkIG9uIENTUCBkZXRlY3Rpb25cbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbmplY3RTY3JpcHQoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGhhc1N0cmljdENTUCA9IHRoaXMuZGV0ZWN0U3RyaWN0Q1NQKCk7XG5cbiAgICAvLyBTbWFydCBtZXRob2Qgb3JkZXJpbmcgYmFzZWQgb24gQ1NQIGRldGVjdGlvblxuICAgIGNvbnN0IG1ldGhvZHMgPSBoYXNTdHJpY3RDU1AgPyBbXG4gICAgICAvLyBGb3Igc3RyaWN0IENTUCBzaXRlcywgdHJ5IGJhY2tncm91bmQgaW5qZWN0aW9uIGZpcnN0XG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUJhY2tncm91bmQoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhRXZhbChzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFQb3N0TWVzc2FnZShzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFCbG9iKHNjcmlwdCwgYWN0aW9uVHlwZSksXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYURhdGFVcmwoc2NyaXB0LCBhY3Rpb25UeXBlKVxuICAgIF0gOiBbXG4gICAgICAvLyBGb3Igbm9ybWFsIHNpdGVzLCB0cnkgYmxvYiBmaXJzdCAoZmFzdGVzdClcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhQmxvYihzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFEYXRhVXJsKHNjcmlwdCwgYWN0aW9uVHlwZSksXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUJhY2tncm91bmQoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhRXZhbChzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFQb3N0TWVzc2FnZShzY3JpcHQsIGFjdGlvblR5cGUpXG4gICAgXTtcblxuICAgIGNvbnNvbGUubG9nKGBJbmplY3Rpbmcgc2NyaXB0IGZvciAke2FjdGlvblR5cGV9IChTdHJpY3QgQ1NQOiAke2hhc1N0cmljdENTUH0pYCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaGFzU3RyaWN0Q1NQID9cbiAgICAgICAgWydCYWNrZ3JvdW5kJywgJ0V2YWwnLCAnUG9zdE1lc3NhZ2UnLCAnQmxvYicsICdEYXRhVVJMJ11baV0gOlxuICAgICAgICBbJ0Jsb2InLCAnRGF0YVVSTCcsICdCYWNrZ3JvdW5kJywgJ0V2YWwnLCAnUG9zdE1lc3NhZ2UnXVtpXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFRyeWluZyAke21ldGhvZE5hbWV9IGluamVjdGlvbi4uLmApO1xuICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgbWV0aG9kKCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYOKchSBTY3JpcHQgaW5qZWN0aW9uIHN1Y2Nlc3NmdWwgdmlhICR7bWV0aG9kTmFtZX0gZm9yICR7YWN0aW9uVHlwZX1gKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhg4p2MICR7bWV0aG9kTmFtZX0gaW5qZWN0aW9uIGZhaWxlZCBmb3IgJHthY3Rpb25UeXBlfWApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGDinYwgJHttZXRob2ROYW1lfSBpbmplY3Rpb24gZXJyb3I6YCwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoYOKdjCBBbGwgaW5qZWN0aW9uIG1ldGhvZHMgZmFpbGVkIGZvciAke2FjdGlvblR5cGV9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCIvLyBBSSBDaGF0IFByb3ZpZGVycyBDb25maWd1cmF0aW9uXG4vLyBEb21haW5zIGZvciBhdXRvbWF0aWMgVkcgQ29kZXIgaWZyYW1lIGluamVjdGlvblxuXG5leHBvcnQgY29uc3QgQUlfRE9NQUlOUyA9IFtcbiAgJ2NoYXQub3BlbmFpLmNvbScsICAgICAgICAgICAvLyBDaGF0R1BUIChvbGQgVVJMKVxuICAnY2hhdGdwdC5jb20nLCAgICAgICAgICAgICAgIC8vIENoYXRHUFQgKG5ldyBVUkwpXG4gICdnZW1pbmkuZ29vZ2xlLmNvbScsICAgICAgICAgLy8gR29vZ2xlIEdlbWluaVxuICAnYWlzdHVkaW8uZ29vZ2xlLmNvbScsICAgICAgIC8vIEdvb2dsZSBBSSBTdHVkaW9cbiAgJ2NoYXQuZGVlcHNlZWsuY29tJywgICAgICAgICAvLyBEZWVwU2Vla1xuICAna2ltaS5jb20nLCAgICAgICAgICAgICAgICAgIC8vIEtpbWkgQUlcbiAgJ3d3dy5raW1pLmNvbScsICAgICAgICAgICAgIC8vIEtpbWkgQUkgKHd3dylcbiAgJ2dyb2suY29tJywgICAgICAgICAgICAgICAgICAvLyBHcm9rXG4gICdjbGF1ZGUuYWknLCAgICAgICAgICAgICAgICAgLy8gQ2xhdWRlIChBbnRocm9waWMpXG4gICdwb2UuY29tJywgICAgICAgICAgICAgICAgICAgLy8gUG9lXG4gICdwZXJwbGV4aXR5LmFpJywgICAgICAgICAgICAvLyBQZXJwbGV4aXR5XG4gICd3d3cucGVycGxleGl0eS5haScsICAgICAgICAvLyBQZXJwbGV4aXR5ICh3d3cpXG5dO1xuXG4vKipcbiAqIENoZWNrIGlmIGRvbWFpbiBzaG91bGQgaGF2ZSBWRyBDb2RlciBpZnJhbWUgaW5qZWN0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQUlDaGF0RG9tYWluKGhvc3RuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgY2xlYW5Ib3N0bmFtZSA9IGhvc3RuYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXnd3d1xcLi8sICcnKTtcbiAgY29uc29sZS5sb2coJ/CflI0gQ2hlY2tpbmcgQUkgZG9tYWluOicsIGNsZWFuSG9zdG5hbWUpO1xuICBcbiAgY29uc3QgaXNNYXRjaCA9IEFJX0RPTUFJTlMuc29tZShkb21haW4gPT4ge1xuICAgIGNvbnN0IGNsZWFuRG9tYWluID0gZG9tYWluLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXnd3d1xcLi8sICcnKTtcbiAgICByZXR1cm4gY2xlYW5Ib3N0bmFtZSA9PT0gY2xlYW5Eb21haW4gfHwgY2xlYW5Ib3N0bmFtZS5lbmRzV2l0aCgnLicgKyBjbGVhbkRvbWFpbik7XG4gIH0pO1xuICBcbiAgY29uc29sZS5sb2coJ/Cfjq8gQUkgZG9tYWluIG1hdGNoOicsIGlzTWF0Y2gpO1xuICByZXR1cm4gaXNNYXRjaDtcbn1cbiIsIi8vIFZHIENvZGVyIFNoYWRvdyBET00gQnVuZGxlIExvYWRlclxuLy8gVGhpcyBzY3JpcHQgZmV0Y2hlcyB0aGUgY29tcGlsZWQgYnVuZGxlIGZyb20gdGhlIGxvY2FsIHNlcnZlciBhbmQgZXhlY3V0ZXMgaXQuXG5cbmV4cG9ydCBjb25zdCBWR19DT0RFUl9JTkpFQ1RPUl9TQ1JJUFQgPSBgXG4oZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgXG4gIGNvbnN0IENPTkZJRyA9IHtcbiAgICAvLyBUcuG7jyB04bubaSBmaWxlIGJ1bmRsZSB24burYSBidWlsZFxuICAgIEJVTkRMRV9VUkw6ICdodHRwOi8vbG9jYWxob3N0OjY4NjgvZGlzdC92Zy1jb2Rlci1idW5kbGUuanMnLFxuICAgIENPTlRBSU5FUl9JRDogJ3ZnLWNvZGVyLXNoYWRvdy1ob3N0J1xuICB9O1xuICBcbiAgLy8gMS4gS2nhu4NtIHRyYSBu4bq/dSDEkcOjIGluamVjdCBy4buTaVxuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQ09ORklHLkNPTlRBSU5FUl9JRCkpIHtcbiAgICBjb25zb2xlLmxvZygn4pqhIFZHIENvZGVyIGFscmVhZHkgaW5qZWN0ZWQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zb2xlLmxvZygn8J+agCBMb2FkaW5nIFZHIENvZGVyIEJ1bmRsZSBmcm9tOicsIENPTkZJRy5CVU5ETEVfVVJMKTtcblxuICAvLyAyLiBU4bqhbyBTY3JpcHQgVGFnIMSR4buDIGxvYWQgYnVuZGxlXG4gIC8vIEPDoWNoIG7DoHkgdOG7kXQgaMahbiBmZXRjaCtldmFsIHbDrCB04bqtbiBk4bulbmcgY2FjaGUgdsOgIGRlYnVnIGThu4UgaMahblxuICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgc2NyaXB0LnNyYyA9IENPTkZJRy5CVU5ETEVfVVJMO1xuICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICBcbiAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZygn4pyFIFZHIENvZGVyIEJ1bmRsZSBMb2FkZWQgU3VjY2Vzc2Z1bGx5Jyk7XG4gIH07XG4gIFxuICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCfinYwgRmFpbGVkIHRvIGxvYWQgVkcgQ29kZXIgQnVuZGxlLiBJcyB0aGUgc2VydmVyIHJ1bm5pbmcgYXQgcG9ydCA2ODY4PycpO1xuICAgIC8vIE9wdGlvbmFsOiBTaG93IGEgdmlzdWFsIGVycm9yIHRvYXN0IG9uIHRoZSBwYWdlXG4gICAgY29uc3QgdG9hc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0b2FzdC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkOyB0b3A6MjBweDsgcmlnaHQ6MjBweDsgYmFja2dyb3VuZDojZmYzYjMwOyBjb2xvcjp3aGl0ZTsgcGFkZGluZzoxMHB4IDIwcHg7IGJvcmRlci1yYWRpdXM6OHB4OyB6LWluZGV4Ojk5OTk5OTsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgYm94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsMC4yKTsnO1xuICAgIHRvYXN0LnRleHRDb250ZW50ID0gJ+KaoO+4jyBWRyBDb2RlciBDb25uZWN0aW9uIEZhaWxlZCAoSXMgU2VydmVyIFJ1bm5pbmc/KSc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0b2FzdCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0b2FzdC5yZW1vdmUoKSwgNTAwMCk7XG4gIH07XG5cbiAgLy8gMy4gSW5qZWN0IHbDoG8gSGVhZCBob+G6t2MgQm9keVxuICAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXG59KSgpO1xuYDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0aWYgKCEobW9kdWxlSWQgaW4gX193ZWJwYWNrX21vZHVsZXNfXykpIHtcblx0XHRkZWxldGUgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyBtb2R1bGVJZCArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgeyBTY3JpcHRJbmplY3RvciB9IGZyb20gJy4vc2NyaXB0LWluamVjdG9yJztcbmltcG9ydCB7IGlzQUlDaGF0RG9tYWluIH0gZnJvbSAnLi91dGlscy9haS1kb21haW5zJztcbmltcG9ydCB7IFZHX0NPREVSX0lOSkVDVE9SX1NDUklQVCB9IGZyb20gJy4vdXRpbHMvaW5qZWN0b3Itc2NyaXB0JztcblxuY29uc3QgYWRkU2NyaXB0ID0gYXN5bmMgKHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgU2NyaXB0SW5qZWN0b3IuaW5qZWN0U2NyaXB0KHNjcmlwdCwgYWN0aW9uVHlwZSk7XG4gICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdBbGwgc2NyaXB0IGluamVjdGlvbiBtZXRob2RzIGZhaWxlZCBmb3I6JywgYWN0aW9uVHlwZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1NjcmlwdCBpbmplY3Rpb24gZXJyb3I6JywgZXJyb3IpO1xuICB9XG59XG4vLyBXYWl0IGZvciBET00gdG8gYmUgcmVhZHkgYmVmb3JlIGV4ZWN1dGluZ1xuY29uc3Qgd2FpdEZvckRPTSA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHJlc29sdmUoKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfVxuICB9KTtcbn07XG5cblxuY29uc3QgaW5pdGlhbGl6ZUNvbnRyb2xsZXIgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gRW5zdXJlIERPTSBpcyByZWFkeVxuICAgIGF3YWl0IHdhaXRGb3JET00oKTtcblxuICAgIGNvbnN0IGN1cnJlbnRIb3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZS5yZXBsYWNlKC8oaHR0cHM/OlxcL1xcLyk/KHd3dy4pPy9pLCAnJyk7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBBSSBjaGF0IGRvbWFpbiAtIHVzZSBidW5kbGVkIGluamVjdG9yXG4gICAgaWYgKGlzQUlDaGF0RG9tYWluKGN1cnJlbnRIb3N0bmFtZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCfwn6SWIEFJIGNoYXQgZG9tYWluIGRldGVjdGVkOicsIGN1cnJlbnRIb3N0bmFtZSk7XG4gICAgICAvLyBFeGVjdXRlIGJ1bmRsZWQgaW5qZWN0b3Igc2NyaXB0XG4gICAgICBhd2FpdCBhZGRTY3JpcHQoVkdfQ09ERVJfSU5KRUNUT1JfU0NSSVBULCAnVkdfQ09ERVJfSU5KRUNUT1InKTtcbiAgICB9XG5cbiAgICAvLyBGb3Igbm9uLUFJIGRvbWFpbnMsIGNvbnRpbnVlIHdpdGggRmlyZWJhc2Ugc2NyaXB0IGxvYWRpbmdcbiAgICBjb25zdCBhY3Rpb25UeXBlID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChcImFjdGlvblR5cGVcIikgfHwgXCJNQUlOXCI7XG4gICAgY29uc3QgY2FjaGUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGFjdGlvblR5cGUpO1xuXG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICBhd2FpdCBhZGRTY3JpcHQoY2FjaGUsIGFjdGlvblR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7XG4gICAgICAgIGFjdGlvbjogXCJDT05UUk9MTEVSXCIsXG4gICAgICAgIGRvbWFpbjogY3VycmVudEhvc3RuYW1lLFxuICAgICAgICBhY3Rpb25UeXBlOiBhY3Rpb25UeXBlXG4gICAgICB9LCBhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1J1bnRpbWUgZXJyb3I6JywgY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnNjcmlwdCkge1xuICAgICAgICAgIGNvbnN0IGZ1bGxTY3JpcHQgPSBgdmFyIGNocm9tZUlkID0gXCIke2Nocm9tZS5ydW50aW1lLmlkfVwiOyAke3Jlc3BvbnNlLnNjcmlwdH1gO1xuICAgICAgICAgIGF3YWl0IGFkZFNjcmlwdChmdWxsU2NyaXB0LCBhY3Rpb25UeXBlKTtcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGFjdGlvblR5cGUsIGZ1bGxTY3JpcHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0NvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb24gZXJyb3I6JywgZXJyKTtcbiAgfVxufTtcblxuLy8gSW5pdGlhbGl6ZSBjb250cm9sbGVyXG5pbml0aWFsaXplQ29udHJvbGxlcigpO1xuY29uc3Qgc2V0dXBSZW1vdmVFeHRlbnNpb25MaXN0ZW5lciA9IGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBXYWl0IGZvciBET00gYW5kIGJvZHkgdG8gYmUgcmVhZHlcbiAgICBhd2FpdCB3YWl0Rm9yRE9NKCk7XG5cbiAgICAvLyBXYWl0IGZvciBib2R5IGVsZW1lbnRcbiAgICBjb25zdCB3YWl0Rm9yQm9keSA9ICgpOiBQcm9taXNlPEhUTUxCb2R5RWxlbWVudD4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrQm9keSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xuICAgICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICByZXNvbHZlKGJvZHkgYXMgSFRNTEJvZHlFbGVtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0JvZHksIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjaGVja0JvZHkoKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBib2R5ID0gYXdhaXQgd2FpdEZvckJvZHkoKTtcblxuICAgIC8vIGNhY2ggZHVuZzogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdSRU1PVkVfRVhURU5TSU9OJywgeyBkZXRhaWw6IHsga2V5OiAndmFsdWUnIH0gfSkpO1xuICAgIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcignUkVNT1ZFX0VYVEVOU0lPTicsIGZ1bmN0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGV2ZW50LmRldGFpbCk7IC8vIHsga2V5OiAndmFsdWUnIH1cbiAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHthY3Rpb246IFwiUkVNT1ZFX0VYVEVOU0lPTlwiLCBkYXRhOiBldmVudC5kZXRhaWx9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1J1bnRpbWUgZXJyb3I6JywgY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ3R1IGh1eSB0aGFuaCBjb25nJywgcmVzcG9uc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1NldHVwIHJlbW92ZSBleHRlbnNpb24gbGlzdGVuZXIgZXJyb3I6JywgZXJyKTtcbiAgfVxufTtcblxuLy8gU2V0dXAgcmVtb3ZlIGV4dGVuc2lvbiBsaXN0ZW5lclxuc2V0dXBSZW1vdmVFeHRlbnNpb25MaXN0ZW5lcigpO1xuXG4vLyBCcmlkZ2U6IFZFVEdPX1BST1hZX0ZFVENIIGZyb20gTUFJTiB3b3JsZCDihpIgYmFja2dyb3VuZCDihpIgcmVwbHkgdmlhIHBvc3RNZXNzYWdlXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldmVudCkgPT4ge1xuICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cpIHJldHVybjtcbiAgaWYgKGV2ZW50LmRhdGE/LnR5cGUgIT09ICdWRVRHT19QUk9YWV9GRVRDSCcpIHJldHVybjtcbiAgY29uc3QgeyByZXFJZCwgdXJsLCBvcHRzIH0gPSBldmVudC5kYXRhO1xuICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ1BST1hZX0ZFVENIJywgdXJsLCBvcHRzIH0sIChyZXNwb25zZSkgPT4ge1xuICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7IHR5cGU6ICdWRVRHT19QUk9YWV9GRVRDSF9SRVBMWScsIHJlcUlkLCAuLi4ocmVzcG9uc2UgfHwgeyBvazogZmFsc2UsIGVycm9yOiAnbm9fcmVzcG9uc2UnIH0pIH0sICcqJyk7XG4gIH0pO1xufSk7XG5cbi8vIEJyaWRnZTogVkVUR09fQ0FQVFVSRSBmcm9tIE1BSU4gd29ybGQg4oaSIGJhY2tncm91bmQgY2FsbHNcbi8vIGNocm9tZS50YWJzLmNhcHR1cmVWaXNpYmxlVGFiIOKAlCBuYXRpdmUgc2NyZWVuc2hvdCBvZiB0aGUgYWN0aXZlIHRhYiBpbiB0aGVcbi8vIGN1cnJlbnQgd2luZG93LiBSZXBseSB2aWEgcG9zdE1lc3NhZ2Ugd2l0aCBkYXRhVXJsLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpID0+IHtcbiAgaWYgKGV2ZW50LnNvdXJjZSAhPT0gd2luZG93KSByZXR1cm47XG4gIGlmIChldmVudC5kYXRhPy50eXBlICE9PSAnVkVUR09fQ0FQVFVSRScpIHJldHVybjtcbiAgY29uc3QgeyByZXFJZCwgb3B0cyB9ID0gZXZlbnQuZGF0YTtcbiAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdDQVBUVVJFX1RBQicsIG9wdHM6IG9wdHMgfHwge30gfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgd2luZG93LnBvc3RNZXNzYWdlKHsgdHlwZTogJ1ZFVEdPX0NBUFRVUkVfUkVQTFknLCByZXFJZCwgLi4uKHJlc3BvbnNlIHx8IHsgb2s6IGZhbHNlLCBlcnJvcjogJ25vX3Jlc3BvbnNlJyB9KSB9LCAnKicpO1xuICB9KTtcbn0pO1xuXG4vLyBTZXR1cCBDRFAgY2xpY2sgYnJpZGdlXG4vLyBMaXN0ZW5zIGZvciBDRFAgY2xpY2sgcmVxdWVzdHMgZnJvbSBNQUlOIHdvcmxkXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldmVudCkgPT4ge1xuICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cpIHJldHVybjtcblxuICBpZiAoZXZlbnQuZGF0YS50eXBlID09PSAnVkVUR09fQ0RQX0NMSUNLJykge1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gZXZlbnQuZGF0YTtcbiAgICBjb25zb2xlLmxvZyhg8J+TiyBDb250ZW50IHNjcmlwdCByZWNlaXZlZCBDRFAgY2xpY2sgcmVxdWVzdDogKCR7eH0sICR7eX0pYCk7XG4gICAgXG4gICAgLy8gRm9yd2FyZCB0byBiYWNrZ3JvdW5kIHNjcmlwdFxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKFxuICAgICAgeyBhY3Rpb246ICdDRFBfQ0xJQ0snLCB4LCB5IH0sXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBDRFAgY2xpY2sgZmFpbGVkOicsIGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygn4pyFIENEUCBjbGljayBzdWNjZXNzZnVsJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIENEUCBjbGljayBmYWlsZWQ6JywgcmVzcG9uc2U/LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbn0pO1xuXG5jb25zb2xlLmxvZygn4pyFIFZldEdvIENEUCBDbGljayBCcmlkZ2UgaW5pdGlhbGl6ZWQnKTtcblxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
@@ -17,7 +17,8 @@
17
17
  "scripting",
18
18
  "declarativeNetRequest",
19
19
  "clipboardRead",
20
- "debugger"
20
+ "debugger",
21
+ "alarms"
21
22
  ],
22
23
  "host_permissions": [
23
24
  "<all_urls>"
@@ -2,11 +2,11 @@
2
2
  /******/ "use strict";
3
3
  /******/ var __webpack_modules__ = ({
4
4
 
5
- /***/ "./chrome/environments/environment.ts":
5
+ /***/ "./chrome/environments/environment.ts"
6
6
  /*!********************************************!*\
7
7
  !*** ./chrome/environments/environment.ts ***!
8
8
  \********************************************/
9
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
10
10
 
11
11
  __webpack_require__.r(__webpack_exports__);
12
12
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -27,13 +27,13 @@ const environment = {
27
27
  };
28
28
 
29
29
 
30
- /***/ }),
30
+ /***/ },
31
31
 
32
- /***/ "./chrome/src/utils/environment-storage.service.ts":
32
+ /***/ "./chrome/src/utils/environment-storage.service.ts"
33
33
  /*!*********************************************************!*\
34
34
  !*** ./chrome/src/utils/environment-storage.service.ts ***!
35
35
  \*********************************************************/
36
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
37
37
 
38
38
  __webpack_require__.r(__webpack_exports__);
39
39
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -143,7 +143,7 @@ class EnvironmentStorageService {
143
143
  }
144
144
 
145
145
 
146
- /***/ })
146
+ /***/ }
147
147
 
148
148
  /******/ });
149
149
  /************************************************************************/
@@ -165,6 +165,12 @@ class EnvironmentStorageService {
165
165
  /******/ };
166
166
  /******/
167
167
  /******/ // Execute the module function
168
+ /******/ if (!(moduleId in __webpack_modules__)) {
169
+ /******/ delete __webpack_module_cache__[moduleId];
170
+ /******/ var e = new Error("Cannot find module '" + moduleId + "'");
171
+ /******/ e.code = 'MODULE_NOT_FOUND';
172
+ /******/ throw e;
173
+ /******/ }
168
174
  /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
169
175
  /******/
170
176
  /******/ // Return the exports of the module
@@ -344,4 +350,4 @@ loadCurrentConfig();
344
350
 
345
351
  /******/ })()
346
352
  ;
347
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Qy9FO0lBQ0wsQ0FBQztDQUFBO0FBRUQ7O0dBRUc7QUFDSCxTQUFlLFdBQVc7O1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsOENBQThDLENBQUMsRUFBRTtZQUMxRCxPQUFPO1NBQ1Y7UUFFRCxJQUFJO1lBQ0EsTUFBTSx5RkFBeUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNqRCxNQUFNLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxZQUFZO1lBQ3ZDLFdBQVcsQ0FBQyxvQ0FBb0MsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNoRTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxXQUFXLENBQUMsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdEQ7SUFDTCxDQUFDO0NBQUE7QUFFRCxrQkFBa0I7QUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM5QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRWhELDBDQUEwQztBQUMxQyxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3ZnLWNvZGVyLy4vY2hyb21lL3NyYy91dGlscy9lbnZpcm9ubWVudC1zdG9yYWdlLnNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3ZnLWNvZGVyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly92Zy1jb2Rlci8uL2Nocm9tZS9zcmMvc2lkZXBhbmVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnZpcm9ubWVudCA9IHtcbiAgcHJvZHVjdGlvbjogZmFsc2UsXG4gIGVudmlyb25tZW50TmFtZTogJ1ZHQ09ERVInLFxuICBmaXJlYmFzZUNvbmZpZzoge1xuICAgIGFwaUtleTogXCJBSXphU3lEcnBOTXNvLURYZU43YzR2d2JwVjBpZHB4blYydnRYaFFcIixcbiAgICBhdXRoRG9tYWluOiBcInZldGdvLWNocm9tZS5maXJlYmFzZWFwcC5jb21cIixcbiAgICBkYXRhYmFzZVVSTDogXCJodHRwczovL3ZldGdvLWNocm9tZS1kZWZhdWx0LXJ0ZGIuYXNpYS1zb3V0aGVhc3QxLmZpcmViYXNlZGF0YWJhc2UuYXBwXCIsXG4gICAgcHJvamVjdElkOiBcInZldGdvLWNocm9tZVwiLFxuICAgIHN0b3JhZ2VCdWNrZXQ6IFwidmV0Z28tY2hyb21lLmFwcHNwb3QuY29tXCIsXG4gICAgbWVzc2FnaW5nU2VuZGVySWQ6IFwiMjExMTc4MjI0MDk3XCIsXG4gICAgYXBwSWQ6IFwiMToyMTExNzgyMjQwOTc6d2ViOmY3M2JmNWE4MWMyZjRjMzJmYzdhYTBcIlxuICB9XG59O1xuIiwiaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50XCI7XG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gJ2Vudmlyb25tZW50TmFtZSc7XG5jb25zdCBGSVJFQkFTRV9DT05GSUdfS0VZID0gJ2ZpcmViYXNlQ29uZmlnJztcbmNvbnN0IERFRkFVTFRfRU5WSVJPTk1FTlQgPSBlbnZpcm9ubWVudC5lbnZpcm9ubWVudE5hbWU7XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudFN0b3JhZ2VTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBM4bqleSBlbnZpcm9ubWVudCBuYW1lIHThu6sgY2hyb21lLnN0b3JhZ2VcbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RW52aXJvbm1lbnROYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY2hyb21lLnN0b3JhZ2Uuc3luYy5nZXQoW1NUT1JBR0VfS0VZXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudk5hbWUgPSByZXN1bHRbU1RPUkFHRV9LRVldIHx8IERFRkFVTFRfRU5WSVJPTk1FTlQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShlbnZOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMxrB1IGVudmlyb25tZW50IG5hbWUgdsOgbyBjaHJvbWUuc3RvcmFnZVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBzZXRFbnZpcm9ubWVudE5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRW52aXJvbm1lbnQgbmFtZSBjYW5ub3QgYmUgZW1wdHknKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnNldCh7IFtTVE9SQUdFX0tFWV06IG5hbWUudHJpbSgpIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTOG6pXkgY+G6pXUgaMOsbmggRmlyZWJhc2UuIMavdSB0acOqbiBzdG9yYWdlLCBmYWxsYmFjayB24buBIGVudmlyb25tZW50IG3hurdjIMSR4buLbmhcbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RmlyZWJhc2VDb25maWcoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLmdldChbRklSRUJBU0VfQ09ORklHX0tFWV0sIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21Db25maWcgPSByZXN1bHRbRklSRUJBU0VfQ09ORklHX0tFWV07XG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbUNvbmZpZyAmJiBPYmplY3Qua2V5cyhjdXN0b21Db25maWcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXN0b21Db25maWcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZW52aXJvbm1lbnQuZmlyZWJhc2VDb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMxrB1IGPhuqV1IGjDrG5oIEZpcmViYXNlIHTDuXkgY2jhu4luaFxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBzZXRGaXJlYmFzZUNvbmZpZyhjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY2hyb21lLnN0b3JhZ2Uuc3luYy5zZXQoeyBbRklSRUJBU0VfQ09ORklHX0tFWV06IGNvbmZpZyB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0IHbhu4EgZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHJlc2V0VG9EZWZhdWx0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRFbnZpcm9ubWVudE5hbWUoREVGQVVMVF9FTlZJUk9OTUVOVCk7XG4gICAgICAgICAgICAvLyBYw7NhIGNvbmZpZyBmaXJlYmFzZSBjdXN0b20gxJHhu4MgZMO5bmcgbeG6t2MgxJHhu4tuaFxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnJlbW92ZShGSVJFQkFTRV9DT05GSUdfS0VZLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IEVudmlyb25tZW50U3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3V0aWxzL2Vudmlyb25tZW50LXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5cbi8vIERPTSBFbGVtZW50c1xuY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maWdGb3JtJykgYXMgSFRNTEZvcm1FbGVtZW50O1xuY29uc3QgZW52aXJvbm1lbnRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbnZpcm9ubWVudE5hbWUnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuY29uc3QgZmlyZWJhc2VDb25maWdJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJlYmFzZUNvbmZpZycpIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG5jb25zdCByZXNldEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNldEJ0bicpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xuY29uc3QgbWVzc2FnZURpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlJykgYXMgSFRNTERpdkVsZW1lbnQ7XG5jb25zdCBjdXJyZW50RW52U3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXJyZW50RW52JykgYXMgSFRNTFNwYW5FbGVtZW50O1xuXG4vKipcbiAqIEhp4buDbiB0aOG7iyB0aMO0bmcgYsOhbyBjaG8gbmfGsOG7nWkgZMO5bmdcbiAqL1xuZnVuY3Rpb24gc2hvd01lc3NhZ2UodGV4dDogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InKSB7XG4gICAgbWVzc2FnZURpdi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgbWVzc2FnZURpdi5jbGFzc05hbWUgPSBgbWVzc2FnZSAke3R5cGV9YDtcblxuICAgIC8vIFThu7EgxJHhu5luZyDhuqluIHRow7RuZyBiw6FvIHNhdSAzIGdpw6J5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG1lc3NhZ2VEaXYuY2xhc3NOYW1lID0gJ21lc3NhZ2UnO1xuICAgIH0sIDMwMDApO1xufVxuXG4vKipcbiAqIExvYWQgdsOgIGhp4buDbiB0aOG7iyBnacOhIHRy4buLIGhp4buHbiB04bqhaVxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkQ3VycmVudENvbmZpZygpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBMb2FkIEVudiBOYW1lXG4gICAgICAgIGNvbnN0IGVudk5hbWUgPSBhd2FpdCBFbnZpcm9ubWVudFN0b3JhZ2VTZXJ2aWNlLmdldEVudmlyb25tZW50TmFtZSgpO1xuICAgICAgICBjdXJyZW50RW52U3Bhbi50ZXh0Q29udGVudCA9IGVudk5hbWU7XG4gICAgICAgIGVudmlyb25tZW50SW5wdXQudmFsdWUgPSBlbnZOYW1lO1xuXG4gICAgICAgIC8vIExvYWQgRmlyZWJhc2UgQ29uZmlnXG4gICAgICAgIGNvbnN0IGZiQ29uZmlnID0gYXdhaXQgRW52aXJvbm1lbnRTdG9yYWdlU2VydmljZS5nZXRGaXJlYmFzZUNvbmZpZygpO1xuICAgICAgICBcbiAgICAgICAgLy8gS2nhu4NtIHRyYSB4ZW0gY8OzIHBo4bqjaSBjb25maWcgbeG6t2MgxJHhu4tuaCBraMO0bmdcbiAgICAgICAgY29uc3QgaXNEZWZhdWx0ID0gSlNPTi5zdHJpbmdpZnkoZmJDb25maWcpID09PSBKU09OLnN0cmluZ2lmeShlbnZpcm9ubWVudC5maXJlYmFzZUNvbmZpZyk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIWlzRGVmYXVsdCkge1xuICAgICAgICAgICAgZmlyZWJhc2VDb25maWdJbnB1dC52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KGZiQ29uZmlnLCBudWxsLCAyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpcmViYXNlQ29uZmlnSW5wdXQudmFsdWUgPSAnJzsgLy8gxJDhu4MgdHLhu5FuZyBu4bq/dSDEkWFuZyBkw7luZyBkZWZhdWx0XG4gICAgICAgICAgICBmaXJlYmFzZUNvbmZpZ0lucHV0LnBsYWNlaG9sZGVyID0gYMSQYW5nIHPhu60gZOG7pW5nIG3hurdjIMSR4buLbmg6XFxuJHtKU09OLnN0cmluZ2lmeShlbnZpcm9ubWVudC5maXJlYmFzZUNvbmZpZywgbnVsbCwgMil9YDtcbiAgICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjb25maWc6JywgZXJyb3IpO1xuICAgICAgICBjdXJyZW50RW52U3Bhbi50ZXh0Q29udGVudCA9ICdM4buXaSBraGkgdOG6o2kgY+G6pXUgaMOsbmgnO1xuICAgICAgICBzaG93TWVzc2FnZSgnS2jDtG5nIHRo4buDIHThuqNpIGPhuqV1IGjDrG5oIGhp4buHbiB04bqhaScsICdlcnJvcicpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBY4butIGzDvSBz4buxIGtp4buHbiBzdWJtaXQgZm9ybVxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVTdWJtaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IG5ld0Vudk5hbWUgPSBlbnZpcm9ubWVudElucHV0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBmaXJlYmFzZUNvbmZpZ1N0ciA9IGZpcmViYXNlQ29uZmlnSW5wdXQudmFsdWUudHJpbSgpO1xuXG4gICAgaWYgKCFuZXdFbnZOYW1lKSB7XG4gICAgICAgIHNob3dNZXNzYWdlKCdWdWkgbMOybmcgbmjhuq1wIHTDqm4gbcO0aSB0csaw4budbmcnLCAnZXJyb3InKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIC8vIDEuIEzGsHUgRW52aXJvbm1lbnQgTmFtZVxuICAgICAgICBhd2FpdCBFbnZpcm9ubWVudFN0b3JhZ2VTZXJ2aWNlLnNldEVudmlyb25tZW50TmFtZShuZXdFbnZOYW1lKTtcbiAgICAgICAgY3VycmVudEVudlNwYW4udGV4dENvbnRlbnQgPSBuZXdFbnZOYW1lO1xuXG4gICAgICAgIC8vIDIuIEzGsHUgRmlyZWJhc2UgQ29uZmlnXG4gICAgICAgIGlmIChmaXJlYmFzZUNvbmZpZ1N0cikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWdPYmogPSBKU09OLnBhcnNlKGZpcmViYXNlQ29uZmlnU3RyKTtcbiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBzxqEgYuG7mVxuICAgICAgICAgICAgICAgIGlmICghY29uZmlnT2JqLmFwaUtleSB8fCAhY29uZmlnT2JqLmRhdGFiYXNlVVJMKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZyB0aGnhur91IGFwaUtleSBob+G6t2MgZGF0YWJhc2VVUkxcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IEVudmlyb25tZW50U3RvcmFnZVNlcnZpY2Uuc2V0RmlyZWJhc2VDb25maWcoY29uZmlnT2JqKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBzaG93TWVzc2FnZSgn4p2MIEpTT04gRmlyZWJhc2UgQ29uZmlnIGtow7RuZyBo4bujcCBs4buHOiAnICsgKGUgYXMgRXJyb3IpLm1lc3NhZ2UsICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE7hur91IMSR4buDIHRy4buRbmcsIHjDs2EgY3VzdG9tIGNvbmZpZyDEkeG7gyBkw7luZyBkZWZhdWx0XG4gICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnJlbW92ZSgnZmlyZWJhc2VDb25maWcnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzaG93TWVzc2FnZSgn4pyFIEzGsHUgY+G6pXUgaMOsbmggdGjDoG5oIGPDtG5nIScsICdzdWNjZXNzJyk7XG4gICAgICAgIC8vIFJlbG9hZCBs4bqhaSBoaeG7g24gdGjhu4sgxJHhu4MgdXBkYXRlIHBsYWNlaG9sZGVyL3ZhbHVlXG4gICAgICAgIGxvYWRDdXJyZW50Q29uZmlnKCk7XG4gICAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBzZXR0aW5nczonLCBlcnJvcik7XG4gICAgICAgIHNob3dNZXNzYWdlKCfinYwgTOG7l2kga2hpIGzGsHUgY+G6pXUgaMOsbmg6ICcgKyAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UsICdlcnJvcicpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBY4butIGzDvSBz4buxIGtp4buHbiByZXNldCB24buBIG3hurdjIMSR4buLbmhcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVzZXQoKSB7XG4gICAgaWYgKCFjb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIG114buRbiDEkeG6t3QgbOG6oWkgdOG6pXQgY+G6oyB24buBIG3hurdjIMSR4buLbmg/JykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEVudmlyb25tZW50U3RvcmFnZVNlcnZpY2UucmVzZXRUb0RlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgbG9hZEN1cnJlbnRDb25maWcoKTsgLy8gUmVsb2FkIFVJXG4gICAgICAgIHNob3dNZXNzYWdlKCfinIUgxJDDoyDEkeG6t3QgbOG6oWkgduG7gSBj4bqldSBow6xuaCBt4bq3YyDEkeG7i25oIScsICdzdWNjZXNzJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVzZXR0aW5nIGVudmlyb25tZW50OicsIGVycm9yKTtcbiAgICAgICAgc2hvd01lc3NhZ2UoJ+KdjCBM4buXaSBraGkgxJHhurd0IGzhuqFpIGPhuqV1IGjDrG5oJywgJ2Vycm9yJyk7XG4gICAgfVxufVxuXG4vLyBFdmVudCBMaXN0ZW5lcnNcbmZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgaGFuZGxlU3VibWl0KTtcbnJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlUmVzZXQpO1xuXG4vLyBMb2FkIGdpw6EgdHLhu4sgaGnhu4duIHThuqFpIGtoaSB0cmFuZyDEkcaw4bujYyBt4bufXG5sb2FkQ3VycmVudENvbmZpZygpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==
353
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQy9FO0lBQ0wsQ0FBQztDQUFBO0FBRUQ7O0dBRUc7QUFDSCxTQUFlLFdBQVc7O1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsOENBQThDLENBQUMsRUFBRTtZQUMxRCxPQUFPO1NBQ1Y7UUFFRCxJQUFJO1lBQ0EsTUFBTSx5RkFBeUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNqRCxNQUFNLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxZQUFZO1lBQ3ZDLFdBQVcsQ0FBQyxvQ0FBb0MsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNoRTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxXQUFXLENBQUMsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdEQ7SUFDTCxDQUFDO0NBQUE7QUFFRCxrQkFBa0I7QUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM5QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRWhELDBDQUEwQztBQUMxQyxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3ZnLWNvZGVyLy4vY2hyb21lL3NyYy91dGlscy9lbnZpcm9ubWVudC1zdG9yYWdlLnNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3ZnLWNvZGVyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly92Zy1jb2Rlci8uL2Nocm9tZS9zcmMvc2lkZXBhbmVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnZpcm9ubWVudCA9IHtcbiAgcHJvZHVjdGlvbjogZmFsc2UsXG4gIGVudmlyb25tZW50TmFtZTogJ1ZHQ09ERVInLFxuICBmaXJlYmFzZUNvbmZpZzoge1xuICAgIGFwaUtleTogXCJBSXphU3lEcnBOTXNvLURYZU43YzR2d2JwVjBpZHB4blYydnRYaFFcIixcbiAgICBhdXRoRG9tYWluOiBcInZldGdvLWNocm9tZS5maXJlYmFzZWFwcC5jb21cIixcbiAgICBkYXRhYmFzZVVSTDogXCJodHRwczovL3ZldGdvLWNocm9tZS1kZWZhdWx0LXJ0ZGIuYXNpYS1zb3V0aGVhc3QxLmZpcmViYXNlZGF0YWJhc2UuYXBwXCIsXG4gICAgcHJvamVjdElkOiBcInZldGdvLWNocm9tZVwiLFxuICAgIHN0b3JhZ2VCdWNrZXQ6IFwidmV0Z28tY2hyb21lLmFwcHNwb3QuY29tXCIsXG4gICAgbWVzc2FnaW5nU2VuZGVySWQ6IFwiMjExMTc4MjI0MDk3XCIsXG4gICAgYXBwSWQ6IFwiMToyMTExNzgyMjQwOTc6d2ViOmY3M2JmNWE4MWMyZjRjMzJmYzdhYTBcIlxuICB9XG59O1xuIiwiaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50XCI7XG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gJ2Vudmlyb25tZW50TmFtZSc7XG5jb25zdCBGSVJFQkFTRV9DT05GSUdfS0VZID0gJ2ZpcmViYXNlQ29uZmlnJztcbmNvbnN0IERFRkFVTFRfRU5WSVJPTk1FTlQgPSBlbnZpcm9ubWVudC5lbnZpcm9ubWVudE5hbWU7XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudFN0b3JhZ2VTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBM4bqleSBlbnZpcm9ubWVudCBuYW1lIHThu6sgY2hyb21lLnN0b3JhZ2VcbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RW52aXJvbm1lbnROYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY2hyb21lLnN0b3JhZ2Uuc3luYy5nZXQoW1NUT1JBR0VfS0VZXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudk5hbWUgPSByZXN1bHRbU1RPUkFHRV9LRVldIHx8IERFRkFVTFRfRU5WSVJPTk1FTlQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShlbnZOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMxrB1IGVudmlyb25tZW50IG5hbWUgdsOgbyBjaHJvbWUuc3RvcmFnZVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBzZXRFbnZpcm9ubWVudE5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRW52aXJvbm1lbnQgbmFtZSBjYW5ub3QgYmUgZW1wdHknKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnNldCh7IFtTVE9SQUdFX0tFWV06IG5hbWUudHJpbSgpIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTOG6pXkgY+G6pXUgaMOsbmggRmlyZWJhc2UuIMavdSB0acOqbiBzdG9yYWdlLCBmYWxsYmFjayB24buBIGVudmlyb25tZW50IG3hurdjIMSR4buLbmhcbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RmlyZWJhc2VDb25maWcoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLmdldChbRklSRUJBU0VfQ09ORklHX0tFWV0sIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21Db25maWcgPSByZXN1bHRbRklSRUJBU0VfQ09ORklHX0tFWV07XG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbUNvbmZpZyAmJiBPYmplY3Qua2V5cyhjdXN0b21Db25maWcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXN0b21Db25maWcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZW52aXJvbm1lbnQuZmlyZWJhc2VDb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMxrB1IGPhuqV1IGjDrG5oIEZpcmViYXNlIHTDuXkgY2jhu4luaFxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBzZXRGaXJlYmFzZUNvbmZpZyhjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY2hyb21lLnN0b3JhZ2Uuc3luYy5zZXQoeyBbRklSRUJBU0VfQ09ORklHX0tFWV06IGNvbmZpZyB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0IHbhu4EgZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHJlc2V0VG9EZWZhdWx0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRFbnZpcm9ubWVudE5hbWUoREVGQVVMVF9FTlZJUk9OTUVOVCk7XG4gICAgICAgICAgICAvLyBYw7NhIGNvbmZpZyBmaXJlYmFzZSBjdXN0b20gxJHhu4MgZMO5bmcgbeG6t2MgxJHhu4tuaFxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnJlbW92ZShGSVJFQkFTRV9DT05GSUdfS0VZLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdGlmICghKG1vZHVsZUlkIGluIF9fd2VicGFja19tb2R1bGVzX18pKSB7XG5cdFx0ZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgbW9kdWxlSWQgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IHsgRW52aXJvbm1lbnRTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vdXRpbHMvZW52aXJvbm1lbnQtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcblxuLy8gRE9NIEVsZW1lbnRzXG5jb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpZ0Zvcm0nKSBhcyBIVE1MRm9ybUVsZW1lbnQ7XG5jb25zdCBlbnZpcm9ubWVudElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vudmlyb25tZW50TmFtZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5jb25zdCBmaXJlYmFzZUNvbmZpZ0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcmViYXNlQ29uZmlnJykgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbmNvbnN0IHJlc2V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2V0QnRuJykgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG5jb25zdCBtZXNzYWdlRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2UnKSBhcyBIVE1MRGl2RWxlbWVudDtcbmNvbnN0IGN1cnJlbnRFbnZTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1cnJlbnRFbnYnKSBhcyBIVE1MU3BhbkVsZW1lbnQ7XG5cbi8qKlxuICogSGnhu4NuIHRo4buLIHRow7RuZyBiw6FvIGNobyBuZ8aw4budaSBkw7luZ1xuICovXG5mdW5jdGlvbiBzaG93TWVzc2FnZSh0ZXh0OiBzdHJpbmcsIHR5cGU6ICdzdWNjZXNzJyB8ICdlcnJvcicpIHtcbiAgICBtZXNzYWdlRGl2LnRleHRDb250ZW50ID0gdGV4dDtcbiAgICBtZXNzYWdlRGl2LmNsYXNzTmFtZSA9IGBtZXNzYWdlICR7dHlwZX1gO1xuXG4gICAgLy8gVOG7sSDEkeG7mW5nIOG6qW4gdGjDtG5nIGLDoW8gc2F1IDMgZ2nDonlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbWVzc2FnZURpdi5jbGFzc05hbWUgPSAnbWVzc2FnZSc7XG4gICAgfSwgMzAwMCk7XG59XG5cbi8qKlxuICogTG9hZCB2w6AgaGnhu4NuIHRo4buLIGdpw6EgdHLhu4sgaGnhu4duIHThuqFpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDdXJyZW50Q29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIExvYWQgRW52IE5hbWVcbiAgICAgICAgY29uc3QgZW52TmFtZSA9IGF3YWl0IEVudmlyb25tZW50U3RvcmFnZVNlcnZpY2UuZ2V0RW52aXJvbm1lbnROYW1lKCk7XG4gICAgICAgIGN1cnJlbnRFbnZTcGFuLnRleHRDb250ZW50ID0gZW52TmFtZTtcbiAgICAgICAgZW52aXJvbm1lbnRJbnB1dC52YWx1ZSA9IGVudk5hbWU7XG5cbiAgICAgICAgLy8gTG9hZCBGaXJlYmFzZSBDb25maWdcbiAgICAgICAgY29uc3QgZmJDb25maWcgPSBhd2FpdCBFbnZpcm9ubWVudFN0b3JhZ2VTZXJ2aWNlLmdldEZpcmViYXNlQ29uZmlnKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBLaeG7g20gdHJhIHhlbSBjw7MgcGjhuqNpIGNvbmZpZyBt4bq3YyDEkeG7i25oIGtow7RuZ1xuICAgICAgICBjb25zdCBpc0RlZmF1bHQgPSBKU09OLnN0cmluZ2lmeShmYkNvbmZpZykgPT09IEpTT04uc3RyaW5naWZ5KGVudmlyb25tZW50LmZpcmViYXNlQ29uZmlnKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICBmaXJlYmFzZUNvbmZpZ0lucHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZmJDb25maWcsIG51bGwsIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlyZWJhc2VDb25maWdJbnB1dC52YWx1ZSA9ICcnOyAvLyDEkOG7gyB0cuG7kW5nIG7hur91IMSRYW5nIGTDuW5nIGRlZmF1bHRcbiAgICAgICAgICAgIGZpcmViYXNlQ29uZmlnSW5wdXQucGxhY2Vob2xkZXIgPSBgxJBhbmcgc+G7rSBk4bulbmcgbeG6t2MgxJHhu4tuaDpcXG4ke0pTT04uc3RyaW5naWZ5KGVudmlyb25tZW50LmZpcmViYXNlQ29uZmlnLCBudWxsLCAyKX1gO1xuICAgICAgICB9XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNvbmZpZzonLCBlcnJvcik7XG4gICAgICAgIGN1cnJlbnRFbnZTcGFuLnRleHRDb250ZW50ID0gJ0zhu5dpIGtoaSB04bqjaSBj4bqldSBow6xuaCc7XG4gICAgICAgIHNob3dNZXNzYWdlKCdLaMO0bmcgdGjhu4MgdOG6o2kgY+G6pXUgaMOsbmggaGnhu4duIHThuqFpJywgJ2Vycm9yJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFjhu60gbMO9IHPhu7Ega2nhu4duIHN1Ym1pdCBmb3JtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgbmV3RW52TmFtZSA9IGVudmlyb25tZW50SW5wdXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGZpcmViYXNlQ29uZmlnU3RyID0gZmlyZWJhc2VDb25maWdJbnB1dC52YWx1ZS50cmltKCk7XG5cbiAgICBpZiAoIW5ld0Vudk5hbWUpIHtcbiAgICAgICAgc2hvd01lc3NhZ2UoJ1Z1aSBsw7JuZyBuaOG6rXAgdMOqbiBtw7RpIHRyxrDhu51uZycsICdlcnJvcicpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gMS4gTMawdSBFbnZpcm9ubWVudCBOYW1lXG4gICAgICAgIGF3YWl0IEVudmlyb25tZW50U3RvcmFnZVNlcnZpY2Uuc2V0RW52aXJvbm1lbnROYW1lKG5ld0Vudk5hbWUpO1xuICAgICAgICBjdXJyZW50RW52U3Bhbi50ZXh0Q29udGVudCA9IG5ld0Vudk5hbWU7XG5cbiAgICAgICAgLy8gMi4gTMawdSBGaXJlYmFzZSBDb25maWdcbiAgICAgICAgaWYgKGZpcmViYXNlQ29uZmlnU3RyKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ09iaiA9IEpTT04ucGFyc2UoZmlyZWJhc2VDb25maWdTdHIpO1xuICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHPGoSBi4buZXG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWdPYmouYXBpS2V5IHx8ICFjb25maWdPYmouZGF0YWJhc2VVUkwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlnIHRoaeG6v3UgYXBpS2V5IGhv4bq3YyBkYXRhYmFzZVVSTFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgRW52aXJvbm1lbnRTdG9yYWdlU2VydmljZS5zZXRGaXJlYmFzZUNvbmZpZyhjb25maWdPYmopO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHNob3dNZXNzYWdlKCfinYwgSlNPTiBGaXJlYmFzZSBDb25maWcga2jDtG5nIGjhu6NwIGzhu4c6ICcgKyAoZSBhcyBFcnJvcikubWVzc2FnZSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTuG6v3UgxJHhu4MgdHLhu5FuZywgeMOzYSBjdXN0b20gY29uZmlnIMSR4buDIGTDuW5nIGRlZmF1bHRcbiAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNocm9tZS5zdG9yYWdlLnN5bmMucmVtb3ZlKCdmaXJlYmFzZUNvbmZpZycsICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNob3dNZXNzYWdlKCfinIUgTMawdSBj4bqldSBow6xuaCB0aMOgbmggY8O0bmchJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgLy8gUmVsb2FkIGzhuqFpIGhp4buDbiB0aOG7iyDEkeG7gyB1cGRhdGUgcGxhY2Vob2xkZXIvdmFsdWVcbiAgICAgICAgbG9hZEN1cnJlbnRDb25maWcoKTtcbiAgICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIHNldHRpbmdzOicsIGVycm9yKTtcbiAgICAgICAgc2hvd01lc3NhZ2UoJ+KdjCBM4buXaSBraGkgbMawdSBj4bqldSBow6xuaDogJyArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSwgJ2Vycm9yJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFjhu60gbMO9IHPhu7Ega2nhu4duIHJlc2V0IHbhu4EgbeG6t2MgxJHhu4tuaFxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVSZXNldCgpIHtcbiAgICBpZiAoIWNvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgbXXhu5FuIMSR4bq3dCBs4bqhaSB04bqldCBj4bqjIHbhu4EgbeG6t2MgxJHhu4tuaD8nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgRW52aXJvbm1lbnRTdG9yYWdlU2VydmljZS5yZXNldFRvRGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCBsb2FkQ3VycmVudENvbmZpZygpOyAvLyBSZWxvYWQgVUlcbiAgICAgICAgc2hvd01lc3NhZ2UoJ+KchSDEkMOjIMSR4bq3dCBs4bqhaSB24buBIGPhuqV1IGjDrG5oIG3hurdjIMSR4buLbmghJywgJ3N1Y2Nlc3MnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXNldHRpbmcgZW52aXJvbm1lbnQ6JywgZXJyb3IpO1xuICAgICAgICBzaG93TWVzc2FnZSgn4p2MIEzhu5dpIGtoaSDEkeG6t3QgbOG6oWkgY+G6pXUgaMOsbmgnLCAnZXJyb3InKTtcbiAgICB9XG59XG5cbi8vIEV2ZW50IExpc3RlbmVyc1xuZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBoYW5kbGVTdWJtaXQpO1xucmVzZXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVSZXNldCk7XG5cbi8vIExvYWQgZ2nDoSB0cuG7iyBoaeG7h24gdOG6oWkga2hpIHRyYW5nIMSRxrDhu6NjIG3hu59cbmxvYWRDdXJyZW50Q29uZmlnKCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
@@ -0,0 +1 @@
1
+ {"name": "test-large", "version": "1.0.0", "dependencies": {"react": "^18.0.0"}}
@@ -0,0 +1 @@
1
+ export const Button = () => <button>Click me</button>;
@@ -0,0 +1 @@
1
+ import { Button } from "./components/Button"; export default Button;
@@ -0,0 +1 @@
1
+ {"name": "test-small", "version": "1.0.0"}
@@ -0,0 +1 @@
1
+ console.log("Hello World");