@lynx-js/react 0.115.3 → 0.116.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/components/lib/DeferredListItem.jsx +4 -2
  3. package/components/lib/DeferredListItem.jsx.map +1 -1
  4. package/components/src/DeferredListItem.tsx +4 -2
  5. package/package.json +2 -2
  6. package/refresh/.turbo/turbo-build.log +2 -7
  7. package/refresh/dist/index.js +3 -3
  8. package/runtime/lib/alog/elementPAPICall.js +2 -2
  9. package/runtime/lib/alog/elementPAPICall.js.map +1 -1
  10. package/runtime/lib/alog/render.js +2 -2
  11. package/runtime/lib/alog/render.js.map +1 -1
  12. package/runtime/lib/backgroundSnapshot.d.ts +0 -1
  13. package/runtime/lib/backgroundSnapshot.js +6 -6
  14. package/runtime/lib/backgroundSnapshot.js.map +1 -1
  15. package/runtime/lib/debug/profile.js +4 -4
  16. package/runtime/lib/debug/profile.js.map +1 -1
  17. package/runtime/lib/hydrate.js +2 -2
  18. package/runtime/lib/hydrate.js.map +1 -1
  19. package/runtime/lib/lifecycle/destroy.js +2 -2
  20. package/runtime/lib/lifecycle/destroy.js.map +1 -1
  21. package/runtime/lib/lifecycle/event/jsReady.js +3 -3
  22. package/runtime/lib/lifecycle/event/jsReady.js.map +1 -1
  23. package/runtime/lib/lifecycle/patch/commit.js +3 -3
  24. package/runtime/lib/lifecycle/patch/commit.js.map +1 -1
  25. package/runtime/lib/lifecycle/reload.js +4 -4
  26. package/runtime/lib/lifecycle/reload.js.map +1 -1
  27. package/runtime/lib/lifecycle/render.js +4 -4
  28. package/runtime/lib/lifecycle/render.js.map +1 -1
  29. package/runtime/lib/listUpdateInfo.js +2 -2
  30. package/runtime/lib/listUpdateInfo.js.map +1 -1
  31. package/runtime/lib/lynx/calledByNative.js +8 -2
  32. package/runtime/lib/lynx/calledByNative.js.map +1 -1
  33. package/runtime/lib/lynx/env.js +2 -2
  34. package/runtime/lib/lynx/env.js.map +1 -1
  35. package/runtime/lib/lynx/runWithForce.js +14 -1
  36. package/runtime/lib/lynx/runWithForce.js.map +1 -1
  37. package/runtime/lib/lynx/suspense.js +0 -2
  38. package/runtime/lib/lynx/suspense.js.map +1 -1
  39. package/runtime/lib/lynx/tt.js +4 -4
  40. package/runtime/lib/lynx/tt.js.map +1 -1
  41. package/runtime/lib/lynx-api.js +3 -3
  42. package/runtime/lib/lynx-api.js.map +1 -1
  43. package/runtime/lib/lynx.js +4 -4
  44. package/runtime/lib/lynx.js.map +1 -1
  45. package/runtime/lib/renderToOpcodes/constants.d.ts +1 -0
  46. package/runtime/lib/renderToOpcodes/constants.js +1 -0
  47. package/runtime/lib/renderToOpcodes/constants.js.map +1 -1
  48. package/runtime/lib/root.js +2 -2
  49. package/runtime/lib/root.js.map +1 -1
  50. package/runtime/lib/worklet/destroy.js +1 -1
  51. package/runtime/lib/worklet/destroy.js.map +1 -1
  52. package/testing-library/dist/env/vitest.js +14 -24
  53. package/testing-library/dist/pure.js +3584 -3796
  54. package/testing-library/dist/rslib-runtime.js +58 -0
  55. package/worklet-runtime/dist/dev.js +12 -7
  56. package/worklet-runtime/dist/main.js +1 -1
  57. package/worklet-runtime/lib/api/element.d.ts +1 -0
  58. package/worklet-runtime/lib/api/element.js +10 -0
  59. package/worklet-runtime/lib/api/element.js.map +1 -1
@@ -0,0 +1,58 @@
1
+ var __webpack_modules__ = {};
2
+ var __webpack_module_cache__ = {};
3
+ function __webpack_require__(moduleId) {
4
+ var cachedModule = __webpack_module_cache__[moduleId];
5
+ if (void 0 !== cachedModule) return cachedModule.exports;
6
+ var module = __webpack_module_cache__[moduleId] = {
7
+ id: moduleId,
8
+ loaded: false,
9
+ exports: {}
10
+ };
11
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
12
+ module.loaded = true;
13
+ return module.exports;
14
+ }
15
+ __webpack_require__.m = __webpack_modules__;
16
+ (()=>{
17
+ __webpack_require__.add = function(modules) {
18
+ Object.assign(__webpack_require__.m, modules);
19
+ };
20
+ })();
21
+ (()=>{
22
+ __webpack_require__.n = (module)=>{
23
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
24
+ __webpack_require__.d(getter, {
25
+ a: getter
26
+ });
27
+ return getter;
28
+ };
29
+ })();
30
+ (()=>{
31
+ __webpack_require__.d = (exports, definition)=>{
32
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: definition[key]
35
+ });
36
+ };
37
+ })();
38
+ (()=>{
39
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
40
+ })();
41
+ (()=>{
42
+ __webpack_require__.r = (exports)=>{
43
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, {
44
+ value: 'Module'
45
+ });
46
+ Object.defineProperty(exports, '__esModule', {
47
+ value: true
48
+ });
49
+ };
50
+ })();
51
+ (()=>{
52
+ __webpack_require__.nmd = (module)=>{
53
+ module.paths = [];
54
+ if (!module.children) module.children = [];
55
+ return module;
56
+ };
57
+ })();
58
+ export { __webpack_require__ };
@@ -66,6 +66,12 @@
66
66
  this.options = options;
67
67
  }
68
68
  }
69
+ function isSdkVersionGt(major, minor) {
70
+ var _SystemInfo_lynxSdkVersion;
71
+ const lynxSdkVersion = null != (_SystemInfo_lynxSdkVersion = SystemInfo.lynxSdkVersion) ? _SystemInfo_lynxSdkVersion : '1.0';
72
+ const version = lynxSdkVersion.split('.');
73
+ return Number(version[0]) > major || Number(version[0]) == major && Number(version[1]) > minor;
74
+ }
69
75
  function element_define_property(obj, key, value) {
70
76
  if (key in obj) Object.defineProperty(obj, key, {
71
77
  value: value,
@@ -107,6 +113,11 @@
107
113
  querySelectorAll(selector) {
108
114
  return __QuerySelectorAll(this.element, selector, {}).map((element)=>new Element(element));
109
115
  }
116
+ getComputedStyleProperty(key) {
117
+ if (!isSdkVersionGt(3, 4)) throw new Error('getComputedStyleProperty requires Lynx sdk version 3.5');
118
+ if (!key) throw new Error('getComputedStyleProperty: key is required');
119
+ return __GetComputedStyleByKey(this.element, key);
120
+ }
110
121
  animate(keyframes, options) {
111
122
  const normalizedOptions = 'number' == typeof options ? {
112
123
  duration: options
@@ -164,12 +175,6 @@
164
175
  function querySelectorAll(cssSelector) {
165
176
  return __QuerySelectorAll(PageElement.get(), cssSelector, {}).map((element)=>new Element(element));
166
177
  }
167
- function isSdkVersionGt(major, minor) {
168
- var _SystemInfo_lynxSdkVersion;
169
- const lynxSdkVersion = null != (_SystemInfo_lynxSdkVersion = SystemInfo.lynxSdkVersion) ? _SystemInfo_lynxSdkVersion : '1.0';
170
- const version = lynxSdkVersion.split('.');
171
- return Number(version[0]) > major || Number(version[0]) == major && Number(version[1]) > minor;
172
- }
173
178
  function initApiEnv() {
174
179
  var _lynx_clearInterval;
175
180
  lynx.querySelector = querySelector;
@@ -536,4 +541,4 @@
536
541
  }
537
542
  })();
538
543
 
539
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9hbmltYXRpb24vYW5pbWF0aW9uLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9hcGkvYW5pbWF0aW9uL2VmZmVjdC50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvYXBpL2VsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9sZXB1c1F1ZXJ5U2VsZWN0b3IudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3V0aWxzL3ZlcnNpb24udHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9seW54QXBpLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9ydW5Pbk1haW5UaHJlYWQudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3V0aWxzL3Byb2ZpbGUudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3dvcmtsZXRSZWYudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2xpc3RlbmVycy50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvZGVsYXlSdW5PbkJhY2tncm91bmQudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2RlbGF5V29ya2xldEV2ZW50LnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9lb21JbXBsLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9ldmVudFByb3BhZ2F0aW9uLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9oeWRyYXRlLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9qc0Z1bmN0aW9uTGlmZWN5Y2xlLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy93b3JrbGV0UnVudGltZS50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgS2V5ZnJhbWVFZmZlY3QgfSBmcm9tICcuL2VmZmVjdC5qcyc7XG5cbmV4cG9ydCBlbnVtIEFuaW1hdGlvbk9wZXJhdGlvbiB7XG4gIFNUQVJUID0gMCwgLy8gU3RhcnQgYSBuZXcgYW5pbWF0aW9uXG4gIFBMQVkgPSAxLCAvLyBQbGF5L3Jlc3VtZSBhIHBhdXNlZCBhbmltYXRpb25cbiAgUEFVU0UgPSAyLCAvLyBQYXVzZSBhbiBleGlzdGluZyBhbmltYXRpb25cbiAgQ0FOQ0VMID0gMywgLy8gQ2FuY2VsIGFuIGFuaW1hdGlvblxufVxuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uIHtcbiAgc3RhdGljIGNvdW50ID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IGVmZmVjdDogS2V5ZnJhbWVFZmZlY3Q7XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGVmZmVjdDogS2V5ZnJhbWVFZmZlY3QpIHtcbiAgICB0aGlzLmVmZmVjdCA9IGVmZmVjdDtcbiAgICB0aGlzLmlkID0gJ19fbHlueC1pbm5lci1qcy1hbmltYXRpb24tJyArIEFuaW1hdGlvbi5jb3VudCsrO1xuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBtZW1iZXIgJ2VsZW1lbnQnXG4gICAgcmV0dXJuIF9fRWxlbWVudEFuaW1hdGUodGhpcy5lZmZlY3QudGFyZ2V0LmVsZW1lbnQsIFtBbmltYXRpb25PcGVyYXRpb24uQ0FOQ0VMLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwdWJsaWMgcGF1c2UoKTogdm9pZCB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBtZW1iZXIgJ2VsZW1lbnQnXG4gICAgcmV0dXJuIF9fRWxlbWVudEFuaW1hdGUodGhpcy5lZmZlY3QudGFyZ2V0LmVsZW1lbnQsIFtBbmltYXRpb25PcGVyYXRpb24uUEFVU0UsIHRoaXMuaWRdKTtcbiAgfVxuXG4gIHB1YmxpYyBwbGF5KCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLlBMQVksIHRoaXMuaWRdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnQoKTogdm9pZCB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBtZW1iZXIgJ2VsZW1lbnQnXG4gICAgcmV0dXJuIF9fRWxlbWVudEFuaW1hdGUodGhpcy5lZmZlY3QudGFyZ2V0LmVsZW1lbnQsIFtcbiAgICAgIEFuaW1hdGlvbk9wZXJhdGlvbi5TVEFSVCxcbiAgICAgIHRoaXMuaWQsXG4gICAgICB0aGlzLmVmZmVjdC5rZXlmcmFtZXMsXG4gICAgICB0aGlzLmVmZmVjdC5vcHRpb25zLFxuICAgIF0pO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNSBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBFbGVtZW50IH0gZnJvbSAnLi4vZWxlbWVudC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBLZXlmcmFtZUVmZmVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXQ6IEVsZW1lbnQ7XG4gIHB1YmxpYyByZWFkb25seSBrZXlmcmFtZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz5bXTtcbiAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGFyZ2V0OiBFbGVtZW50LFxuICAgIGtleWZyYW1lczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPltdLFxuICAgIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gICkge1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMua2V5ZnJhbWVzID0ga2V5ZnJhbWVzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBBbmltYXRpb24gfSBmcm9tICcuL2FuaW1hdGlvbi9hbmltYXRpb24uanMnO1xuaW1wb3J0IHsgS2V5ZnJhbWVFZmZlY3QgfSBmcm9tICcuL2FuaW1hdGlvbi9lZmZlY3QuanMnO1xuXG5sZXQgd2lsbEZsdXNoID0gZmFsc2U7XG5sZXQgc2hvdWxkRmx1c2ggPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2hvdWxkRmx1c2godmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgc2hvdWxkRmx1c2ggPSB2YWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHNldCBpbiBjb25zdHJ1Y3RvclxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnROb2RlKSB7XG4gICAgLy8gSW4gTHlueCB2ZXJzaW9ucyBwcmlvciB0byBhbmQgaW5jbHVkaW5nIDIuMTUsXG4gICAgLy8gYSBjcmFzaCBvY2N1cnMgd2hlbiBwcmludGluZyBvciB0cmFuc2ZlcnJpbmcgcmVmQ291bnRlZCBhY3Jvc3MgdGhyZWFkcy5cbiAgICAvLyBCeXBhc3MgdGhpcyBwcm9ibGVtIGJ5IGhpZGluZyB0aGUgZWxlbWVudCBvYmplY3QuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbGVtZW50Jywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBfX1NldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZVByb3BlcnR5KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIF9fQWRkSW5saW5lU3R5bGUodGhpcy5lbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGVQcm9wZXJ0aWVzKHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlcykge1xuICAgICAgX19BZGRJbmxpbmVTdHlsZSh0aGlzLmVsZW1lbnQsIGtleSwgc3R5bGVzW2tleV0hKTtcbiAgICB9XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBfX0dldEF0dHJpYnV0ZUJ5TmFtZSh0aGlzLmVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldEF0dHJpYnV0ZU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gX19HZXRBdHRyaWJ1dGVOYW1lcyh0aGlzLmVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCByZWYgPSBfX1F1ZXJ5U2VsZWN0b3IodGhpcy5lbGVtZW50LCBzZWxlY3Rvciwge30pO1xuICAgIHJldHVybiByZWYgPyBuZXcgRWxlbWVudChyZWYpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50W10ge1xuICAgIHJldHVybiBfX1F1ZXJ5U2VsZWN0b3JBbGwodGhpcy5lbGVtZW50LCBzZWxlY3Rvciwge30pLm1hcCgoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFuaW1hdGUoXG4gICAga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W10sXG4gICAgb3B0aW9ucz86IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gICk6IEFuaW1hdGlvbiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicgPyB7IGR1cmF0aW9uOiBvcHRpb25zIH0gOiBvcHRpb25zID8/IHt9O1xuICAgIHJldHVybiBuZXcgQW5pbWF0aW9uKG5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLCBrZXlmcmFtZXMsIG5vcm1hbGl6ZWRPcHRpb25zKSk7XG4gIH1cblxuICBwdWJsaWMgaW52b2tlKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIF9fSW52b2tlVUlNZXRob2QoXG4gICAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGFyYW1zID8/IHt9LFxuICAgICAgICAocmVzOiB7IGNvZGU6IG51bWJlcjsgZGF0YTogdW5rbm93biB9KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVUkgbWV0aG9kIGludm9rZTogJyArIEpTT04uc3RyaW5naWZ5KHJlcykpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoRWxlbWVudFRyZWUoKSB7XG4gICAgaWYgKHdpbGxGbHVzaCB8fCAhc2hvdWxkRmx1c2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2lsbEZsdXNoID0gdHJ1ZTtcbiAgICB2b2lkIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgd2lsbEZsdXNoID0gZmFsc2U7XG4gICAgICBfX0ZsdXNoRWxlbWVudFRyZWUoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQuanMnO1xuXG5jbGFzcyBQYWdlRWxlbWVudCB7XG4gIHByaXZhdGUgc3RhdGljIHBhZ2VFbGVtZW50OiBFbGVtZW50Tm9kZSB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZ2V0KCkge1xuICAgIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50ID8/PSBfX0dldFBhZ2VFbGVtZW50KCk7XG4gICAgcmV0dXJuIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKGNzc1NlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGVsZW1lbnQgPSBfX1F1ZXJ5U2VsZWN0b3IoUGFnZUVsZW1lbnQuZ2V0KCksIGNzc1NlbGVjdG9yLCB7fSk7XG4gIHJldHVybiBlbGVtZW50ID8gbmV3IEVsZW1lbnQoZWxlbWVudCkgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbChQYWdlRWxlbWVudC5nZXQoKSwgY3NzU2VsZWN0b3IsIHt9KS5tYXAoXG4gICAgKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmV4cG9ydCBmdW5jdGlvbiBpc1Nka1ZlcnNpb25HdChtYWpvcjogbnVtYmVyLCBtaW5vcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGx5bnhTZGtWZXJzaW9uOiBzdHJpbmcgPSBTeXN0ZW1JbmZvLmx5bnhTZGtWZXJzaW9uID8/ICcxLjAnO1xuICBjb25zdCB2ZXJzaW9uID0gbHlueFNka1ZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIChcbiAgICBOdW1iZXIodmVyc2lvblswXSkgPiBtYWpvclxuICAgIHx8IChOdW1iZXIodmVyc2lvblswXSkgPT0gbWFqb3IgJiYgTnVtYmVyKHZlcnNpb25bMV0pID4gbWlub3IpXG4gICk7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgcXVlcnlTZWxlY3RvciwgcXVlcnlTZWxlY3RvckFsbCB9IGZyb20gJy4vbGVwdXNRdWVyeVNlbGVjdG9yLmpzJztcbmltcG9ydCB7IGlzU2RrVmVyc2lvbkd0IH0gZnJvbSAnLi4vdXRpbHMvdmVyc2lvbi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRBcGlFbnYoKTogdm9pZCB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBseW54LnF1ZXJ5U2VsZWN0b3IgPSBxdWVyeVNlbGVjdG9yO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgbHlueC5xdWVyeVNlbGVjdG9yQWxsID0gcXVlcnlTZWxlY3RvckFsbDtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuc2V0VGltZW91dCA9IGx5bnguc2V0VGltZW91dCBhcyAoY2I6ICgpID0+IHZvaWQsIHRpbWVvdXQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5zZXRJbnRlcnZhbCA9IGx5bnguc2V0SW50ZXJ2YWwgYXMgKGNiOiAoKSA9PiB2b2lkLCB0aW1lb3V0OiBudW1iZXIpID0+IG51bWJlcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuY2xlYXJUaW1lb3V0ID0gbHlueC5jbGVhclRpbWVvdXQgYXMgKHRpbWVvdXQ6IG51bWJlcikgPT4gdm9pZDtcbiAgLy8gSW4gbHlueCAyLjE0IGBjbGVhckludGVydmFsYCBpcyBtaXN0YWtlbmx5IHNwZWxsZWQgYXMgYGNsZWFyVGltZUludGVydmFsYC4gVGhpcyBpcyBmaXhlZCBpbiBseW54IDIuMTUuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLmNsZWFySW50ZXJ2YWwgPSAobHlueC5jbGVhckludGVydmFsID8/IGx5bnguY2xlYXJUaW1lSW50ZXJ2YWwpIGFzICh0aW1lb3V0OiBudW1iZXIpID0+IHZvaWQ7XG5cbiAge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICAgIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGx5bngucmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFzIChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4gbnVtYmVyO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICAgIGx5bngucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsVGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoXG4gICAgICBjYWxsYmFjazogKCkgPT4gdm9pZCxcbiAgICApID0+IHtcbiAgICAgIGlmICghaXNTZGtWZXJzaW9uR3QoMiwgMTUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAncmVxdWVzdEFuaW1hdGlvbkZyYW1lIGluIG1haW4gdGhyZWFkIHNjcmlwdCByZXF1aXJlcyBMeW54IHNkayB2ZXJzaW9uIDIuMTYnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gbHlueC5jYW5jZWxBbmltYXRpb25GcmFtZSBhcyAocmVxdWVzdElkOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB7IGluaXRBcGlFbnYgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBXb3JrbGV0RXZlbnRzIH0gZnJvbSAnLi9iaW5kaW5ncy9pbmRleC5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIFJ1bldvcmtsZXRDdHhSZXREYXRhLCBXb3JrbGV0IH0gZnJvbSAnLi9iaW5kaW5ncy9pbmRleC5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5SdW5Pbk1haW5UaHJlYWRUYXNrKHRhc2s6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCByZXNvbHZlSWQ6IG51bWJlcik6IHZvaWQge1xuICBsZXQgcmV0dXJuVmFsdWU7XG4gIHRyeSB7XG4gICAgcmV0dXJuVmFsdWUgPSBydW5Xb3JrbGV0KHRhc2ssIHBhcmFtcyk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gVE9ETzogU2hvdWxkIGJlIG1vcmUgcHJvcGVyIHRvIHJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGVyZSBpcyBhbiBlcnJvci5cbiAgICBseW54LmdldEpTQ29udGV4dCgpLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgdHlwZTogV29ya2xldEV2ZW50cy5GdW5jdGlvbkNhbGxSZXQsXG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHJlc29sdmVJZCxcbiAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICB9IGFzIFJ1bldvcmtsZXRDdHhSZXREYXRhKSxcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmV4cG9ydCBmdW5jdGlvbiBwcm9maWxlPFJldCwgRm4gZXh0ZW5kcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZXQ+KFxuICBzbGljZU5hbWU6IHN0cmluZyxcbiAgZjogRm4sXG4pOiBSZXQge1xuICAvKiB2OCBpZ25vcmUgbmV4dCA5ICovXG4gIC8vIFRPRE86IGNoYW5nZSBpdCB0byBfX1BST0ZJTEVfX1xuICBpZiAoX19ERVZfXykge1xuICAgIGNvbnNvbGUucHJvZmlsZShzbGljZU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zb2xlLnByb2ZpbGVFbmQoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGYoKTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2FwaS9lbGVtZW50LmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2xldFJlZiwgV29ya2xldFJlZklkLCBXb3JrbGV0UmVmSW1wbCB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5cbmludGVyZmFjZSBSZWZJbXBsIHtcbiAgX3dvcmtsZXRSZWZNYXA6IFJlY29yZDxXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWY8dW5rbm93bj4+O1xuICBfZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwOiBSZWNvcmQ8V29ya2xldFJlZklkLCBXb3JrbGV0UmVmPHVua25vd24+PjtcbiAgdXBkYXRlV29ya2xldFJlZihcbiAgICByZWZJbXBsOiBXb3JrbGV0UmVmSW1wbDxFbGVtZW50IHwgbnVsbD4sXG4gICAgZWxlbWVudDogRWxlbWVudE5vZGUgfCBudWxsLFxuICApOiB2b2lkO1xuICB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyhwYXRjaDogW251bWJlciwgdW5rbm93bl1bXSk6IHZvaWQ7XG4gIGNsZWFyRmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwKCk6IHZvaWQ7XG59XG5cbmxldCBpbXBsOiBSZWZJbXBsIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpbml0V29ya2xldFJlZigpOiBSZWZJbXBsIHtcbiAgcmV0dXJuIChpbXBsID0ge1xuICAgIF93b3JrbGV0UmVmTWFwOiB7fSxcbiAgICAvKipcbiAgICAgKiBNYXAgb2Ygd29ya2xldCByZWZzIHRoYXQgYXJlIGNyZWF0ZWQgZHVyaW5nIGZpcnN0IHNjcmVlbiByZW5kZXJpbmcuXG4gICAgICogVGhlc2UgcmVmcyBhcmUgY3JlYXRlZCB3aXRoIG5lZ2F0aXZlIElEcyBhbmQgbmVlZCB0byBiZSBoeWRyYXRlZFxuICAgICAqIHdoZW4gdGhlIGFwcCBzdGFydHMuIFRoZSBtYXAgaXMgY2xlYXJlZCBhZnRlciBoeWRyYXRpb24gaXMgY29tcGxldGVcbiAgICAgKiB0byBmcmVlIHVwIG1lbW9yeS5cbiAgICAgKi9cbiAgICBfZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwOiB7fSxcbiAgICB1cGRhdGVXb3JrbGV0UmVmLFxuICAgIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzLFxuICAgIGNsZWFyRmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwLFxuICB9KTtcbn1cblxuY29uc3QgY3JlYXRlV29ya2xldFJlZiA9IDxUPihcbiAgaWQ6IFdvcmtsZXRSZWZJZCxcbiAgdmFsdWU6IFQsXG4pOiBXb3JrbGV0UmVmPFQ+ID0+IHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiB2YWx1ZSxcbiAgICBfd3ZpZDogaWQsXG4gIH07XG59O1xuXG5jb25zdCBnZXRGcm9tV29ya2xldFJlZk1hcCA9IDxUPihcbiAgcmVmSW1wbDogV29ya2xldFJlZkltcGw8VD4sXG4pOiBXb3JrbGV0UmVmPFQ+ID0+IHtcbiAgY29uc3QgaWQgPSByZWZJbXBsLl93dmlkO1xuICBsZXQgdmFsdWU7XG4gIGlmIChpZCA8IDApIHtcbiAgICAvLyBBdCB0aGUgZmlyc3Qgc2NyZWVuIHJlbmRlcmluZywgdGhlIHdvcmtsZXQgcmVmIGlzIGNyZWF0ZWQgd2l0aCBhIG5lZ2F0aXZlIElELlxuICAgIC8vIE1pZ2h0IGJlIGNhbGxlZCBpbiB0d28gc2NlbmFyaW9zOlxuICAgIC8vIDEuIEluIE1UUyBldmVudHNcbiAgICAvLyAyLiBJbiBgbWFpbi10aHJlYWQ6cmVmYFxuICAgIHZhbHVlID0gaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcFtpZF0gYXMgV29ya2xldFJlZjxUPjtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IGltcGwhLl9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXBbaWRdID0gY3JlYXRlV29ya2xldFJlZihpZCwgcmVmSW1wbC5faW5pdFZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBpbXBsIS5fd29ya2xldFJlZk1hcFtpZF0gYXMgV29ya2xldFJlZjxUPjtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgaWYgKF9fREVWX18gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignV29ya2xldDogcmVmIGlzIG5vdCBpbml0aWFsaXplZDogJyArIGlkKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5mdW5jdGlvbiByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwKGlkOiBXb3JrbGV0UmVmSWQpOiB2b2lkIHtcbiAgZGVsZXRlIGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBub2RlLCB0aGVuIHNldCB0aGUgd29ya2xldCB2YWx1ZSB0byBpdC5cbiAqIFRoaXMgaXMgY2FsbGVkIGluIGBzbmFwc2hvdENvbnRleHRVcGRhdGVXb3JrbGV0UmVmYC5cbiAqIEBwYXJhbSBoYW5kbGUgaGFuZGxlIG9mIHRoZSB3b3JrbGV0IHZhbHVlLlxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlV29ya2xldFJlZihcbiAgaGFuZGxlOiBXb3JrbGV0UmVmSW1wbDxFbGVtZW50IHwgbnVsbD4sXG4gIGVsZW1lbnQ6IEVsZW1lbnROb2RlIHwgbnVsbCxcbik6IHZvaWQge1xuICBnZXRGcm9tV29ya2xldFJlZk1hcChoYW5kbGUpLmN1cnJlbnQgPSBlbGVtZW50XG4gICAgPyBuZXcgRWxlbWVudChlbGVtZW50KVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMoXG4gIHBhdGNoOiBbV29ya2xldFJlZklkLCB1bmtub3duXVtdLFxuKTogdm9pZCB7XG4gIHByb2ZpbGUoJ3VwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzJywgKCkgPT4ge1xuICAgIHBhdGNoLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoIWltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSkge1xuICAgICAgICBpbXBsIS5fd29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCgpOiB2b2lkIHtcbiAgaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCA9IHt9O1xufVxuXG5leHBvcnQge1xuICB0eXBlIFJlZkltcGwsXG4gIGNyZWF0ZVdvcmtsZXRSZWYsXG4gIGluaXRXb3JrbGV0UmVmLFxuICBnZXRGcm9tV29ya2xldFJlZk1hcCxcbiAgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCxcbiAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMsXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IFdvcmtsZXRFdmVudHMgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VXb3JrbGV0UmVmRGF0YSwgUnVuV29ya2xldEN0eERhdGEgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHJ1blJ1bk9uTWFpblRocmVhZFRhc2sgfSBmcm9tICcuL3J1bk9uTWFpblRocmVhZC5qcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50IH0gZnJvbSAnLi90eXBlcy9ydW50aW1lUHJveHkuanMnO1xuaW1wb3J0IHsgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCB9IGZyb20gJy4vd29ya2xldFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgY29uc3QganNDb250ZXh0ID0gbHlueC5nZXRKU0NvbnRleHQoKTtcbiAganNDb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgV29ya2xldEV2ZW50cy5ydW5Xb3JrbGV0Q3R4LFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEgYXMgc3RyaW5nKSBhcyBSdW5Xb3JrbGV0Q3R4RGF0YTtcbiAgICAgIHJ1blJ1bk9uTWFpblRocmVhZFRhc2soZGF0YS53b3JrbGV0LCBkYXRhLnBhcmFtcyBhcyBDbG9zdXJlVmFsdWVUeXBlW10sIGRhdGEucmVzb2x2ZUlkKTtcbiAgICB9LFxuICApO1xuICBqc0NvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBXb3JrbGV0RXZlbnRzLnJlbGVhc2VXb3JrbGV0UmVmLFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAoKGV2ZW50LmRhdGEgYXMgUmVsZWFzZVdvcmtsZXRSZWZEYXRhKS5pZCk7XG4gICAgfSxcbiAgKTtcbn1cblxuZXhwb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBKc0ZuSGFuZGxlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5cbmludGVyZmFjZSBEZXRhaWxzIHtcbiAgdGFzazogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgLy8gVGhpcyBjb21lcyBmcm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCwgaW5zZXJ0ZWQgaGVyZSBkdXJpbmcgY3R4IGh5ZHJhdGlvbi5cbiAganNGbkhhbmRsZT86IEpzRm5IYW5kbGU7XG59XG5cbmludGVyZmFjZSBSdW5PbkJhY2tncm91bmREZWxheUltcGwge1xuICAvLyBFbGVtZW50cyBzaG91bGQga2VlcCB0aGUgb3JkZXIgYmVpbmcgY2FsbGVkIGJ5IHRoZSB1c2VyLlxuICBkZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXk6IERldGFpbHNbXTtcbiAgZGVsYXlSdW5PbkJhY2tncm91bmQoZm5PYmo6IEpzRm5IYW5kbGUsIGZuOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7XG4gIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zKCk6IHZvaWQ7XG59XG5cbmxldCBpbXBsOiBSdW5PbkJhY2tncm91bmREZWxheUltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRSdW5PbkJhY2tncm91bmREZWxheSgpOiBSdW5PbkJhY2tncm91bmREZWxheUltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5OiBbXSxcbiAgICBkZWxheVJ1bk9uQmFja2dyb3VuZCxcbiAgICBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlbGF5UnVuT25CYWNrZ3JvdW5kKGZuT2JqOiBKc0ZuSGFuZGxlLCB0YXNrOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZCkge1xuICBpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkucHVzaCh7IHRhc2sgfSk7XG4gIGNvbnN0IGRlbGF5SW5kaWNlcyA9IGZuT2JqLl9kZWxheUluZGljZXMgPz89IFtdO1xuICBkZWxheUluZGljZXMucHVzaChpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkubGVuZ3RoIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGRldGFpbHMgb2YgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5KSB7XG4gICAgaWYgKGRldGFpbHMuanNGbkhhbmRsZSkge1xuICAgICAgZGV0YWlscy50YXNrKGRldGFpbHMuanNGbkhhbmRsZS5fanNGbklkISwgZGV0YWlscy5qc0ZuSGFuZGxlLl9leGVjSWQhKTtcbiAgICB9XG4gIH1cbiAgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5Lmxlbmd0aCA9IDA7XG59XG5cbmV4cG9ydCB7IHR5cGUgUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsLCBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIFdvcmtsZXQgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG5pbnRlcmZhY2UgRXZlbnREZWxheUltcGwge1xuICBfZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA6IE1hcDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGVbXVtdPjtcbiAgcnVuRGVsYXllZFdvcmtsZXQod29ya2xldDogV29ya2xldCwgZWxlbWVudDogRWxlbWVudE5vZGUpOiB2b2lkO1xuICBjbGVhckRlbGF5ZWRXb3JrbGV0cygpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogRXZlbnREZWxheUltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRFdmVudERlbGF5KCk6IEV2ZW50RGVsYXlJbXBsIHtcbiAgcmV0dXJuIChpbXBsID0ge1xuICAgIF9kZWxheWVkV29ya2xldFBhcmFtc01hcDogbmV3IE1hcCgpLFxuICAgIHJ1bkRlbGF5ZWRXb3JrbGV0LFxuICAgIGNsZWFyRGVsYXllZFdvcmtsZXRzLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVsYXlFeGVjVW50aWxKc1JlYWR5KFxuICBoYXNoOiBzdHJpbmcsXG4gIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLFxuKTogdm9pZCB7XG4gIHByb2ZpbGUoJ2RlbGF5RXhlY1VudGlsSnNSZWFkeTogJyArIGhhc2gsICgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA7XG4gICAgY29uc3QgcGFyYW1WZWMgPSBtYXAuZ2V0KGhhc2gpO1xuICAgIGlmIChwYXJhbVZlYykge1xuICAgICAgcGFyYW1WZWMucHVzaChwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuc2V0KGhhc2gsIFtwYXJhbXNdKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5EZWxheWVkV29ya2xldCh3b3JrbGV0OiBXb3JrbGV0LCBlbGVtZW50OiBFbGVtZW50Tm9kZSk6IHZvaWQge1xuICBwcm9maWxlKCdjb21taXREZWxheWVkV29ya2xldCcsICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXNWZWMgPSBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuZ2V0KFxuICAgICAgd29ya2xldC5fd2tsdElkLFxuICAgICk7XG4gICAgaWYgKHBhcmFtc1ZlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxlZnRQYXJhbXNWZWM6IENsb3N1cmVWYWx1ZVR5cGVbXVtdID0gW107XG4gICAgcGFyYW1zVmVjLmZvckVhY2goKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RQYXJhbSA9IHBhcmFtc1swXSBhcyB7IGN1cnJlbnRUYXJnZXQ/OiB7IGVsZW1lbnRSZWZwdHI/OiBFbGVtZW50Tm9kZSB9IH0gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RQYXJhbT8uY3VycmVudFRhcmdldD8uZWxlbWVudFJlZnB0ciA9PT0gZWxlbWVudCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBwcm9maWxlKCdydW5EZWxheWVkV29ya2xldCcsICgpID0+IHtcbiAgICAgICAgICAgIHJ1bldvcmtsZXQod29ya2xldCwgcGFyYW1zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0UGFyYW1zVmVjLnB1c2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuc2V0KFxuICAgICAgd29ya2xldC5fd2tsdElkLFxuICAgICAgbGVmdFBhcmFtc1ZlYyxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJEZWxheWVkV29ya2xldHMoKTogdm9pZCB7XG4gIGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5jbGVhcigpO1xufVxuXG5leHBvcnQgeyB0eXBlIEV2ZW50RGVsYXlJbXBsLCBpbml0RXZlbnREZWxheSwgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBydW5EZWxheWVkV29ya2xldCwgY2xlYXJEZWxheWVkV29ya2xldHMgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBzZXRTaG91bGRGbHVzaCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVvbUltcGwge1xuICBzZXRTaG91bGRGbHVzaCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RW9tSW1wbCgpOiBFb21JbXBsIHtcbiAgcmV0dXJuIHtcbiAgICBzZXRTaG91bGRGbHVzaCxcbiAgfTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5cbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgRXZlbnRDdHgsIFJ1bldvcmtsZXRPcHRpb25zIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBSdW5Xb3JrbGV0U291cmNlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5cbi8vIEV2ZW50UmVzdWx0IGVudW0gdmFsdWVzXG5leHBvcnQgY29uc3QgRXZlbnRSZXN1bHQgPSB7XG4gIGtEZWZhdWx0OiAweDAsXG4gIGtTdG9wUHJvcGFnYXRpb25NYXNrOiAweDEsXG4gIGtTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25NYXNrOiAweDIsXG59IGFzIGNvbnN0O1xuXG50eXBlIEV2ZW50TGlrZSA9IFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFdmVudE9iamVjdChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sXG4gIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyxcbik6IGN0eCBpcyBbRXZlbnRMaWtlLCAuLi5DbG9zdXJlVmFsdWVUeXBlW11dIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGN0eCkgfHwgdHlwZW9mIGN0eFswXSAhPT0gJ29iamVjdCcgfHwgY3R4WzBdID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc291cmNlID09PSBSdW5Xb3JrbGV0U291cmNlLkVWRU5UKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBldmVudCBtZXRob2RzIHRvIGFuIGV2ZW50IG9iamVjdCBpZiBuZWVkZWRcbiAqIEBwYXJhbSBjdHggVGhlIGV2ZW50IG9iamVjdCB0byBlbmhhbmNlXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgcnVuIHdvcmtsZXQgb3B0aW9uc1xuICogQHJldHVybnMgQSB0dXBsZSBvZiBib29sZWFuIGFuZCB0aGUgZXZlbnQgcmV0dXJuIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQoY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyk6IFtib29sZWFuLCBFdmVudEN0eF0ge1xuICBpZiAoIWlzRXZlbnRPYmplY3QoY3R4LCBvcHRpb25zKSkge1xuICAgIHJldHVybiBbZmFsc2UsIHt9XTtcbiAgfVxuICBjb25zdCBldmVudEN0eDogRXZlbnRDdHggPSB7fTtcbiAgY29uc3QgZXZlbnRPYmogPSBjdHhbMF07XG5cbiAgLy8gQWRkIHN0b3BQcm9wYWdhdGlvbiBtZXRob2RcbiAgZXZlbnRPYmpbJ3N0b3BQcm9wYWdhdGlvbiddID0gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID0gKGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA/PyBFdmVudFJlc3VsdC5rRGVmYXVsdClcbiAgICAgIHwgRXZlbnRSZXN1bHQua1N0b3BQcm9wYWdhdGlvbk1hc2s7XG4gIH07XG5cbiAgLy8gQWRkIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBtZXRob2RcbiAgZXZlbnRPYmpbJ3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiddID0gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID0gKGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA/PyBFdmVudFJlc3VsdC5rRGVmYXVsdClcbiAgICAgIHwgRXZlbnRSZXN1bHQua1N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbk1hc2s7XG4gIH07XG5cbiAgcmV0dXJuIFt0cnVlLCBldmVudEN0eF07XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIEpzRm5IYW5kbGUsIFdvcmtsZXQsIFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG4vKipcbiAqIEh5ZHJhdGVzIGEgV29ya2xldCBjb250ZXh0IHdpdGggZGF0YSBmcm9tIGEgZmlyc3Qtc2NyZWVuIFdvcmtsZXQgY29udGV4dC5cbiAqIFRoaXMgcHJvY2VzcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBydW4gYWxsIGRlbGF5ZWQgYHJ1bk9uQmFja2dyb3VuZGAgZnVuY3Rpb25zXG4gKiBhbmQgaW5pdGlhbGl6ZSBgV29ya2xldFJlZmAgdmFsdWVzIG1vZGlmaWVkIGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIGN0eCBUaGUgdGFyZ2V0IFdvcmtsZXQgY29udGV4dCB0byBiZSBoeWRyYXRlZC5cbiAqIEBwYXJhbSBmaXJzdFNjcmVlbkN0eCBUaGUgV29ya2xldCBjb250ZXh0IGZyb20gdGhlIGZpcnN0IHNjcmVlbiByZW5kZXJpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgZGF0YSB0byBoeWRyYXRlIHdpdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlQ3R4KGN0eDogV29ya2xldCwgZmlyc3RTY3JlZW5DdHg6IFdvcmtsZXQpOiB2b2lkIHtcbiAgcHJvZmlsZSgnaHlkcmF0ZUN0eCcsICgpID0+IHtcbiAgICBoeWRyYXRlQ3R4SW1wbChjdHgsIGZpcnN0U2NyZWVuQ3R4LCBjdHguX2V4ZWNJZCEpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZUN0eEltcGwoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZmlyc3RTY3JlZW5DdHg6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGV4ZWNJZDogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGlmIChcbiAgICAhY3R4IHx8IHR5cGVvZiBjdHggIT09ICdvYmplY3QnIHx8ICFmaXJzdFNjcmVlbkN0eFxuICAgIHx8IHR5cGVvZiBmaXJzdFNjcmVlbkN0eCAhPT0gJ29iamVjdCdcbiAgKSByZXR1cm47XG5cbiAgY29uc3QgY3R4T2JqID0gY3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuICBjb25zdCBmaXJzdFNjcmVlbkN0eE9iaiA9IGZpcnN0U2NyZWVuQ3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGlmIChjdHhPYmpbJ193a2x0SWQnXSAmJiBjdHhPYmpbJ193a2x0SWQnXSAhPT0gZmlyc3RTY3JlZW5DdHhPYmpbJ193a2x0SWQnXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZm9yLWluLWFycmF5XG4gIGZvciAoY29uc3Qga2V5IGluIGN0eCkge1xuICAgIGlmIChrZXkgPT09ICdfd3ZpZCcpIHtcbiAgICAgIGh5ZHJhdGVNYWluVGhyZWFkUmVmKFxuICAgICAgICBjdHhPYmpba2V5XSBhcyBXb3JrbGV0UmVmSWQsXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqIGFzIHVua25vd24gYXMgV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnX2pzRm4nKSB7XG4gICAgICBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgICAgICAgY3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGV4ZWNJZCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0U2NyZWVuVmFsdWUgPSB0eXBlb2YgZmlyc3RTY3JlZW5DdHhPYmpba2V5XSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IChmaXJzdFNjcmVlbkN0eE9ialtrZXldIGFzIHsgY3R4OiBDbG9zdXJlVmFsdWVUeXBlIH0pLmN0eFxuICAgICAgICA6IGZpcnN0U2NyZWVuQ3R4T2JqW2tleV07XG4gICAgICBoeWRyYXRlQ3R4SW1wbChjdHhPYmpba2V5XSwgZmlyc3RTY3JlZW5WYWx1ZSwgZXhlY0lkKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBIeWRyYXRlcyBhIFdvcmtsZXRSZWYgb24gdGhlIG1haW4gdGhyZWFkLlxuICogVGhpcyBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgV29ya2xldFJlZidzIGJhY2tncm91bmQgaW5pdGlhbCB2YWx1ZSBiYXNlZCBvbiBjaGFuZ2VzXG4gKiB0aGF0IG9jY3VycmVkIGluIHRoZSBmaXJzdC1zY3JlZW4gV29ya2xldCBjb250ZXh0IGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIHJlZklkIFRoZSBJRCBvZiB0aGUgV29ya2xldFJlZiB0byBoeWRyYXRlLlxuICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBXb3JrbGV0UmVmLlxuICovXG5mdW5jdGlvbiBoeWRyYXRlTWFpblRocmVhZFJlZihcbiAgcmVmSWQ6IFdvcmtsZXRSZWZJZCxcbiAgdmFsdWU6IFdvcmtsZXRSZWZJbXBsPHVua25vd24+LFxuKSB7XG4gIGlmICgnX2luaXRWYWx1ZScgaW4gdmFsdWUpIHtcbiAgICAvLyBUaGUgcmVmIGhhcyBub3QgYmVlbiBhY2Nlc3NlZCB5ZXQuXG4gICAgcmV0dXJuO1xuICB9XG4gIGx5bnhXb3JrbGV0SW1wbCEuX3JlZkltcGwuX3dvcmtsZXRSZWZNYXBbcmVmSWRdID0gdmFsdWU7XG59XG5cbi8qKlxuICogSHlkcmF0ZXMgZGVsYXllZCBgcnVuT25CYWNrZ3JvdW5kYCB0YXNrcy5cbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGFueSBgcnVuT25CYWNrZ3JvdW5kYCBjYWxscyB0aGF0IHdlcmUgZGVsYXllZFxuICogZHVyaW5nIHRoZSBmaXJzdC1zY3JlZW4gcmVuZGVyaW5nIGFyZSBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZWlyXG4gKiByZXNwZWN0aXZlIEphdmFTY3JpcHQgZnVuY3Rpb24gaGFuZGxlcyBpbiB0aGUgaHlkcmF0ZWQgV29ya2xldCBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgZm5PYmpzOiBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPiwgLy8gZXhhbXBsZToge1wiX2pzRm4xXCI6e1wiX2pzRm5JZFwiOjF9fVxuICBmaXJzdFNjcmVlbkZuT2JqczogUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sIC8vIGV4YW1wbGU6IHtcIl9qc0ZuMVwiOntcIl9pc0ZpcnN0U2NyZWVuXCI6dHJ1ZSxcIl9kZWxheUluZGljZXNcIjpbMF19fVxuICBleGVjSWQ6IG51bWJlcixcbikge1xuICBmb3IgKGNvbnN0IGZuTmFtZSBpbiBmbk9ianMpIHtcbiAgICBjb25zdCBmbk9iaiA9IGZuT2Jqc1tmbk5hbWVdITtcbiAgICBjb25zdCBmaXJzdFNjcmVlbkZuT2JqOiBKc0ZuSGFuZGxlIHwgdW5kZWZpbmVkID0gZmlyc3RTY3JlZW5Gbk9ianNbZm5OYW1lXTtcbiAgICBpZiAoIWZpcnN0U2NyZWVuRm5PYmo/Ll9kZWxheUluZGljZXMpIHtcbiAgICAgIGlmIChmaXJzdFNjcmVlbkZuT2JqKSB7XG4gICAgICAgIGZpcnN0U2NyZWVuRm5PYmouX2lzRmlyc3RTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgZmlyc3RTY3JlZW5Gbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpcnN0U2NyZWVuRm5PYmosIGZuT2JqKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGZpcnN0U2NyZWVuRm5PYmouX2RlbGF5SW5kaWNlcykge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGx5bnhXb3JrbGV0SW1wbCEuX3J1bk9uQmFja2dyb3VuZERlbGF5SW1wbFxuICAgICAgICAuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5W2luZGV4XSE7XG4gICAgICBmbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgZGV0YWlscy5qc0ZuSGFuZGxlID0gZm5PYmo7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuL3V0aWxzL3ZlcnNpb24uanMnO1xuXG4vKipcbiAqIGBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcmAgbW9uaXRvcnMgcmVmZXJlbmNlcyB0byBKUyBmdW5jdGlvbiBoYW5kbGVzIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgLlxuICogSW4gSlMgY29udGV4dCwgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgIGlzIHJlZmVyZW5jZWQgYnkgYEpzRm5IYW5kbGVgcyBhbmQgZmluYWxseSBieSBgZXhlY0lkYC5cbiAqIFdoZW4gYWxsIGBKc0ZuSGFuZGxlYHMgaW4gbGVwdXMgYXJlIHJlbGVhc2VkLCBhbiBldmVudCB3aWxsIGJlIHNlbnQgdG8gSlMgY29udGV4dCB0byBkZS1yZWYgdGhlIGBleGVjSWRgLFxuICogcmVzdWx0aW5nIGEgZGUtcmVmIHRvIHRoZSBqcyBmdW5jdGlvbiBpbiBKUyBjb250ZXh0LlxuICovXG5jbGFzcyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciB7XG4gIHByaXZhdGUgZXhlY0lkUmVmQ291bnQgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBwcml2YXRlIGV4ZWNJZFNldFRvRmlyZSA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBwcml2YXRlIHdpbGxGaXJlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVnaXN0cnk/OiBGaW5hbGl6YXRpb25SZWdpc3RyeTxudW1iZXI+ID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVnaXN0cnkgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnk8bnVtYmVyPih0aGlzLnJlbW92ZVJlZi5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGFkZFJlZihleGVjSWQ6IG51bWJlciwgb2JqVG9SZWY6IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KFxuICAgICAgZXhlY0lkLFxuICAgICAgKHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkgPz8gMCkgKyAxLFxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RyeSEucmVnaXN0ZXIob2JqVG9SZWYsIGV4ZWNJZCk7XG4gIH1cblxuICByZW1vdmVSZWYoZXhlY0lkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByYyA9IHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkhO1xuICAgIGlmIChyYyA+IDEpIHtcbiAgICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KGV4ZWNJZCwgcmMgLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5kZWxldGUoZXhlY0lkKTtcbiAgICB0aGlzLmV4ZWNJZFNldFRvRmlyZS5hZGQoZXhlY0lkKTtcbiAgICBpZiAoIXRoaXMud2lsbEZpcmUpIHtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSB0cnVlO1xuICAgICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaXJlKCk6IHZvaWQge1xuICAgIHByb2ZpbGUoJ0pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLmZpcmUnLCAoKSA9PiB7XG4gICAgICBseW54LmdldEpTQ29udGV4dCgpLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLnJlbGVhc2VCYWNrZ3JvdW5kV29ya2xldEN0eCxcbiAgICAgICAgZGF0YTogQXJyYXkuZnJvbSh0aGlzLmV4ZWNJZFNldFRvRmlyZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmNsZWFyKCk7XG4gICAgICB0aGlzLndpbGxGaXJlID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSdW5PbkJhY2tncm91bmRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTZGtWZXJzaW9uR3QoMiwgMTUpO1xufVxuXG5leHBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBSdW5Xb3JrbGV0T3B0aW9ucywgV29ya2xldCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IGluaXRSdW5PbkJhY2tncm91bmREZWxheSB9IGZyb20gJy4vZGVsYXlSdW5PbkJhY2tncm91bmQuanMnO1xuaW1wb3J0IHsgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBpbml0RXZlbnREZWxheSB9IGZyb20gJy4vZGVsYXlXb3JrbGV0RXZlbnQuanMnO1xuaW1wb3J0IHsgaW5pdEVvbUltcGwgfSBmcm9tICcuL2VvbUltcGwuanMnO1xuaW1wb3J0IHsgYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQgfSBmcm9tICcuL2V2ZW50UHJvcGFnYXRpb24uanMnO1xuaW1wb3J0IHsgaHlkcmF0ZUN0eCB9IGZyb20gJy4vaHlkcmF0ZS5qcyc7XG5pbXBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH0gZnJvbSAnLi9qc0Z1bmN0aW9uTGlmZWN5Y2xlLmpzJztcbmltcG9ydCB7IHJ1blJ1bk9uTWFpblRocmVhZFRhc2sgfSBmcm9tICcuL3J1bk9uTWFpblRocmVhZC5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcbmltcG9ydCB7IGdldEZyb21Xb3JrbGV0UmVmTWFwLCBpbml0V29ya2xldFJlZiB9IGZyb20gJy4vd29ya2xldFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRXb3JrbGV0KCk6IHZvaWQge1xuICBnbG9iYWxUaGlzLmx5bnhXb3JrbGV0SW1wbCA9IHtcbiAgICBfd29ya2xldE1hcDoge30sXG4gICAgX3JlZkltcGw6IGluaXRXb3JrbGV0UmVmKCksXG4gICAgX3J1bk9uQmFja2dyb3VuZERlbGF5SW1wbDogaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5KCksXG4gICAgX2h5ZHJhdGVDdHg6IGh5ZHJhdGVDdHgsXG4gICAgX2V2ZW50RGVsYXlJbXBsOiBpbml0RXZlbnREZWxheSgpLFxuICAgIF9lb21JbXBsOiBpbml0RW9tSW1wbCgpLFxuICAgIF9ydW5SdW5Pbk1haW5UaHJlYWRUYXNrOiBydW5SdW5Pbk1haW5UaHJlYWRUYXNrLFxuICB9O1xuXG4gIGlmIChpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQoKSkge1xuICAgIGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsLl9qc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciA9IG5ldyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcigpO1xuICB9XG5cbiAgZ2xvYmFsVGhpcy5yZWdpc3RlcldvcmtsZXQgPSByZWdpc3RlcldvcmtsZXQ7XG4gIGdsb2JhbFRoaXMucmVnaXN0ZXJXb3JrbGV0SW50ZXJuYWwgPSByZWdpc3RlcldvcmtsZXQ7XG4gIGdsb2JhbFRoaXMucnVuV29ya2xldCA9IHJ1bldvcmtsZXQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSB3b3JrbGV0IGZ1bmN0aW9uLCBhbGxvd2luZyBpdCB0byBiZSBleGVjdXRlZCBieSBgcnVuV29ya2xldCgpYC5cbiAqIFRoaXMgaXMgY2FsbGVkIGluIGxlcHVzLmpzLlxuICogQHBhcmFtIF90eXBlIHdvcmtsZXQgdHlwZSwgJ21haW4tdGhyZWFkJyBvciAndWknXG4gKiBAcGFyYW0gaWQgd29ya2xldCBoYXNoXG4gKiBAcGFyYW0gd29ya2xldCB3b3JrbGV0IGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyV29ya2xldChfdHlwZTogc3RyaW5nLCBpZDogc3RyaW5nLCB3b3JrbGV0OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKTogdm9pZCB7XG4gIGx5bnhXb3JrbGV0SW1wbC5fd29ya2xldE1hcFtpZF0gPSB3b3JrbGV0O1xufVxuXG4vKipcbiAqIEVudHJhbmNlIG9mIGFsbCB3b3JrbGV0IGNhbGxzLlxuICogTmF0aXZlIGV2ZW50IHRvdWNoIGhhbmRsZXIgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gY3R4IHdvcmtsZXQgb2JqZWN0LlxuICogQHBhcmFtIHBhcmFtcyB3b3JrbGV0IHBhcmFtcy5cbiAqIEBwYXJhbSBvcHRpb25zIHJ1biB3b3JrbGV0IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHJ1bldvcmtsZXQoY3R4OiBXb3JrbGV0LCBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSwgb3B0aW9ucz86IFJ1bldvcmtsZXRPcHRpb25zKTogdW5rbm93biB7XG4gIGlmICghdmFsaWRhdGVXb3JrbGV0KGN0eCkpIHtcbiAgICBjb25zb2xlLndhcm4oJ1dvcmtsZXQ6IEludmFsaWQgd29ya2xldCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShjdHgpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCdfbGVwdXNXb3JrbGV0SGFzaCcgaW4gY3R4KSB7XG4gICAgZGVsYXlFeGVjVW50aWxKc1JlYWR5KGN0eC5fbGVwdXNXb3JrbGV0SGFzaCwgcGFyYW1zKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIHJ1bldvcmtsZXRJbXBsKGN0eCwgcGFyYW1zLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcnVuV29ya2xldEltcGwoY3R4OiBXb3JrbGV0LCBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSwgb3B0aW9ucz86IFJ1bldvcmtsZXRPcHRpb25zKTogdW5rbm93biB7XG4gIGNvbnN0IHdvcmtsZXQ6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gPSBwcm9maWxlKFxuICAgICd0cmFuc2Zvcm1Xb3JrbGV0Q3R4ICcgKyBjdHguX3drbHRJZCxcbiAgICAoKSA9PiB0cmFuc2Zvcm1Xb3JrbGV0KGN0eCwgdHJ1ZSksXG4gICk7XG4gIGNvbnN0IHBhcmFtc186IENsb3N1cmVWYWx1ZVR5cGVbXSA9IHByb2ZpbGUoXG4gICAgJ3RyYW5zZm9ybVdvcmtsZXRQYXJhbXMnLFxuICAgICgpID0+IHRyYW5zZm9ybVdvcmtsZXQocGFyYW1zIHx8IFtdLCBmYWxzZSksXG4gICk7XG5cbiAgY29uc3QgW2hhc0V2ZW50TWV0aG9kcywgZXZlbnRDdHhdID0gYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQocGFyYW1zXywgb3B0aW9ucyk7XG5cbiAgY29uc3QgcmVzdWx0ID0gcHJvZmlsZSgncnVuV29ya2xldCcsICgpID0+IHdvcmtsZXQoLi4ucGFyYW1zXykpO1xuXG4gIGlmIChoYXNFdmVudE1ldGhvZHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmV0dXJuVmFsdWU6IHJlc3VsdCxcbiAgICAgIGV2ZW50UmV0dXJuUmVzdWx0OiBldmVudEN0eC5fZXZlbnRSZXR1cm5SZXN1bHQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV29ya2xldChjdHg6IHVua25vd24pOiBjdHggaXMgV29ya2xldCB7XG4gIHJldHVybiB0eXBlb2YgY3R4ID09PSAnb2JqZWN0JyAmJiBjdHggIT09IG51bGwgJiYgKCdfd2tsdElkJyBpbiBjdHggfHwgJ19sZXB1c1dvcmtsZXRIYXNoJyBpbiBjdHgpO1xufVxuXG5jb25zdCB3b3JrbGV0Q2FjaGUgPSBuZXcgV2Vha01hcDxvYmplY3QsIENsb3N1cmVWYWx1ZVR5cGUgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bik+KCk7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVdvcmtsZXQoY3R4OiBXb3JrbGV0LCBpc1dvcmtsZXQ6IHRydWUpOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sXG4gIGlzV29ya2xldDogZmFsc2UsXG4pOiBDbG9zdXJlVmFsdWVUeXBlW107XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVdvcmtsZXQoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgaXNXb3JrbGV0OiBib29sZWFuLFxuKTogQ2xvc3VyZVZhbHVlVHlwZSB8ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKSB7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgaWYgKHR5cGVvZiBjdHggIT09ICdvYmplY3QnIHx8IGN0eCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjdHg7XG4gIH1cblxuICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgY29uc3QgcmVzID0gd29ya2xldENhY2hlLmdldChjdHgpO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ya2xldCA9IHsgbWFpbjogY3R4IH07XG4gIHRyYW5zZm9ybVdvcmtsZXRJbm5lcih3b3JrbGV0LCAwLCBjdHgpO1xuXG4gIGlmIChpc1dvcmtsZXQpIHtcbiAgICB3b3JrbGV0Q2FjaGUuc2V0KGN0eCwgd29ya2xldC5tYWluKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrbGV0Lm1haW47XG59XG5cbmNvbnN0IHRyYW5zZm9ybVdvcmtsZXRJbm5lciA9IChcbiAgdmFsdWU6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGRlcHRoOiBudW1iZXIsXG4gIGN0eDogdW5rbm93bixcbikgPT4ge1xuICBjb25zdCBsaW1pdCA9IDEwMDA7XG4gIGlmICgrK2RlcHRoID49IGxpbWl0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEZXB0aCBvZiB2YWx1ZSBleGNlZWRzIGxpbWl0IG9mICcgKyBsaW1pdCArICcuJyk7XG4gIH1cbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBvYmogPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlPjtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBjb25zdCBzdWJPYmo6IENsb3N1cmVWYWx1ZVR5cGUgPSBvYmpba2V5XTtcbiAgICBpZiAodHlwZW9mIHN1Yk9iaiAhPT0gJ29iamVjdCcgfHwgc3ViT2JqID09PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoLyoqIGlzRXZlbnRUYXJnZXQgKi8gJ2VsZW1lbnRSZWZwdHInIGluIHN1Yk9iaikge1xuICAgICAgb2JqW2tleV0gPSBuZXcgRWxlbWVudChzdWJPYmpbJ2VsZW1lbnRSZWZwdHInXSBhcyBFbGVtZW50Tm9kZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKHN1Yk9iaiBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRyYW5zZm9ybVdvcmtsZXRJbm5lcihzdWJPYmosIGRlcHRoLCBjdHgpO1xuXG4gICAgY29uc3QgaXNXb3JrbGV0UmVmID0gJ193dmlkJyBpbiAoc3ViT2JqIGFzIG9iamVjdCk7XG4gICAgaWYgKGlzV29ya2xldFJlZikge1xuICAgICAgb2JqW2tleV0gPSBnZXRGcm9tV29ya2xldFJlZk1hcChcbiAgICAgICAgc3ViT2JqIGFzIHVua25vd24gYXMgV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzV29ya2xldCA9ICdfd2tsdElkJyBpbiBzdWJPYmo7XG4gICAgaWYgKGlzV29ya2xldCkge1xuICAgICAgLy8gYHN1Yk9iamAgaXMgd29ya2xldCBjdHguIFNoYWxsb3cgY29weSBpdCB0byBwcmV2ZW50IHRoZSB0cmFuc2Zvcm1lZCB3b3JrbGV0IGZyb20gcmVmZXJlbmNpbmcgY3R4LlxuICAgICAgLy8gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIHZhbHVlIG9mIGB3b3JrbGV0Q2FjaGVgIHJlZmVyZW5jaW5nIGl0cyBrZXkuXG4gICAgICBvYmpba2V5XSA9IGx5bnhXb3JrbGV0SW1wbC5fd29ya2xldE1hcFsoc3ViT2JqIGFzIFdvcmtsZXQpLl93a2x0SWRdIVxuICAgICAgICAuYmluZCh7IC4uLnN1Yk9iaiB9KTtcbiAgICAgIG9ialtrZXldLmN0eCA9IHN1Yk9iajtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc0pzRm4gPSAnX2pzRm5JZCcgaW4gc3ViT2JqO1xuICAgIGlmIChpc0pzRm4pIHtcbiAgICAgIHN1Yk9ialsnX2V4ZWNJZCddID0gKGN0eCBhcyBXb3JrbGV0KS5fZXhlY0lkO1xuICAgICAgbHlueFdvcmtsZXRJbXBsLl9qc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcj8uYWRkUmVmKFxuICAgICAgICAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQhLFxuICAgICAgICBzdWJPYmosXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgeyBpbml0V29ya2xldCB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IGluaXRBcGlFbnYgfSBmcm9tICcuL2FwaS9seW54QXBpLmpzJztcbmltcG9ydCB7IGluaXRFdmVudExpc3RlbmVycyB9IGZyb20gJy4vbGlzdGVuZXJzLmpzJztcbmltcG9ydCB7IGluaXRXb3JrbGV0IH0gZnJvbSAnLi93b3JrbGV0UnVudGltZS5qcyc7XG5cbmlmIChnbG9iYWxUaGlzLmx5bnhXb3JrbGV0SW1wbCA9PT0gdW5kZWZpbmVkKSB7XG4gIGluaXRXb3JrbGV0KCk7XG4gIGluaXRBcGlFbnYoKTtcbiAgaW5pdEV2ZW50TGlzdGVuZXJzKCk7XG59XG4iXSwibmFtZXMiOlsiQW5pbWF0aW9uIiwiX19FbGVtZW50QW5pbWF0ZSIsImVmZmVjdCIsIktleWZyYW1lRWZmZWN0IiwidGFyZ2V0Iiwia2V5ZnJhbWVzIiwib3B0aW9ucyIsIndpbGxGbHVzaCIsInNob3VsZEZsdXNoIiwic2V0U2hvdWxkRmx1c2giLCJ2YWx1ZSIsIkVsZW1lbnQiLCJuYW1lIiwiX19TZXRBdHRyaWJ1dGUiLCJfX0FkZElubGluZVN0eWxlIiwic3R5bGVzIiwia2V5IiwiYXR0cmlidXRlTmFtZSIsIl9fR2V0QXR0cmlidXRlQnlOYW1lIiwiX19HZXRBdHRyaWJ1dGVOYW1lcyIsInNlbGVjdG9yIiwicmVmIiwiX19RdWVyeVNlbGVjdG9yIiwiX19RdWVyeVNlbGVjdG9yQWxsIiwiZWxlbWVudCIsIm5vcm1hbGl6ZWRPcHRpb25zIiwibWV0aG9kTmFtZSIsInBhcmFtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX19JbnZva2VVSU1ldGhvZCIsInJlcyIsIkVycm9yIiwiSlNPTiIsIl9fRmx1c2hFbGVtZW50VHJlZSIsIk9iamVjdCIsIlBhZ2VFbGVtZW50IiwiX1BhZ2VFbGVtZW50IiwiX19HZXRQYWdlRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjc3NTZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpc1Nka1ZlcnNpb25HdCIsIm1ham9yIiwibWlub3IiLCJfU3lzdGVtSW5mb19seW54U2RrVmVyc2lvbiIsImx5bnhTZGtWZXJzaW9uIiwidmVyc2lvbiIsIk51bWJlciIsImluaXRBcGlFbnYiLCJfbHlueF9jbGVhckludGVydmFsIiwibHlueCIsImdsb2JhbFRoaXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsInJ1blJ1bk9uTWFpblRocmVhZFRhc2siLCJ0YXNrIiwicmVzb2x2ZUlkIiwicmV0dXJuVmFsdWUiLCJydW5Xb3JrbGV0IiwiV29ya2xldEV2ZW50cyIsInByb2ZpbGUiLCJzbGljZU5hbWUiLCJmIiwiY29uc29sZSIsImltcGwiLCJpbml0V29ya2xldFJlZiIsInVwZGF0ZVdvcmtsZXRSZWYiLCJ1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyIsImNsZWFyRmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwIiwiY3JlYXRlV29ya2xldFJlZiIsImlkIiwiZ2V0RnJvbVdvcmtsZXRSZWZNYXAiLCJyZWZJbXBsIiwidW5kZWZpbmVkIiwicmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCIsImhhbmRsZSIsInBhdGNoIiwiaW5pdEV2ZW50TGlzdGVuZXJzIiwianNDb250ZXh0IiwiZXZlbnQiLCJkYXRhIiwiaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5IiwiZGVsYXlSdW5PbkJhY2tncm91bmQiLCJydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucyIsImZuT2JqIiwiX2ZuT2JqIiwiZGVsYXlJbmRpY2VzIiwiZGV0YWlscyIsImluaXRFdmVudERlbGF5IiwiTWFwIiwicnVuRGVsYXllZFdvcmtsZXQiLCJjbGVhckRlbGF5ZWRXb3JrbGV0cyIsImRlbGF5RXhlY1VudGlsSnNSZWFkeSIsImhhc2giLCJtYXAiLCJwYXJhbVZlYyIsIndvcmtsZXQiLCJwYXJhbXNWZWMiLCJsZWZ0UGFyYW1zVmVjIiwiX2ZpcnN0UGFyYW1fY3VycmVudFRhcmdldCIsImZpcnN0UGFyYW0iLCJzZXRUaW1lb3V0IiwiaW5pdEVvbUltcGwiLCJFdmVudFJlc3VsdCIsImlzRXZlbnRPYmplY3QiLCJjdHgiLCJBcnJheSIsIlJ1bldvcmtsZXRTb3VyY2UiLCJhZGRFdmVudE1ldGhvZHNJZk5lZWRlZCIsImV2ZW50Q3R4IiwiZXZlbnRPYmoiLCJfZXZlbnRDdHhfX2V2ZW50UmV0dXJuUmVzdWx0IiwiaHlkcmF0ZUN0eCIsImZpcnN0U2NyZWVuQ3R4IiwiaHlkcmF0ZUN0eEltcGwiLCJleGVjSWQiLCJjdHhPYmoiLCJmaXJzdFNjcmVlbkN0eE9iaiIsImh5ZHJhdGVNYWluVGhyZWFkUmVmIiwiaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MiLCJmaXJzdFNjcmVlblZhbHVlIiwicmVmSWQiLCJseW54V29ya2xldEltcGwiLCJmbk9ianMiLCJmaXJzdFNjcmVlbkZuT2JqcyIsImZuTmFtZSIsImZpcnN0U2NyZWVuRm5PYmoiLCJpbmRleCIsIkpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIiwib2JqVG9SZWYiLCJfdGhpc19leGVjSWRSZWZDb3VudF9nZXQiLCJyYyIsIlNldCIsIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwiaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIiwiaW5pdFdvcmtsZXQiLCJyZWdpc3RlcldvcmtsZXQiLCJfdHlwZSIsInZhbGlkYXRlV29ya2xldCIsInJ1bldvcmtsZXRJbXBsIiwidHJhbnNmb3JtV29ya2xldCIsInBhcmFtc18iLCJoYXNFdmVudE1ldGhvZHMiLCJyZXN1bHQiLCJ3b3JrbGV0Q2FjaGUiLCJXZWFrTWFwIiwiaXNXb3JrbGV0IiwidHJhbnNmb3JtV29ya2xldElubmVyIiwiZGVwdGgiLCJsaW1pdCIsIm9iaiIsInN1Yk9iaiIsImlzV29ya2xldFJlZiIsImlzSnNGbiIsIl9seW54V29ya2xldEltcGxfX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFZTyxNQUFNQTtRQVdKLFNBQWU7WUFFcEIsT0FBT0MsaUJBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTs7Z0JBQTRCLElBQUksQ0FBQyxFQUFFO2FBQUM7UUFDMUY7UUFFTyxRQUFjO1lBRW5CLE9BQU9BLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7O2dCQUEyQixJQUFJLENBQUMsRUFBRTthQUFDO1FBQ3pGO1FBRU8sT0FBYTtZQUVsQixPQUFPQSxpQkFBaUIsSUFBSSxDQUFDLE1B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
544
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9hbmltYXRpb24vYW5pbWF0aW9uLnRzPzMzZmYiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9hbmltYXRpb24vZWZmZWN0LnRzPzFlNTUiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3V0aWxzL3ZlcnNpb24udHM/MzdmNSIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvYXBpL2VsZW1lbnQudHM/ZTE0ZiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvYXBpL2xlcHVzUXVlcnlTZWxlY3Rvci50cz85ZmE0Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9hcGkvbHlueEFwaS50cz8xYjEzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9ydW5Pbk1haW5UaHJlYWQudHM/ZDcxYiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvdXRpbHMvcHJvZmlsZS50cz9jMTZkIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy93b3JrbGV0UmVmLnRzP2ExZmUiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2xpc3RlbmVycy50cz82YzgyIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9kZWxheVJ1bk9uQmFja2dyb3VuZC50cz8yZjZiIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9kZWxheVdvcmtsZXRFdmVudC50cz8xNTRmIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9lb21JbXBsLnRzPzYwZTUiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2V2ZW50UHJvcGFnYXRpb24udHM/Y2MxNyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvaHlkcmF0ZS50cz8yNzk1Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9qc0Z1bmN0aW9uTGlmZWN5Y2xlLnRzPzJjODMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3dvcmtsZXRSdW50aW1lLnRzP2M1Y2YiLCJbcmVsYXRpdmUtcmVzb3VyY2UtcGF0aF0iXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgS2V5ZnJhbWVFZmZlY3QgfSBmcm9tICcuL2VmZmVjdC5qcyc7XG5cbmV4cG9ydCBlbnVtIEFuaW1hdGlvbk9wZXJhdGlvbiB7XG4gIFNUQVJUID0gMCwgLy8gU3RhcnQgYSBuZXcgYW5pbWF0aW9uXG4gIFBMQVkgPSAxLCAvLyBQbGF5L3Jlc3VtZSBhIHBhdXNlZCBhbmltYXRpb25cbiAgUEFVU0UgPSAyLCAvLyBQYXVzZSBhbiBleGlzdGluZyBhbmltYXRpb25cbiAgQ0FOQ0VMID0gMywgLy8gQ2FuY2VsIGFuIGFuaW1hdGlvblxufVxuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uIHtcbiAgc3RhdGljIGNvdW50ID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IGVmZmVjdDogS2V5ZnJhbWVFZmZlY3Q7XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGVmZmVjdDogS2V5ZnJhbWVFZmZlY3QpIHtcbiAgICB0aGlzLmVmZmVjdCA9IGVmZmVjdDtcbiAgICB0aGlzLmlkID0gJ19fbHlueC1pbm5lci1qcy1hbmltYXRpb24tJyArIEFuaW1hdGlvbi5jb3VudCsrO1xuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBtZW1iZXIgJ2VsZW1lbnQnXG4gICAgcmV0dXJuIF9fRWxlbWVudEFuaW1hdGUodGhpcy5lZmZlY3QudGFyZ2V0LmVsZW1lbnQsIFtBbmltYXRpb25PcGVyYXRpb24uQ0FOQ0VMLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwdWJsaWMgcGF1c2UoKTogdm9pZCB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBtZW1iZXIgJ2VsZW1lbnQnXG4gICAgcmV0dXJuIF9fRWxlbWVudEFuaW1hdGUodGhpcy5lZmZlY3QudGFyZ2V0LmVsZW1lbnQsIFtBbmltYXRpb25PcGVyYXRpb24uUEFVU0UsIHRoaXMuaWRdKTtcbiAgfVxuXG4gIHB1YmxpYyBwbGF5KCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLlBMQVksIHRoaXMuaWRdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnQoKTogdm9pZCB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBtZW1iZXIgJ2VsZW1lbnQnXG4gICAgcmV0dXJuIF9fRWxlbWVudEFuaW1hdGUodGhpcy5lZmZlY3QudGFyZ2V0LmVsZW1lbnQsIFtcbiAgICAgIEFuaW1hdGlvbk9wZXJhdGlvbi5TVEFSVCxcbiAgICAgIHRoaXMuaWQsXG4gICAgICB0aGlzLmVmZmVjdC5rZXlmcmFtZXMsXG4gICAgICB0aGlzLmVmZmVjdC5vcHRpb25zLFxuICAgIF0pO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNSBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBFbGVtZW50IH0gZnJvbSAnLi4vZWxlbWVudC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBLZXlmcmFtZUVmZmVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXQ6IEVsZW1lbnQ7XG4gIHB1YmxpYyByZWFkb25seSBrZXlmcmFtZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz5bXTtcbiAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGFyZ2V0OiBFbGVtZW50LFxuICAgIGtleWZyYW1lczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPltdLFxuICAgIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gICkge1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMua2V5ZnJhbWVzID0ga2V5ZnJhbWVzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gaXNTZGtWZXJzaW9uR3QobWFqb3I6IG51bWJlciwgbWlub3I6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBseW54U2RrVmVyc2lvbjogc3RyaW5nID0gU3lzdGVtSW5mby5seW54U2RrVmVyc2lvbiA/PyAnMS4wJztcbiAgY29uc3QgdmVyc2lvbiA9IGx5bnhTZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKHZlcnNpb25bMF0pID4gbWFqb3JcbiAgICB8fCAoTnVtYmVyKHZlcnNpb25bMF0pID09IG1ham9yICYmIE51bWJlcih2ZXJzaW9uWzFdKSA+IG1pbm9yKVxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEFuaW1hdGlvbiB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbi5qcyc7XG5pbXBvcnQgeyBLZXlmcmFtZUVmZmVjdCB9IGZyb20gJy4vYW5pbWF0aW9uL2VmZmVjdC5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG5sZXQgd2lsbEZsdXNoID0gZmFsc2U7XG5sZXQgc2hvdWxkRmx1c2ggPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2hvdWxkRmx1c2godmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgc2hvdWxkRmx1c2ggPSB2YWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHNldCBpbiBjb25zdHJ1Y3RvclxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnROb2RlKSB7XG4gICAgLy8gSW4gTHlueCB2ZXJzaW9ucyBwcmlvciB0byBhbmQgaW5jbHVkaW5nIDIuMTUsXG4gICAgLy8gYSBjcmFzaCBvY2N1cnMgd2hlbiBwcmludGluZyBvciB0cmFuc2ZlcnJpbmcgcmVmQ291bnRlZCBhY3Jvc3MgdGhyZWFkcy5cbiAgICAvLyBCeXBhc3MgdGhpcyBwcm9ibGVtIGJ5IGhpZGluZyB0aGUgZWxlbWVudCBvYmplY3QuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbGVtZW50Jywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBfX1NldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZVByb3BlcnR5KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIF9fQWRkSW5saW5lU3R5bGUodGhpcy5lbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGVQcm9wZXJ0aWVzKHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlcykge1xuICAgICAgX19BZGRJbmxpbmVTdHlsZSh0aGlzLmVsZW1lbnQsIGtleSwgc3R5bGVzW2tleV0hKTtcbiAgICB9XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBfX0dldEF0dHJpYnV0ZUJ5TmFtZSh0aGlzLmVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldEF0dHJpYnV0ZU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gX19HZXRBdHRyaWJ1dGVOYW1lcyh0aGlzLmVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCByZWYgPSBfX1F1ZXJ5U2VsZWN0b3IodGhpcy5lbGVtZW50LCBzZWxlY3Rvciwge30pO1xuICAgIHJldHVybiByZWYgPyBuZXcgRWxlbWVudChyZWYpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50W10ge1xuICAgIHJldHVybiBfX1F1ZXJ5U2VsZWN0b3JBbGwodGhpcy5lbGVtZW50LCBzZWxlY3Rvciwge30pLm1hcCgoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbXB1dGVkU3R5bGVQcm9wZXJ0eShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFpc1Nka1ZlcnNpb25HdCgzLCA0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnZ2V0Q29tcHV0ZWRTdHlsZVByb3BlcnR5IHJlcXVpcmVzIEx5bnggc2RrIHZlcnNpb24gMy41JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q29tcHV0ZWRTdHlsZVByb3BlcnR5OiBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIF9fR2V0Q29tcHV0ZWRTdHlsZUJ5S2V5KHRoaXMuZWxlbWVudCwga2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBhbmltYXRlKFxuICAgIGtleWZyYW1lczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPltdLFxuICAgIG9wdGlvbnM/OiBudW1iZXIgfCBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICApOiBBbmltYXRpb24ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRPcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInID8geyBkdXJhdGlvbjogb3B0aW9ucyB9IDogb3B0aW9ucyA/PyB7fTtcbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihuZXcgS2V5ZnJhbWVFZmZlY3QodGhpcywga2V5ZnJhbWVzLCBub3JtYWxpemVkT3B0aW9ucykpO1xuICB9XG5cbiAgcHVibGljIGludm9rZShcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBfX0ludm9rZVVJTWV0aG9kKFxuICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhcmFtcyA/PyB7fSxcbiAgICAgICAgKHJlczogeyBjb2RlOiBudW1iZXI7IGRhdGE6IHVua25vd24gfSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VJIG1ldGhvZCBpbnZva2U6ICcgKyBKU09OLnN0cmluZ2lmeShyZXMpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaEVsZW1lbnRUcmVlKCkge1xuICAgIGlmICh3aWxsRmx1c2ggfHwgIXNob3VsZEZsdXNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbGxGbHVzaCA9IHRydWU7XG4gICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHdpbGxGbHVzaCA9IGZhbHNlO1xuICAgICAgX19GbHVzaEVsZW1lbnRUcmVlKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50LmpzJztcblxuY2xhc3MgUGFnZUVsZW1lbnQge1xuICBwcml2YXRlIHN0YXRpYyBwYWdlRWxlbWVudDogRWxlbWVudE5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgc3RhdGljIGdldCgpIHtcbiAgICBQYWdlRWxlbWVudC5wYWdlRWxlbWVudCA/Pz0gX19HZXRQYWdlRWxlbWVudCgpO1xuICAgIHJldHVybiBQYWdlRWxlbWVudC5wYWdlRWxlbWVudDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWxlY3Rvcihjc3NTZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBlbGVtZW50ID0gX19RdWVyeVNlbGVjdG9yKFBhZ2VFbGVtZW50LmdldCgpLCBjc3NTZWxlY3Rvciwge30pO1xuICByZXR1cm4gZWxlbWVudCA/IG5ldyBFbGVtZW50KGVsZW1lbnQpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGwoY3NzU2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gIHJldHVybiBfX1F1ZXJ5U2VsZWN0b3JBbGwoUGFnZUVsZW1lbnQuZ2V0KCksIGNzc1NlbGVjdG9yLCB7fSkubWFwKFxuICAgIChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSxcbiAgKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBxdWVyeVNlbGVjdG9yLCBxdWVyeVNlbGVjdG9yQWxsIH0gZnJvbSAnLi9sZXB1c1F1ZXJ5U2VsZWN0b3IuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuLi91dGlscy92ZXJzaW9uLmpzJztcblxuZnVuY3Rpb24gaW5pdEFwaUVudigpOiB2b2lkIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGx5bngucXVlcnlTZWxlY3RvciA9IHF1ZXJ5U2VsZWN0b3I7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBseW54LnF1ZXJ5U2VsZWN0b3JBbGwgPSBxdWVyeVNlbGVjdG9yQWxsO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5zZXRUaW1lb3V0ID0gbHlueC5zZXRUaW1lb3V0IGFzIChjYjogKCkgPT4gdm9pZCwgdGltZW91dDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLnNldEludGVydmFsID0gbHlueC5zZXRJbnRlcnZhbCBhcyAoY2I6ICgpID0+IHZvaWQsIHRpbWVvdXQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jbGVhclRpbWVvdXQgPSBseW54LmNsZWFyVGltZW91dCBhcyAodGltZW91dDogbnVtYmVyKSA9PiB2b2lkO1xuICAvLyBJbiBseW54IDIuMTQgYGNsZWFySW50ZXJ2YWxgIGlzIG1pc3Rha2VubHkgc3BlbGxlZCBhcyBgY2xlYXJUaW1lSW50ZXJ2YWxgLiBUaGlzIGlzIGZpeGVkIGluIGx5bnggMi4xNS5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuY2xlYXJJbnRlcnZhbCA9IChseW54LmNsZWFySW50ZXJ2YWwgPz8gbHlueC5jbGVhclRpbWVJbnRlcnZhbCkgYXMgKHRpbWVvdXQ6IG51bWJlcikgPT4gdm9pZDtcblxuICB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gICAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gbHlueC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYXMgKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiBudW1iZXI7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gICAgbHlueC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxUaGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkLFxuICAgICkgPT4ge1xuICAgICAgaWYgKCFpc1Nka1ZlcnNpb25HdCgyLCAxNSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaW4gbWFpbiB0aHJlYWQgc2NyaXB0IHJlcXVpcmVzIEx5bnggc2RrIHZlcnNpb24gMi4xNicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBseW54LmNhbmNlbEFuaW1hdGlvbkZyYW1lIGFzIChyZXF1ZXN0SWQ6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHsgaW5pdEFwaUVudiB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IFdvcmtsZXRFdmVudHMgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgUnVuV29ya2xldEN0eFJldERhdGEsIFdvcmtsZXQgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blJ1bk9uTWFpblRocmVhZFRhc2sodGFzazogV29ya2xldCwgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10sIHJlc29sdmVJZDogbnVtYmVyKTogdm9pZCB7XG4gIGxldCByZXR1cm5WYWx1ZTtcbiAgdHJ5IHtcbiAgICByZXR1cm5WYWx1ZSA9IHJ1bldvcmtsZXQodGFzaywgcGFyYW1zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBUT0RPOiBTaG91bGQgYmUgbW9yZSBwcm9wZXIgdG8gcmVqZWN0IHRoZSBwcm9taXNlIGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgIGx5bnguZ2V0SlNDb250ZXh0KCkuZGlzcGF0Y2hFdmVudCh7XG4gICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLkZ1bmN0aW9uQ2FsbFJldCxcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmVzb2x2ZUlkLFxuICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgIH0gYXMgUnVuV29ya2xldEN0eFJldERhdGEpLFxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuZXhwb3J0IGZ1bmN0aW9uIHByb2ZpbGU8UmV0LCBGbiBleHRlbmRzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJldD4oXG4gIHNsaWNlTmFtZTogc3RyaW5nLFxuICBmOiBGbixcbik6IFJldCB7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDkgKi9cbiAgLy8gVE9ETzogY2hhbmdlIGl0IHRvIF9fUFJPRklMRV9fXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgY29uc29sZS5wcm9maWxlKHNsaWNlTmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnNvbGUucHJvZmlsZUVuZCgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZigpO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrbGV0UmVmLCBXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcblxuaW50ZXJmYWNlIFJlZkltcGwge1xuICBfd29ya2xldFJlZk1hcDogUmVjb3JkPFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZjx1bmtub3duPj47XG4gIF9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXA6IFJlY29yZDxXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWY8dW5rbm93bj4+O1xuICB1cGRhdGVXb3JrbGV0UmVmKFxuICAgIHJlZkltcGw6IFdvcmtsZXRSZWZJbXBsPEVsZW1lbnQgfCBudWxsPixcbiAgICBlbGVtZW50OiBFbGVtZW50Tm9kZSB8IG51bGwsXG4gICk6IHZvaWQ7XG4gIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzKHBhdGNoOiBbbnVtYmVyLCB1bmtub3duXVtdKTogdm9pZDtcbiAgY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAoKTogdm9pZDtcbn1cblxubGV0IGltcGw6IFJlZkltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRXb3JrbGV0UmVmKCk6IFJlZkltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgX3dvcmtsZXRSZWZNYXA6IHt9LFxuICAgIC8qKlxuICAgICAqIE1hcCBvZiB3b3JrbGV0IHJlZnMgdGhhdCBhcmUgY3JlYXRlZCBkdXJpbmcgZmlyc3Qgc2NyZWVuIHJlbmRlcmluZy5cbiAgICAgKiBUaGVzZSByZWZzIGFyZSBjcmVhdGVkIHdpdGggbmVnYXRpdmUgSURzIGFuZCBuZWVkIHRvIGJlIGh5ZHJhdGVkXG4gICAgICogd2hlbiB0aGUgYXBwIHN0YXJ0cy4gVGhlIG1hcCBpcyBjbGVhcmVkIGFmdGVyIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZVxuICAgICAqIHRvIGZyZWUgdXAgbWVtb3J5LlxuICAgICAqL1xuICAgIF9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXA6IHt9LFxuICAgIHVwZGF0ZVdvcmtsZXRSZWYsXG4gICAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMsXG4gICAgY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAsXG4gIH0pO1xufVxuXG5jb25zdCBjcmVhdGVXb3JrbGV0UmVmID0gPFQ+KFxuICBpZDogV29ya2xldFJlZklkLFxuICB2YWx1ZTogVCxcbik6IFdvcmtsZXRSZWY8VD4gPT4ge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IHZhbHVlLFxuICAgIF93dmlkOiBpZCxcbiAgfTtcbn07XG5cbmNvbnN0IGdldEZyb21Xb3JrbGV0UmVmTWFwID0gPFQ+KFxuICByZWZJbXBsOiBXb3JrbGV0UmVmSW1wbDxUPixcbik6IFdvcmtsZXRSZWY8VD4gPT4ge1xuICBjb25zdCBpZCA9IHJlZkltcGwuX3d2aWQ7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKGlkIDwgMCkge1xuICAgIC8vIEF0IHRoZSBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLCB0aGUgd29ya2xldCByZWYgaXMgY3JlYXRlZCB3aXRoIGEgbmVnYXRpdmUgSUQuXG4gICAgLy8gTWlnaHQgYmUgY2FsbGVkIGluIHR3byBzY2VuYXJpb3M6XG4gICAgLy8gMS4gSW4gTVRTIGV2ZW50c1xuICAgIC8vIDIuIEluIGBtYWluLXRocmVhZDpyZWZgXG4gICAgdmFsdWUgPSBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHZhbHVlID0gaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCByZWZJbXBsLl9pbml0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICB9XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrbGV0OiByZWYgaXMgbm90IGluaXRpYWxpemVkOiAnICsgaWQpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmZ1bmN0aW9uIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAoaWQ6IFdvcmtsZXRSZWZJZCk6IHZvaWQge1xuICBkZWxldGUgaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlIG9mIHRoZSBnaXZlbiBlbGVtZW50IG5vZGUsIHRoZW4gc2V0IHRoZSB3b3JrbGV0IHZhbHVlIHRvIGl0LlxuICogVGhpcyBpcyBjYWxsZWQgaW4gYHNuYXBzaG90Q29udGV4dFVwZGF0ZVdvcmtsZXRSZWZgLlxuICogQHBhcmFtIGhhbmRsZSBoYW5kbGUgb2YgdGhlIHdvcmtsZXQgdmFsdWUuXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudCBub2RlLlxuICovXG5mdW5jdGlvbiB1cGRhdGVXb3JrbGV0UmVmKFxuICBoYW5kbGU6IFdvcmtsZXRSZWZJbXBsPEVsZW1lbnQgfCBudWxsPixcbiAgZWxlbWVudDogRWxlbWVudE5vZGUgfCBudWxsLFxuKTogdm9pZCB7XG4gIGdldEZyb21Xb3JrbGV0UmVmTWFwKGhhbmRsZSkuY3VycmVudCA9IGVsZW1lbnRcbiAgICA/IG5ldyBFbGVtZW50KGVsZW1lbnQpXG4gICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyhcbiAgcGF0Y2g6IFtXb3JrbGV0UmVmSWQsIHVua25vd25dW10sXG4pOiB2b2lkIHtcbiAgcHJvZmlsZSgndXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMnLCAoKSA9PiB7XG4gICAgcGF0Y2guZm9yRWFjaCgoW2lkLCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICghaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdKSB7XG4gICAgICAgIGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSA9IGNyZWF0ZVdvcmtsZXRSZWYoaWQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyRmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwKCk6IHZvaWQge1xuICBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwID0ge307XG59XG5cbmV4cG9ydCB7XG4gIHR5cGUgUmVmSW1wbCxcbiAgY3JlYXRlV29ya2xldFJlZixcbiAgaW5pdFdvcmtsZXRSZWYsXG4gIGdldEZyb21Xb3JrbGV0UmVmTWFwLFxuICByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwLFxuICB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyxcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVsZWFzZVdvcmtsZXRSZWZEYXRhLCBSdW5Xb3JrbGV0Q3R4RGF0YSB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgcnVuUnVuT25NYWluVGhyZWFkVGFzayB9IGZyb20gJy4vcnVuT25NYWluVGhyZWFkLmpzJztcbmltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICcuL3R5cGVzL3J1bnRpbWVQcm94eS5qcyc7XG5pbXBvcnQgeyByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwIH0gZnJvbSAnLi93b3JrbGV0UmVmLmpzJztcblxuZnVuY3Rpb24gaW5pdEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICBjb25zdCBqc0NvbnRleHQgPSBseW54LmdldEpTQ29udGV4dCgpO1xuICBqc0NvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBXb3JrbGV0RXZlbnRzLnJ1bldvcmtsZXRDdHgsXG4gICAgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpIGFzIFJ1bldvcmtsZXRDdHhEYXRhO1xuICAgICAgcnVuUnVuT25NYWluVGhyZWFkVGFzayhkYXRhLndvcmtsZXQsIGRhdGEucGFyYW1zIGFzIENsb3N1cmVWYWx1ZVR5cGVbXSwgZGF0YS5yZXNvbHZlSWQpO1xuICAgIH0sXG4gICk7XG4gIGpzQ29udGV4dC5hZGRFdmVudExpc3RlbmVyKFxuICAgIFdvcmtsZXRFdmVudHMucmVsZWFzZVdvcmtsZXRSZWYsXG4gICAgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCgoZXZlbnQuZGF0YSBhcyBSZWxlYXNlV29ya2xldFJlZkRhdGEpLmlkKTtcbiAgICB9LFxuICApO1xufVxuXG5leHBvcnQgeyBpbml0RXZlbnRMaXN0ZW5lcnMgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IEpzRm5IYW5kbGUgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcblxuaW50ZXJmYWNlIERldGFpbHMge1xuICB0YXNrOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZDtcblxuICAvLyBUaGlzIGNvbWVzIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkLCBpbnNlcnRlZCBoZXJlIGR1cmluZyBjdHggaHlkcmF0aW9uLlxuICBqc0ZuSGFuZGxlPzogSnNGbkhhbmRsZTtcbn1cblxuaW50ZXJmYWNlIFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCB7XG4gIC8vIEVsZW1lbnRzIHNob3VsZCBrZWVwIHRoZSBvcmRlciBiZWluZyBjYWxsZWQgYnkgdGhlIHVzZXIuXG4gIGRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheTogRGV0YWlsc1tdO1xuICBkZWxheVJ1bk9uQmFja2dyb3VuZChmbk9iajogSnNGbkhhbmRsZSwgZm46IChmbklkOiBudW1iZXIsIGV4ZWNJZDogbnVtYmVyKSA9PiB2b2lkKTogdm9pZDtcbiAgcnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMoKTogdm9pZDtcbn1cblxubGV0IGltcGw6IFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5KCk6IFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCB7XG4gIHJldHVybiAoaW1wbCA9IHtcbiAgICBkZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXk6IFtdLFxuICAgIGRlbGF5UnVuT25CYWNrZ3JvdW5kLFxuICAgIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVsYXlSdW5PbkJhY2tncm91bmQoZm5PYmo6IEpzRm5IYW5kbGUsIHRhc2s6IChmbklkOiBudW1iZXIsIGV4ZWNJZDogbnVtYmVyKSA9PiB2b2lkKSB7XG4gIGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheS5wdXNoKHsgdGFzayB9KTtcbiAgY29uc3QgZGVsYXlJbmRpY2VzID0gZm5PYmouX2RlbGF5SW5kaWNlcyA/Pz0gW107XG4gIGRlbGF5SW5kaWNlcy5wdXNoKGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheS5sZW5ndGggLSAxKTtcbn1cblxuZnVuY3Rpb24gcnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgZGV0YWlscyBvZiBpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkpIHtcbiAgICBpZiAoZGV0YWlscy5qc0ZuSGFuZGxlKSB7XG4gICAgICBkZXRhaWxzLnRhc2soZGV0YWlscy5qc0ZuSGFuZGxlLl9qc0ZuSWQhLCBkZXRhaWxzLmpzRm5IYW5kbGUuX2V4ZWNJZCEpO1xuICAgIH1cbiAgfVxuICBpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZXhwb3J0IHsgdHlwZSBSdW5PbkJhY2tncm91bmREZWxheUltcGwsIGluaXRSdW5PbkJhY2tncm91bmREZWxheSB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgV29ya2xldCB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5cbmludGVyZmFjZSBFdmVudERlbGF5SW1wbCB7XG4gIF9kZWxheWVkV29ya2xldFBhcmFtc01hcDogTWFwPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZVtdW10+O1xuICBydW5EZWxheWVkV29ya2xldCh3b3JrbGV0OiBXb3JrbGV0LCBlbGVtZW50OiBFbGVtZW50Tm9kZSk6IHZvaWQ7XG4gIGNsZWFyRGVsYXllZFdvcmtsZXRzKCk6IHZvaWQ7XG59XG5cbmxldCBpbXBsOiBFdmVudERlbGF5SW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdEV2ZW50RGVsYXkoKTogRXZlbnREZWxheUltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwOiBuZXcgTWFwKCksXG4gICAgcnVuRGVsYXllZFdvcmtsZXQsXG4gICAgY2xlYXJEZWxheWVkV29ya2xldHMsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWxheUV4ZWNVbnRpbEpzUmVhZHkoXG4gIGhhc2g6IHN0cmluZyxcbiAgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10sXG4pOiB2b2lkIHtcbiAgcHJvZmlsZSgnZGVsYXlFeGVjVW50aWxKc1JlYWR5OiAnICsgaGFzaCwgKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcDtcbiAgICBjb25zdCBwYXJhbVZlYyA9IG1hcC5nZXQoaGFzaCk7XG4gICAgaWYgKHBhcmFtVmVjKSB7XG4gICAgICBwYXJhbVZlYy5wdXNoKHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcC5zZXQoaGFzaCwgW3BhcmFtc10pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRlbGF5ZWRXb3JrbGV0KHdvcmtsZXQ6IFdvcmtsZXQsIGVsZW1lbnQ6IEVsZW1lbnROb2RlKTogdm9pZCB7XG4gIHByb2ZpbGUoJ2NvbW1pdERlbGF5ZWRXb3JrbGV0JywgKCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtc1ZlYyA9IGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5nZXQoXG4gICAgICB3b3JrbGV0Ll93a2x0SWQsXG4gICAgKTtcbiAgICBpZiAocGFyYW1zVmVjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGVmdFBhcmFtc1ZlYzogQ2xvc3VyZVZhbHVlVHlwZVtdW10gPSBbXTtcbiAgICBwYXJhbXNWZWMuZm9yRWFjaCgocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdFBhcmFtID0gcGFyYW1zWzBdIGFzIHsgY3VycmVudFRhcmdldD86IHsgZWxlbWVudFJlZnB0cj86IEVsZW1lbnROb2RlIH0gfSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChmaXJzdFBhcmFtPy5jdXJyZW50VGFyZ2V0Py5lbGVtZW50UmVmcHRyID09PSBlbGVtZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHByb2ZpbGUoJ3J1bkRlbGF5ZWRXb3JrbGV0JywgKCkgPT4ge1xuICAgICAgICAgICAgcnVuV29ya2xldCh3b3JrbGV0LCBwYXJhbXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnRQYXJhbXNWZWMucHVzaChwYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5zZXQoXG4gICAgICB3b3JrbGV0Ll93a2x0SWQsXG4gICAgICBsZWZ0UGFyYW1zVmVjLFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckRlbGF5ZWRXb3JrbGV0cygpOiB2b2lkIHtcbiAgaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwLmNsZWFyKCk7XG59XG5cbmV4cG9ydCB7IHR5cGUgRXZlbnREZWxheUltcGwsIGluaXRFdmVudERlbGF5LCBkZWxheUV4ZWNVbnRpbEpzUmVhZHksIHJ1bkRlbGF5ZWRXb3JrbGV0LCBjbGVhckRlbGF5ZWRXb3JrbGV0cyB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IHNldFNob3VsZEZsdXNoIH0gZnJvbSAnLi9hcGkvZWxlbWVudC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW9tSW1wbCB7XG4gIHNldFNob3VsZEZsdXNoKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRFb21JbXBsKCk6IEVvbUltcGwge1xuICByZXR1cm4ge1xuICAgIHNldFNob3VsZEZsdXNoLFxuICB9O1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cblxuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBFdmVudEN0eCwgUnVuV29ya2xldE9wdGlvbnMgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IFJ1bldvcmtsZXRTb3VyY2UgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcblxuLy8gRXZlbnRSZXN1bHQgZW51bSB2YWx1ZXNcbmV4cG9ydCBjb25zdCBFdmVudFJlc3VsdCA9IHtcbiAga0RlZmF1bHQ6IDB4MCxcbiAga1N0b3BQcm9wYWdhdGlvbk1hc2s6IDB4MSxcbiAga1N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbk1hc2s6IDB4Mixcbn0gYXMgY29uc3Q7XG5cbnR5cGUgRXZlbnRMaWtlID0gUmVjb3JkPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V2ZW50T2JqZWN0KFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGVbXSxcbiAgb3B0aW9ucz86IFJ1bldvcmtsZXRPcHRpb25zLFxuKTogY3R4IGlzIFtFdmVudExpa2UsIC4uLkNsb3N1cmVWYWx1ZVR5cGVbXV0ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY3R4KSB8fCB0eXBlb2YgY3R4WzBdICE9PSAnb2JqZWN0JyB8fCBjdHhbMF0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zb3VyY2UgPT09IFJ1bldvcmtsZXRTb3VyY2UuRVZFTlQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGV2ZW50IG1ldGhvZHMgdG8gYW4gZXZlbnQgb2JqZWN0IGlmIG5lZWRlZFxuICogQHBhcmFtIGN0eCBUaGUgZXZlbnQgb2JqZWN0IHRvIGVuaGFuY2VcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBydW4gd29ya2xldCBvcHRpb25zXG4gKiBAcmV0dXJucyBBIHR1cGxlIG9mIGJvb2xlYW4gYW5kIHRoZSBldmVudCByZXR1cm4gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudE1ldGhvZHNJZk5lZWRlZChjdHg6IENsb3N1cmVWYWx1ZVR5cGVbXSwgb3B0aW9ucz86IFJ1bldvcmtsZXRPcHRpb25zKTogW2Jvb2xlYW4sIEV2ZW50Q3R4XSB7XG4gIGlmICghaXNFdmVudE9iamVjdChjdHgsIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIFtmYWxzZSwge31dO1xuICB9XG4gIGNvbnN0IGV2ZW50Q3R4OiBFdmVudEN0eCA9IHt9O1xuICBjb25zdCBldmVudE9iaiA9IGN0eFswXTtcblxuICAvLyBBZGQgc3RvcFByb3BhZ2F0aW9uIG1ldGhvZFxuICBldmVudE9ialsnc3RvcFByb3BhZ2F0aW9uJ10gPSBmdW5jdGlvbigpIHtcbiAgICBldmVudEN0eC5fZXZlbnRSZXR1cm5SZXN1bHQgPSAoZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID8/IEV2ZW50UmVzdWx0LmtEZWZhdWx0KVxuICAgICAgfCBFdmVudFJlc3VsdC5rU3RvcFByb3BhZ2F0aW9uTWFzaztcbiAgfTtcblxuICAvLyBBZGQgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIG1ldGhvZFxuICBldmVudE9ialsnc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJ10gPSBmdW5jdGlvbigpIHtcbiAgICBldmVudEN0eC5fZXZlbnRSZXR1cm5SZXN1bHQgPSAoZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID8/IEV2ZW50UmVzdWx0LmtEZWZhdWx0KVxuICAgICAgfCBFdmVudFJlc3VsdC5rU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uTWFzaztcbiAgfTtcblxuICByZXR1cm4gW3RydWUsIGV2ZW50Q3R4XTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5cbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgSnNGbkhhbmRsZSwgV29ya2xldCwgV29ya2xldFJlZklkLCBXb3JrbGV0UmVmSW1wbCB9IGZyb20gJy4vYmluZGluZ3MvaW5kZXguanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5cbi8qKlxuICogSHlkcmF0ZXMgYSBXb3JrbGV0IGNvbnRleHQgd2l0aCBkYXRhIGZyb20gYSBmaXJzdC1zY3JlZW4gV29ya2xldCBjb250ZXh0LlxuICogVGhpcyBwcm9jZXNzIGlzIHR5cGljYWxseSB1c2VkIHRvIHJ1biBhbGwgZGVsYXllZCBgcnVuT25CYWNrZ3JvdW5kYCBmdW5jdGlvbnNcbiAqIGFuZCBpbml0aWFsaXplIGBXb3JrbGV0UmVmYCB2YWx1ZXMgbW9kaWZpZWQgYmVmb3JlIGh5ZHJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY3R4IFRoZSB0YXJnZXQgV29ya2xldCBjb250ZXh0IHRvIGJlIGh5ZHJhdGVkLlxuICogQHBhcmFtIGZpcnN0U2NyZWVuQ3R4IFRoZSBXb3JrbGV0IGNvbnRleHQgZnJvbSB0aGUgZmlyc3Qgc2NyZWVuIHJlbmRlcmluZyxcbiAqICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSBkYXRhIHRvIGh5ZHJhdGUgd2l0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVDdHgoY3R4OiBXb3JrbGV0LCBmaXJzdFNjcmVlbkN0eDogV29ya2xldCk6IHZvaWQge1xuICBwcm9maWxlKCdoeWRyYXRlQ3R4JywgKCkgPT4ge1xuICAgIGh5ZHJhdGVDdHhJbXBsKGN0eCwgZmlyc3RTY3JlZW5DdHgsIGN0eC5fZXhlY0lkISk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoeWRyYXRlQ3R4SW1wbChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlLFxuICBmaXJzdFNjcmVlbkN0eDogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZXhlY0lkOiBudW1iZXIsXG4pOiB2b2lkIHtcbiAgaWYgKFxuICAgICFjdHggfHwgdHlwZW9mIGN0eCAhPT0gJ29iamVjdCcgfHwgIWZpcnN0U2NyZWVuQ3R4XG4gICAgfHwgdHlwZW9mIGZpcnN0U2NyZWVuQ3R4ICE9PSAnb2JqZWN0J1xuICApIHJldHVybjtcblxuICBjb25zdCBjdHhPYmogPSBjdHggYXMgUmVjb3JkPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZT47XG4gIGNvbnN0IGZpcnN0U2NyZWVuQ3R4T2JqID0gZmlyc3RTY3JlZW5DdHggYXMgUmVjb3JkPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZT47XG5cbiAgaWYgKGN0eE9ialsnX3drbHRJZCddICYmIGN0eE9ialsnX3drbHRJZCddICE9PSBmaXJzdFNjcmVlbkN0eE9ialsnX3drbHRJZCddKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mb3ItaW4tYXJyYXlcbiAgZm9yIChjb25zdCBrZXkgaW4gY3R4KSB7XG4gICAgaWYgKGtleSA9PT0gJ193dmlkJykge1xuICAgICAgaHlkcmF0ZU1haW5UaHJlYWRSZWYoXG4gICAgICAgIGN0eE9ialtrZXldIGFzIFdvcmtsZXRSZWZJZCxcbiAgICAgICAgZmlyc3RTY3JlZW5DdHhPYmogYXMgdW5rbm93biBhcyBXb3JrbGV0UmVmSW1wbDx1bmtub3duPixcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdfanNGbicpIHtcbiAgICAgIGh5ZHJhdGVEZWxheVJ1bk9uQmFja2dyb3VuZFRhc2tzKFxuICAgICAgICBjdHhPYmpba2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPixcbiAgICAgICAgZmlyc3RTY3JlZW5DdHhPYmpba2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPixcbiAgICAgICAgZXhlY0lkLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RTY3JlZW5WYWx1ZSA9IHR5cGVvZiBmaXJzdFNjcmVlbkN0eE9ialtrZXldID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gKGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gYXMgeyBjdHg6IENsb3N1cmVWYWx1ZVR5cGUgfSkuY3R4XG4gICAgICAgIDogZmlyc3RTY3JlZW5DdHhPYmpba2V5XTtcbiAgICAgIGh5ZHJhdGVDdHhJbXBsKGN0eE9ialtrZXldLCBmaXJzdFNjcmVlblZhbHVlLCBleGVjSWQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEh5ZHJhdGVzIGEgV29ya2xldFJlZiBvbiB0aGUgbWFpbiB0aHJlYWQuXG4gKiBUaGlzIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBXb3JrbGV0UmVmJ3MgYmFja2dyb3VuZCBpbml0aWFsIHZhbHVlIGJhc2VkIG9uIGNoYW5nZXNcbiAqIHRoYXQgb2NjdXJyZWQgaW4gdGhlIGZpcnN0LXNjcmVlbiBXb3JrbGV0IGNvbnRleHQgYmVmb3JlIGh5ZHJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmVmSWQgVGhlIElEIG9mIHRoZSBXb3JrbGV0UmVmIHRvIGh5ZHJhdGUuXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIFdvcmtsZXRSZWYuXG4gKi9cbmZ1bmN0aW9uIGh5ZHJhdGVNYWluVGhyZWFkUmVmKFxuICByZWZJZDogV29ya2xldFJlZklkLFxuICB2YWx1ZTogV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4pIHtcbiAgaWYgKCdfaW5pdFZhbHVlJyBpbiB2YWx1ZSkge1xuICAgIC8vIFRoZSByZWYgaGFzIG5vdCBiZWVuIGFjY2Vzc2VkIHlldC5cbiAgICByZXR1cm47XG4gIH1cbiAgbHlueFdvcmtsZXRJbXBsIS5fcmVmSW1wbC5fd29ya2xldFJlZk1hcFtyZWZJZF0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBIeWRyYXRlcyBkZWxheWVkIGBydW5PbkJhY2tncm91bmRgIHRhc2tzLlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYW55IGBydW5PbkJhY2tncm91bmRgIGNhbGxzIHRoYXQgd2VyZSBkZWxheWVkXG4gKiBkdXJpbmcgdGhlIGZpcnN0LXNjcmVlbiByZW5kZXJpbmcgYXJlIGNvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlaXJcbiAqIHJlc3BlY3RpdmUgSmF2YVNjcmlwdCBmdW5jdGlvbiBoYW5kbGVzIGluIHRoZSBoeWRyYXRlZCBXb3JrbGV0IGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGh5ZHJhdGVEZWxheVJ1bk9uQmFja2dyb3VuZFRhc2tzKFxuICBmbk9ianM6IFJlY29yZDxzdHJpbmcsIEpzRm5IYW5kbGU+LCAvLyBleGFtcGxlOiB7XCJfanNGbjFcIjp7XCJfanNGbklkXCI6MX19XG4gIGZpcnN0U2NyZWVuRm5PYmpzOiBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPiwgLy8gZXhhbXBsZToge1wiX2pzRm4xXCI6e1wiX2lzRmlyc3RTY3JlZW5cIjp0cnVlLFwiX2RlbGF5SW5kaWNlc1wiOlswXX19XG4gIGV4ZWNJZDogbnVtYmVyLFxuKSB7XG4gIGZvciAoY29uc3QgZm5OYW1lIGluIGZuT2Jqcykge1xuICAgIGNvbnN0IGZuT2JqID0gZm5PYmpzW2ZuTmFtZV0hO1xuICAgIGNvbnN0IGZpcnN0U2NyZWVuRm5PYmo6IEpzRm5IYW5kbGUgfCB1bmRlZmluZWQgPSBmaXJzdFNjcmVlbkZuT2Jqc1tmbk5hbWVdO1xuICAgIGlmICghZmlyc3RTY3JlZW5Gbk9iaj8uX2RlbGF5SW5kaWNlcykge1xuICAgICAgaWYgKGZpcnN0U2NyZWVuRm5PYmopIHtcbiAgICAgICAgZmlyc3RTY3JlZW5Gbk9iai5faXNGaXJzdFNjcmVlbiA9IGZhbHNlO1xuICAgICAgICBmaXJzdFNjcmVlbkZuT2JqLl9leGVjSWQgPSBleGVjSWQ7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlyc3RTY3JlZW5Gbk9iaiwgZm5PYmopO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgZmlyc3RTY3JlZW5Gbk9iai5fZGVsYXlJbmRpY2VzKSB7XG4gICAgICBjb25zdCBkZXRhaWxzID0gbHlueFdvcmtsZXRJbXBsIS5fcnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsXG4gICAgICAgIC5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXlbaW5kZXhdITtcbiAgICAgIGZuT2JqLl9leGVjSWQgPSBleGVjSWQ7XG4gICAgICBkZXRhaWxzLmpzRm5IYW5kbGUgPSBmbk9iajtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBXb3JrbGV0RXZlbnRzIH0gZnJvbSAnLi9iaW5kaW5ncy9ldmVudHMuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4vdXRpbHMvdmVyc2lvbi5qcyc7XG5cbi8qKlxuICogYEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyYCBtb25pdG9ycyByZWZlcmVuY2VzIHRvIEpTIGZ1bmN0aW9uIGhhbmRsZXMgdG8gYmUgY2FsbGVkIGJ5IGBydW5PbkJhY2tncm91bmQoKWAuXG4gKiBJbiBKUyBjb250ZXh0LCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGJ5IGBydW5PbkJhY2tncm91bmQoKWAgaXMgcmVmZXJlbmNlZCBieSBgSnNGbkhhbmRsZWBzIGFuZCBmaW5hbGx5IGJ5IGBleGVjSWRgLlxuICogV2hlbiBhbGwgYEpzRm5IYW5kbGVgcyBpbiBsZXB1cyBhcmUgcmVsZWFzZWQsIGFuIGV2ZW50IHdpbGwgYmUgc2VudCB0byBKUyBjb250ZXh0IHRvIGRlLXJlZiB0aGUgYGV4ZWNJZGAsXG4gKiByZXN1bHRpbmcgYSBkZS1yZWYgdG8gdGhlIGpzIGZ1bmN0aW9uIGluIEpTIGNvbnRleHQuXG4gKi9cbmNsYXNzIEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBleGVjSWRSZWZDb3VudCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgZXhlY0lkU2V0VG9GaXJlID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIHByaXZhdGUgd2lsbEZpcmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWdpc3RyeT86IEZpbmFsaXphdGlvblJlZ2lzdHJ5PG51bWJlcj4gPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeTxudW1iZXI+KHRoaXMucmVtb3ZlUmVmLmJpbmQodGhpcykpO1xuICB9XG5cbiAgYWRkUmVmKGV4ZWNJZDogbnVtYmVyLCBvYmpUb1JlZjogb2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5zZXQoXG4gICAgICBleGVjSWQsXG4gICAgICAodGhpcy5leGVjSWRSZWZDb3VudC5nZXQoZXhlY0lkKSA/PyAwKSArIDEsXG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdHJ5IS5yZWdpc3RlcihvYmpUb1JlZiwgZXhlY0lkKTtcbiAgfVxuXG4gIHJlbW92ZVJlZihleGVjSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJjID0gdGhpcy5leGVjSWRSZWZDb3VudC5nZXQoZXhlY0lkKSE7XG4gICAgaWYgKHJjID4gMSkge1xuICAgICAgdGhpcy5leGVjSWRSZWZDb3VudC5zZXQoZXhlY0lkLCByYyAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV4ZWNJZFJlZkNvdW50LmRlbGV0ZShleGVjSWQpO1xuICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmFkZChleGVjSWQpO1xuICAgIGlmICghdGhpcy53aWxsRmlyZSkge1xuICAgICAgdGhpcy53aWxsRmlyZSA9IHRydWU7XG4gICAgICB2b2lkIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZpcmUoKTogdm9pZCB7XG4gICAgcHJvZmlsZSgnSnNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIuZmlyZScsICgpID0+IHtcbiAgICAgIGx5bnguZ2V0SlNDb250ZXh0KCkuZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHR5cGU6IFdvcmtsZXRFdmVudHMucmVsZWFzZUJhY2tncm91bmRXb3JrbGV0Q3R4LFxuICAgICAgICBkYXRhOiBBcnJheS5mcm9tKHRoaXMuZXhlY0lkU2V0VG9GaXJlKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGVjSWRTZXRUb0ZpcmUuY2xlYXIoKTtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1Nka1ZlcnNpb25HdCgyLCAxNSk7XG59XG5cbmV4cG9ydCB7IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLCBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnLi9hcGkvZWxlbWVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIFJ1bldvcmtsZXRPcHRpb25zLCBXb3JrbGV0LCBXb3JrbGV0UmVmSW1wbCB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5IH0gZnJvbSAnLi9kZWxheVJ1bk9uQmFja2dyb3VuZC5qcyc7XG5pbXBvcnQgeyBkZWxheUV4ZWNVbnRpbEpzUmVhZHksIGluaXRFdmVudERlbGF5IH0gZnJvbSAnLi9kZWxheVdvcmtsZXRFdmVudC5qcyc7XG5pbXBvcnQgeyBpbml0RW9tSW1wbCB9IGZyb20gJy4vZW9tSW1wbC5qcyc7XG5pbXBvcnQgeyBhZGRFdmVudE1ldGhvZHNJZk5lZWRlZCB9IGZyb20gJy4vZXZlbnRQcm9wYWdhdGlvbi5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlQ3R4IH0gZnJvbSAnLi9oeWRyYXRlLmpzJztcbmltcG9ydCB7IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLCBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQgfSBmcm9tICcuL2pzRnVuY3Rpb25MaWZlY3ljbGUuanMnO1xuaW1wb3J0IHsgcnVuUnVuT25NYWluVGhyZWFkVGFzayB9IGZyb20gJy4vcnVuT25NYWluVGhyZWFkLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgZ2V0RnJvbVdvcmtsZXRSZWZNYXAsIGluaXRXb3JrbGV0UmVmIH0gZnJvbSAnLi93b3JrbGV0UmVmLmpzJztcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXQoKTogdm9pZCB7XG4gIGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID0ge1xuICAgIF93b3JrbGV0TWFwOiB7fSxcbiAgICBfcmVmSW1wbDogaW5pdFdvcmtsZXRSZWYoKSxcbiAgICBfcnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsOiBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkoKSxcbiAgICBfaHlkcmF0ZUN0eDogaHlkcmF0ZUN0eCxcbiAgICBfZXZlbnREZWxheUltcGw6IGluaXRFdmVudERlbGF5KCksXG4gICAgX2VvbUltcGw6IGluaXRFb21JbXBsKCksXG4gICAgX3J1blJ1bk9uTWFpblRocmVhZFRhc2s6IHJ1blJ1bk9uTWFpblRocmVhZFRhc2ssXG4gIH07XG5cbiAgaWYgKGlzUnVuT25CYWNrZ3JvdW5kRW5hYmxlZCgpKSB7XG4gICAgZ2xvYmFsVGhpcy5seW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyID0gbmV3IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyKCk7XG4gIH1cblxuICBnbG9iYWxUaGlzLnJlZ2lzdGVyV29ya2xldCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5yZWdpc3RlcldvcmtsZXRJbnRlcm5hbCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5ydW5Xb3JrbGV0ID0gcnVuV29ya2xldDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHdvcmtsZXQgZnVuY3Rpb24sIGFsbG93aW5nIGl0IHRvIGJlIGV4ZWN1dGVkIGJ5IGBydW5Xb3JrbGV0KClgLlxuICogVGhpcyBpcyBjYWxsZWQgaW4gbGVwdXMuanMuXG4gKiBAcGFyYW0gX3R5cGUgd29ya2xldCB0eXBlLCAnbWFpbi10aHJlYWQnIG9yICd1aSdcbiAqIEBwYXJhbSBpZCB3b3JrbGV0IGhhc2hcbiAqIEBwYXJhbSB3b3JrbGV0IHdvcmtsZXQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrbGV0KF90eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHdvcmtsZXQ6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pOiB2b2lkIHtcbiAgbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwW2lkXSA9IHdvcmtsZXQ7XG59XG5cbi8qKlxuICogRW50cmFuY2Ugb2YgYWxsIHdvcmtsZXQgY2FsbHMuXG4gKiBOYXRpdmUgZXZlbnQgdG91Y2ggaGFuZGxlciB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBjdHggd29ya2xldCBvYmplY3QuXG4gKiBAcGFyYW0gcGFyYW1zIHdvcmtsZXQgcGFyYW1zLlxuICogQHBhcmFtIG9wdGlvbnMgcnVuIHdvcmtsZXQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gcnVuV29ya2xldChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiB1bmtub3duIHtcbiAgaWYgKCF2YWxpZGF0ZVdvcmtsZXQoY3R4KSkge1xuICAgIGNvbnNvbGUud2FybignV29ya2xldDogSW52YWxpZCB3b3JrbGV0IG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KGN0eCkpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoJ19sZXB1c1dvcmtsZXRIYXNoJyBpbiBjdHgpIHtcbiAgICBkZWxheUV4ZWNVbnRpbEpzUmVhZHkoY3R4Ll9sZXB1c1dvcmtsZXRIYXNoLCBwYXJhbXMpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gcnVuV29ya2xldEltcGwoY3R4LCBwYXJhbXMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBydW5Xb3JrbGV0SW1wbChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiB1bmtub3duIHtcbiAgY29uc3Qgd29ya2xldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IHByb2ZpbGUoXG4gICAgJ3RyYW5zZm9ybVdvcmtsZXRDdHggJyArIGN0eC5fd2tsdElkLFxuICAgICgpID0+IHRyYW5zZm9ybVdvcmtsZXQoY3R4LCB0cnVlKSxcbiAgKTtcbiAgY29uc3QgcGFyYW1zXzogQ2xvc3VyZVZhbHVlVHlwZVtdID0gcHJvZmlsZShcbiAgICAndHJhbnNmb3JtV29ya2xldFBhcmFtcycsXG4gICAgKCkgPT4gdHJhbnNmb3JtV29ya2xldChwYXJhbXMgfHwgW10sIGZhbHNlKSxcbiAgKTtcblxuICBjb25zdCBbaGFzRXZlbnRNZXRob2RzLCBldmVudEN0eF0gPSBhZGRFdmVudE1ldGhvZHNJZk5lZWRlZChwYXJhbXNfLCBvcHRpb25zKTtcblxuICBjb25zdCByZXN1bHQgPSBwcm9maWxlKCdydW5Xb3JrbGV0JywgKCkgPT4gd29ya2xldCguLi5wYXJhbXNfKSk7XG5cbiAgaWYgKGhhc0V2ZW50TWV0aG9kcykge1xuICAgIHJldHVybiB7XG4gICAgICByZXR1cm5WYWx1ZTogcmVzdWx0LFxuICAgICAgZXZlbnRSZXR1cm5SZXN1bHQ6IGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXb3JrbGV0KGN0eDogdW5rbm93bik6IGN0eCBpcyBXb3JrbGV0IHtcbiAgcmV0dXJuIHR5cGVvZiBjdHggPT09ICdvYmplY3QnICYmIGN0eCAhPT0gbnVsbCAmJiAoJ193a2x0SWQnIGluIGN0eCB8fCAnX2xlcHVzV29ya2xldEhhc2gnIGluIGN0eCk7XG59XG5cbmNvbnN0IHdvcmtsZXRDYWNoZSA9IG5ldyBXZWFrTWFwPG9iamVjdCwgQ2xvc3VyZVZhbHVlVHlwZSB8ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKT4oKTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChjdHg6IFdvcmtsZXQsIGlzV29ya2xldDogdHJ1ZSk6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGVbXSxcbiAgaXNXb3JrbGV0OiBmYWxzZSxcbik6IENsb3N1cmVWYWx1ZVR5cGVbXTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlLFxuICBpc1dvcmtsZXQ6IGJvb2xlYW4sXG4pOiBDbG9zdXJlVmFsdWVUeXBlIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pIHtcbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAodHlwZW9mIGN0eCAhPT0gJ29iamVjdCcgfHwgY3R4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuXG4gIGlmIChpc1dvcmtsZXQpIHtcbiAgICBjb25zdCByZXMgPSB3b3JrbGV0Q2FjaGUuZ2V0KGN0eCk7XG4gICAgaWYgKHJlcykge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrbGV0ID0geyBtYWluOiBjdHggfTtcbiAgdHJhbnNmb3JtV29ya2xldElubmVyKHdvcmtsZXQsIDAsIGN0eCk7XG5cbiAgaWYgKGlzV29ya2xldCkge1xuICAgIHdvcmtsZXRDYWNoZS5zZXQoY3R4LCB3b3JrbGV0Lm1haW4pO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtsZXQubWFpbjtcbn1cblxuY29uc3QgdHJhbnNmb3JtV29ya2xldElubmVyID0gKFxuICB2YWx1ZTogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZGVwdGg6IG51bWJlcixcbiAgY3R4OiB1bmtub3duLFxuKSA9PiB7XG4gIGNvbnN0IGxpbWl0ID0gMTAwMDtcbiAgaWYgKCsrZGVwdGggPj0gbGltaXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoIG9mIHZhbHVlIGV4Y2VlZHMgbGltaXQgb2YgJyArIGxpbWl0ICsgJy4nKTtcbiAgfVxuICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGNvbnN0IHN1Yk9iajogQ2xvc3VyZVZhbHVlVHlwZSA9IG9ialtrZXldO1xuICAgIGlmICh0eXBlb2Ygc3ViT2JqICE9PSAnb2JqZWN0JyB8fCBzdWJPYmogPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvKiogaXNFdmVudFRhcmdldCAqLyAnZWxlbWVudFJlZnB0cicgaW4gc3ViT2JqKSB7XG4gICAgICBvYmpba2V5XSA9IG5ldyBFbGVtZW50KHN1Yk9ialsnZWxlbWVudFJlZnB0ciddIGFzIEVsZW1lbnROb2RlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoc3ViT2JqIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtV29ya2xldElubmVyKHN1Yk9iaiwgZGVwdGgsIGN0eCk7XG5cbiAgICBjb25zdCBpc1dvcmtsZXRSZWYgPSAnX3d2aWQnIGluIChzdWJPYmogYXMgb2JqZWN0KTtcbiAgICBpZiAoaXNXb3JrbGV0UmVmKSB7XG4gICAgICBvYmpba2V5XSA9IGdldEZyb21Xb3JrbGV0UmVmTWFwKFxuICAgICAgICBzdWJPYmogYXMgdW5rbm93biBhcyBXb3JrbGV0UmVmSW1wbDx1bmtub3duPixcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNXb3JrbGV0ID0gJ193a2x0SWQnIGluIHN1Yk9iajtcbiAgICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgICAvLyBgc3ViT2JqYCBpcyB3b3JrbGV0IGN0eC4gU2hhbGxvdyBjb3B5IGl0IHRvIHByZXZlbnQgdGhlIHRyYW5zZm9ybWVkIHdvcmtsZXQgZnJvbSByZWZlcmVuY2luZyBjdHguXG4gICAgICAvLyBUaGlzIHdvdWxkIHJlc3VsdCBpbiB0aGUgdmFsdWUgb2YgYHdvcmtsZXRDYWNoZWAgcmVmZXJlbmNpbmcgaXRzIGtleS5cbiAgICAgIG9ialtrZXldID0gbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwWyhzdWJPYmogYXMgV29ya2xldCkuX3drbHRJZF0hXG4gICAgICAgIC5iaW5kKHsgLi4uc3ViT2JqIH0pO1xuICAgICAgb2JqW2tleV0uY3R4ID0gc3ViT2JqO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzSnNGbiA9ICdfanNGbklkJyBpbiBzdWJPYmo7XG4gICAgaWYgKGlzSnNGbikge1xuICAgICAgc3ViT2JqWydfZXhlY0lkJ10gPSAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQ7XG4gICAgICBseW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyPy5hZGRSZWYoXG4gICAgICAgIChjdHggYXMgV29ya2xldCkuX2V4ZWNJZCEsXG4gICAgICAgIHN1Yk9iaixcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCB7IGluaXRXb3JrbGV0IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgaW5pdEFwaUVudiB9IGZyb20gJy4vYXBpL2x5bnhBcGkuanMnO1xuaW1wb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH0gZnJvbSAnLi9saXN0ZW5lcnMuanMnO1xuaW1wb3J0IHsgaW5pdFdvcmtsZXQgfSBmcm9tICcuL3dvcmtsZXRSdW50aW1lLmpzJztcblxuaWYgKGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID09PSB1bmRlZmluZWQpIHtcbiAgaW5pdFdvcmtsZXQoKTtcbiAgaW5pdEFwaUVudigpO1xuICBpbml0RXZlbnRMaXN0ZW5lcnMoKTtcbn1cbiJdLCJuYW1lcyI6WyJBbmltYXRpb24iLCJfX0VsZW1lbnRBbmltYXRlIiwiZWZmZWN0IiwiS2V5ZnJhbWVFZmZlY3QiLCJ0YXJnZXQiLCJrZXlmcmFtZXMiLCJvcHRpb25zIiwiaXNTZGtWZXJzaW9uR3QiLCJtYWpvciIsIm1pbm9yIiwiX1N5c3RlbUluZm9fbHlueFNka1ZlcnNpb24iLCJseW54U2RrVmVyc2lvbiIsInZlcnNpb24iLCJOdW1iZXIiLCJ3aWxsRmx1c2giLCJzaG91bGRGbHVzaCIsInNldFNob3VsZEZsdXNoIiwidmFsdWUiLCJFbGVtZW50IiwibmFtZSIsIl9fU2V0QXR0cmlidXRlIiwiX19BZGRJbmxpbmVTdHlsZSIsInN0eWxlcyIsImtleSIsImF0dHJpYnV0ZU5hbWUiLCJfX0dldEF0dHJpYnV0ZUJ5TmFtZSIsIl9fR2V0QXR0cmlidXRlTmFtZXMiLCJzZWxlY3RvciIsInJlZiIsIl9fUXVlcnlTZWxlY3RvciIsIl9fUXVlcnlTZWxlY3RvckFsbCIsImVsZW1lbnQiLCJFcnJvciIsIl9fR2V0Q29tcHV0ZWRTdHlsZUJ5S2V5Iiwibm9ybWFsaXplZE9wdGlvbnMiLCJtZXRob2ROYW1lIiwicGFyYW1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJfX0ludm9rZVVJTWV0aG9kIiwicmVzIiwiSlNPTiIsIl9fRmx1c2hFbGVtZW50VHJlZSIsIk9iamVjdCIsIlBhZ2VFbGVtZW50IiwiX1BhZ2VFbGVtZW50IiwiX19HZXRQYWdlRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjc3NTZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbml0QXBpRW52IiwiX2x5bnhfY2xlYXJJbnRlcnZhbCIsImx5bngiLCJnbG9iYWxUaGlzIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FsbGJhY2siLCJydW5SdW5Pbk1haW5UaHJlYWRUYXNrIiwidGFzayIsInJlc29sdmVJZCIsInJldHVyblZhbHVlIiwicnVuV29ya2xldCIsIldvcmtsZXRFdmVudHMiLCJwcm9maWxlIiwic2xpY2VOYW1lIiwiZiIsImNvbnNvbGUiLCJpbXBsIiwiaW5pdFdvcmtsZXRSZWYiLCJ1cGRhdGVXb3JrbGV0UmVmIiwidXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMiLCJjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCIsImNyZWF0ZVdvcmtsZXRSZWYiLCJpZCIsImdldEZyb21Xb3JrbGV0UmVmTWFwIiwicmVmSW1wbCIsInVuZGVmaW5lZCIsInJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAiLCJoYW5kbGUiLCJwYXRjaCIsImluaXRFdmVudExpc3RlbmVycyIsImpzQ29udGV4dCIsImV2ZW50IiwiZGF0YSIsImluaXRSdW5PbkJhY2tncm91bmREZWxheSIsImRlbGF5UnVuT25CYWNrZ3JvdW5kIiwicnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMiLCJmbk9iaiIsIl9mbk9iaiIsImRlbGF5SW5kaWNlcyIsImRldGFpbHMiLCJpbml0RXZlbnREZWxheSIsIk1hcCIsInJ1bkRlbGF5ZWRXb3JrbGV0IiwiY2xlYXJEZWxheWVkV29ya2xldHMiLCJkZWxheUV4ZWNVbnRpbEpzUmVhZHkiLCJoYXNoIiwibWFwIiwicGFyYW1WZWMiLCJ3b3JrbGV0IiwicGFyYW1zVmVjIiwibGVmdFBhcmFtc1ZlYyIsIl9maXJzdFBhcmFtX2N1cnJlbnRUYXJnZXQiLCJmaXJzdFBhcmFtIiwic2V0VGltZW91dCIsImluaXRFb21JbXBsIiwiRXZlbnRSZXN1bHQiLCJpc0V2ZW50T2JqZWN0IiwiY3R4IiwiQXJyYXkiLCJSdW5Xb3JrbGV0U291cmNlIiwiYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQiLCJldmVudEN0eCIsImV2ZW50T2JqIiwiX2V2ZW50Q3R4X19ldmVudFJldHVyblJlc3VsdCIsImh5ZHJhdGVDdHgiLCJmaXJzdFNjcmVlbkN0eCIsImh5ZHJhdGVDdHhJbXBsIiwiZXhlY0lkIiwiY3R4T2JqIiwiZmlyc3RTY3JlZW5DdHhPYmoiLCJoeWRyYXRlTWFpblRocmVhZFJlZiIsImh5ZHJhdGVEZWxheVJ1bk9uQmFja2dyb3VuZFRhc2tzIiwiZmlyc3RTY3JlZW5WYWx1ZSIsInJlZklkIiwibHlueFdvcmtsZXRJbXBsIiwiZm5PYmpzIiwiZmlyc3RTY3JlZW5Gbk9ianMiLCJmbk5hbWUiLCJmaXJzdFNjcmVlbkZuT2JqIiwiaW5kZXgiLCJKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciIsIm9ialRvUmVmIiwiX3RoaXNfZXhlY0lkUmVmQ291bnRfZ2V0IiwicmMiLCJTZXQiLCJGaW5hbGl6YXRpb25SZWdpc3RyeSIsImlzUnVuT25CYWNrZ3JvdW5kRW5hYmxlZCIsImluaXRXb3JrbGV0IiwicmVnaXN0ZXJXb3JrbGV0IiwiX3R5cGUiLCJ2YWxpZGF0ZVdvcmtsZXQiLCJydW5Xb3JrbGV0SW1wbCIsInRyYW5zZm9ybVdvcmtsZXQiLCJwYXJhbXNfIiwiaGFzRXZlbnRNZXRob2RzIiwicmVzdWx0Iiwid29ya2xldENhY2hlIiwiV2Vha01hcCIsImlzV29ya2xldCIsInRyYW5zZm9ybVdvcmtsZXRJbm5lciIsImRlcHRoIiwibGltaXQiLCJvYmoiLCJzdWJPYmoiLCJpc1dvcmtsZXRSZWYiLCJpc0pzRm4iLCJfbHlueFdvcmtsZXRJbXBsX19qc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBWU8sTUFBTUE7UUFXSixTQUFlO1lBRXBCLE9BQU9DLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7O2dCQUE0QixJQUFJLENBQUMsRUFBRTthQUFDO1FBQzFGO1FBRU8sUUFBYztZQUVuQixPQUFPQSxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOztnQkFBMkIsSUFBSSxDQUFDLEVBQUU7YUFBQztRQUN6RjtRQUVPLE9BQWE7WUFFbEIsT0FBT0EsaUJBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTs7Z0JBQTBCLElBQUksQ0FBQyxFQUFFO2FBQUM7UUFDeEY7UUFFUSxRQUFjO1lBRXBCLE9BQU9BLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7O2dCQUVsRCxJQUFJLENBQUMsRUFBRTtnQkFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTzthQUNwQjtRQUNIO1FBN0JBLFlBQVlDLE1BQXNCLENBQUU7WUFIcEMsdUJBQWdCLFVBQWhCO1lBQ0EsdUJBQWdCLE1BQWhCO1lBR0UsSUFBSSxDQUFDLE1BQU0sR0FBR0E7WUFDZCxJQUFJLENBQUMsRUFBRSxHQUFHLCtCQUErQkYsVUFBVSxLQUFLO1lBQ3hELElBQUksQ0FBQyxLQUFLO1FBQ1o7SUEwQkY7SUFsQ0UsaUJBRFdBLFdBQ0os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
@@ -1 +1 @@
1
- (()=>{"use strict";var e,t,n;let r,l,i;function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a{cancel(){return __ElementAnimate(this.effect.target.element,[3,this.id])}pause(){return __ElementAnimate(this.effect.target.element,[2,this.id])}play(){return __ElementAnimate(this.effect.target.element,[1,this.id])}start(){return __ElementAnimate(this.effect.target.element,[0,this.id,this.effect.keyframes,this.effect.options])}constructor(e){o(this,"effect",void 0),o(this,"id",void 0),this.effect=e,this.id="__lynx-inner-js-animation-"+a.count++,this.start()}}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}o(a,"count",0);class u{constructor(e,t,n){s(this,"target",void 0),s(this,"keyframes",void 0),s(this,"options",void 0),this.target=e,this.keyframes=t,this.options=n}}let c=!1,d=!0;class f{setAttribute(e,t){__SetAttribute(this.element,e,t),this.flushElementTree()}setStyleProperty(e,t){__AddInlineStyle(this.element,e,t),this.flushElementTree()}setStyleProperties(e){for(let t in e)__AddInlineStyle(this.element,t,e[t]);this.flushElementTree()}getAttribute(e){return __GetAttributeByName(this.element,e)}getAttributeNames(){return __GetAttributeNames(this.element)}querySelector(e){let t=__QuerySelector(this.element,e,{});return t?new f(t):null}querySelectorAll(e){return __QuerySelectorAll(this.element,e,{}).map(e=>new f(e))}animate(e,t){return new a(new u(this,e,"number"==typeof t?{duration:t}:null!=t?t:{}))}invoke(e,t){return new Promise((n,r)=>{__InvokeUIMethod(this.element,e,null!=t?t:{},e=>{0===e.code?n(e.data):r(Error("UI method invoke: "+JSON.stringify(e)))}),this.flushElementTree()})}flushElementTree(){!c&&d&&(c=!0,Promise.resolve().then(()=>{c=!1,__FlushElementTree()}))}constructor(e){!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"element",void 0),Object.defineProperty(this,"element",{get:()=>e})}}class m{static get(){return null!=m.pageElement||(m.pageElement=__GetPageElement()),m.pageElement}}function y(e,t){var n;let r=(null!=(n=SystemInfo.lynxSdkVersion)?n:"1.0").split(".");return Number(r[0])>e||Number(r[0])==e&&Number(r[1])>t}function h(e,t,n){let r;try{r=runWorklet(e,t)}finally{lynx.getJSContext().dispatchEvent({type:"Lynx.Worklet.FunctionCallRet",data:JSON.stringify({resolveId:n,returnValue:r})})}}t=void 0,(e="pageElement")in m?Object.defineProperty(m,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):m[e]=t;let _=(e,t)=>({current:t,_wvid:e}),p=e=>{let t,n=e._wvid;return n<0?(t=r._firstScreenWorkletRefMap[n])||(t=r._firstScreenWorkletRefMap[n]=_(n,e._initValue)):t=r._workletRefMap[n],t};function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(e,t,n){lynxWorkletImpl._workletMap[t]=n}let I=new WeakMap;function v(e,t){if("object"!=typeof e||null===e)return e;if(t){let t=I.get(e);if(t)return t}let n={main:e};return b(n,0,e),t&&I.set(e,n.main),n.main}let b=(e,t,n)=>{if(++t>=1e3)throw Error("Depth of value exceeds limit of 1000.");if("object"==typeof e&&null!==e)for(let l in e){let i=e[l];if("object"==typeof i&&null!==i){if("elementRefptr"in i){e[l]=new f(i.elementRefptr);continue}if(!(i instanceof f)){if(b(i,t,n),"_wvid"in i){e[l]=p(i);continue}if("_wkltId"in i){e[l]=lynxWorkletImpl._workletMap[i._wkltId].bind({...i}),e[l].ctx=i;continue}if("_jsFnId"in i){var r;i._execId=n._execId,null==(r=lynxWorkletImpl._jsFunctionLifecycleManager)||r.addRef(n._execId,i);continue}}}}};if(void 0===globalThis.lynxWorkletImpl){let e,t;globalThis.lynxWorkletImpl={_workletMap:{},_refImpl:r={_workletRefMap:{},_firstScreenWorkletRefMap:{},updateWorkletRef:function(e,t){p(e).current=t?new f(t):null},updateWorkletRefInitValueChanges:function(e){e.forEach(([e,t])=>{r._workletRefMap[e]||(r._workletRefMap[e]=_(e,t))})},clearFirstScreenWorkletRefMap:function(){r._firstScreenWorkletRefMap={}}},_runOnBackgroundDelayImpl:l={delayedBackgroundFunctionArray:[],delayRunOnBackground:function(e,t){var n;l.delayedBackgroundFunctionArray.push({task:t}),(null!=(n=e._delayIndices)?n:e._delayIndices=[]).push(l.delayedBackgroundFunctionArray.length-1)},runDelayedBackgroundFunctions:function(){for(let e of l.delayedBackgroundFunctionArray)e.jsFnHandle&&e.task(e.jsFnHandle._jsFnId,e.jsFnHandle._execId);l.delayedBackgroundFunctionArray.length=0}},_hydrateCtx:function(e,t){(function e(t,n,r){if(t&&"object"==typeof t&&n&&"object"==typeof n&&(!t._wkltId||t._wkltId===n._wkltId))for(let o in t)if("_wvid"===o){var l,i;l=t[o],"_initValue"in(i=n)||(lynxWorkletImpl._refImpl._workletRefMap[l]=i)}else if("_jsFn"===o)!function(e,t,n){for(let r in e){let l=e[r],i=t[r];if(!(null==i?void 0:i._delayIndices)){i&&(i._isFirstScreen=!1,i._execId=n,Object.assign(i,l));continue}for(let e of i._delayIndices){let t=lynxWorkletImpl._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[e];l._execId=n,t.jsFnHandle=l}}}(t[o],n[o],r);else{let l="function"==typeof n[o]?n[o].ctx:n[o];e(t[o],l,r)}})(e,t,e._execId)},_eventDelayImpl:i={_delayedWorkletParamsMap:new Map,runDelayedWorklet:function(e,t){(()=>{let n=i._delayedWorkletParamsMap.get(e._wkltId);if(void 0===n)return;let r=[];n.forEach(n=>{var l;let i=n[0];(null==i||null==(l=i.currentTarget)?void 0:l.elementRefptr)===t?setTimeout(()=>{runWorklet(e,n)},0):r.push(n)}),i._delayedWorkletParamsMap.set(e._wkltId,r)})()},clearDelayedWorklets:function(){i._delayedWorkletParamsMap.clear()}},_eomImpl:{setShouldFlush:function(e){d=e}},_runRunOnMainThreadTask:h},y(2,15)&&(globalThis.lynxWorkletImpl._jsFunctionLifecycleManager=new class e{addRef(e,t){var n;this.execIdRefCount.set(e,(null!=(n=this.execIdRefCount.get(e))?n:0)+1),this.registry.register(t,e)}removeRef(e){let t=this.execIdRefCount.get(e);t>1?this.execIdRefCount.set(e,t-1):(this.execIdRefCount.delete(e),this.execIdSetToFire.add(e),this.willFire||(this.willFire=!0,Promise.resolve().then(()=>{this.fire()})))}fire(){lynx.getJSContext().dispatchEvent({type:"Lynx.Worklet.releaseBackgroundWorkletCtx",data:Array.from(this.execIdSetToFire)}),this.execIdSetToFire.clear(),this.willFire=!1}constructor(){k(this,"execIdRefCount",new Map),k(this,"execIdSetToFire",new Set),k(this,"willFire",!1),k(this,"registry",void 0),this.registry=new FinalizationRegistry(this.removeRef.bind(this))}}),globalThis.registerWorklet=g,globalThis.registerWorkletInternal=g,globalThis.runWorklet=function(e,t,n){var r,l;if(!("object"==typeof(r=e)&&null!==r&&("_wkltId"in r||"_lepusWorkletHash"in r)))return void console.warn("Worklet: Invalid worklet object: "+JSON.stringify(e));if("_lepusWorkletHash"in e){let n,r;return void(l=e._lepusWorkletHash,(r=(n=i._delayedWorkletParamsMap).get(l))?r.push(t):n.set(l,[t]))}return function(e,t,n){let r=(e._wkltId,v(e,!0)),l=v(t||[],!1),[i,o]=function(e,t){if(!Array.isArray(e)||"object"!=typeof e[0]||null===e[0]||(!t||1!==t.source)&&1)return[!1,{}];let n={},r=e[0];return r.stopPropagation=function(){var e;n._eventReturnResult=(null!=(e=n._eventReturnResult)?e:0)|1},r.stopImmediatePropagation=function(){var e;n._eventReturnResult=(null!=(e=n._eventReturnResult)?e:0)|2},[!0,n]}(l,n),a=r(...l);return i?{returnValue:a,eventReturnResult:o._eventReturnResult}:a}(e,t,n)},lynx.querySelector=function(e){let t=__QuerySelector(m.get(),e,{});return t?new f(t):null},lynx.querySelectorAll=function(e){return __QuerySelectorAll(m.get(),e,{}).map(e=>new f(e))},globalThis.setTimeout=lynx.setTimeout,globalThis.setInterval=lynx.setInterval,globalThis.clearTimeout=lynx.clearTimeout,globalThis.clearInterval=null!=(n=lynx.clearInterval)?n:lynx.clearTimeInterval,e=lynx.requestAnimationFrame,lynx.requestAnimationFrame=globalThis.requestAnimationFrame=t=>{if(!y(2,15))throw Error("requestAnimationFrame in main thread script requires Lynx sdk version 2.16");return e(t)},globalThis.cancelAnimationFrame=lynx.cancelAnimationFrame,(t=lynx.getJSContext()).addEventListener("Lynx.Worklet.runWorkletCtx",e=>{let t=JSON.parse(e.data);h(t.worklet,t.params,t.resolveId)}),t.addEventListener("Lynx.Worklet.releaseWorkletRef",e=>{var t;t=e.data.id,delete r._workletRefMap[t]})}})();
1
+ (()=>{"use strict";var e,t,n;let r,l,i;function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a{cancel(){return __ElementAnimate(this.effect.target.element,[3,this.id])}pause(){return __ElementAnimate(this.effect.target.element,[2,this.id])}play(){return __ElementAnimate(this.effect.target.element,[1,this.id])}start(){return __ElementAnimate(this.effect.target.element,[0,this.id,this.effect.keyframes,this.effect.options])}constructor(e){o(this,"effect",void 0),o(this,"id",void 0),this.effect=e,this.id="__lynx-inner-js-animation-"+a.count++,this.start()}}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}o(a,"count",0);class s{constructor(e,t,n){u(this,"target",void 0),u(this,"keyframes",void 0),u(this,"options",void 0),this.target=e,this.keyframes=t,this.options=n}}function c(e,t){var n;let r=(null!=(n=SystemInfo.lynxSdkVersion)?n:"1.0").split(".");return Number(r[0])>e||Number(r[0])==e&&Number(r[1])>t}let d=!1,f=!0;class y{setAttribute(e,t){__SetAttribute(this.element,e,t),this.flushElementTree()}setStyleProperty(e,t){__AddInlineStyle(this.element,e,t),this.flushElementTree()}setStyleProperties(e){for(let t in e)__AddInlineStyle(this.element,t,e[t]);this.flushElementTree()}getAttribute(e){return __GetAttributeByName(this.element,e)}getAttributeNames(){return __GetAttributeNames(this.element)}querySelector(e){let t=__QuerySelector(this.element,e,{});return t?new y(t):null}querySelectorAll(e){return __QuerySelectorAll(this.element,e,{}).map(e=>new y(e))}getComputedStyleProperty(e){if(!c(3,4))throw Error("getComputedStyleProperty requires Lynx sdk version 3.5");if(!e)throw Error("getComputedStyleProperty: key is required");return __GetComputedStyleByKey(this.element,e)}animate(e,t){return new a(new s(this,e,"number"==typeof t?{duration:t}:null!=t?t:{}))}invoke(e,t){return new Promise((n,r)=>{__InvokeUIMethod(this.element,e,null!=t?t:{},e=>{0===e.code?n(e.data):r(Error("UI method invoke: "+JSON.stringify(e)))}),this.flushElementTree()})}flushElementTree(){!d&&f&&(d=!0,Promise.resolve().then(()=>{d=!1,__FlushElementTree()}))}constructor(e){!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"element",void 0),Object.defineProperty(this,"element",{get:()=>e})}}class m{static get(){return null!=m.pageElement||(m.pageElement=__GetPageElement()),m.pageElement}}function h(e,t,n){let r;try{r=runWorklet(e,t)}finally{lynx.getJSContext().dispatchEvent({type:"Lynx.Worklet.FunctionCallRet",data:JSON.stringify({resolveId:n,returnValue:r})})}}t=void 0,(e="pageElement")in m?Object.defineProperty(m,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):m[e]=t;let _=(e,t)=>({current:t,_wvid:e}),p=e=>{let t,n=e._wvid;return n<0?(t=r._firstScreenWorkletRefMap[n])||(t=r._firstScreenWorkletRefMap[n]=_(n,e._initValue)):t=r._workletRefMap[n],t};function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(e,t,n){lynxWorkletImpl._workletMap[t]=n}let v=new WeakMap;function I(e,t){if("object"!=typeof e||null===e)return e;if(t){let t=v.get(e);if(t)return t}let n={main:e};return x(n,0,e),t&&v.set(e,n.main),n.main}let x=(e,t,n)=>{if(++t>=1e3)throw Error("Depth of value exceeds limit of 1000.");if("object"==typeof e&&null!==e)for(let l in e){let i=e[l];if("object"==typeof i&&null!==i){if("elementRefptr"in i){e[l]=new y(i.elementRefptr);continue}if(!(i instanceof y)){if(x(i,t,n),"_wvid"in i){e[l]=p(i);continue}if("_wkltId"in i){e[l]=lynxWorkletImpl._workletMap[i._wkltId].bind({...i}),e[l].ctx=i;continue}if("_jsFnId"in i){var r;i._execId=n._execId,null==(r=lynxWorkletImpl._jsFunctionLifecycleManager)||r.addRef(n._execId,i);continue}}}}};if(void 0===globalThis.lynxWorkletImpl){let e,t;globalThis.lynxWorkletImpl={_workletMap:{},_refImpl:r={_workletRefMap:{},_firstScreenWorkletRefMap:{},updateWorkletRef:function(e,t){p(e).current=t?new y(t):null},updateWorkletRefInitValueChanges:function(e){e.forEach(([e,t])=>{r._workletRefMap[e]||(r._workletRefMap[e]=_(e,t))})},clearFirstScreenWorkletRefMap:function(){r._firstScreenWorkletRefMap={}}},_runOnBackgroundDelayImpl:l={delayedBackgroundFunctionArray:[],delayRunOnBackground:function(e,t){var n;l.delayedBackgroundFunctionArray.push({task:t}),(null!=(n=e._delayIndices)?n:e._delayIndices=[]).push(l.delayedBackgroundFunctionArray.length-1)},runDelayedBackgroundFunctions:function(){for(let e of l.delayedBackgroundFunctionArray)e.jsFnHandle&&e.task(e.jsFnHandle._jsFnId,e.jsFnHandle._execId);l.delayedBackgroundFunctionArray.length=0}},_hydrateCtx:function(e,t){(function e(t,n,r){if(t&&"object"==typeof t&&n&&"object"==typeof n&&(!t._wkltId||t._wkltId===n._wkltId))for(let o in t)if("_wvid"===o){var l,i;l=t[o],"_initValue"in(i=n)||(lynxWorkletImpl._refImpl._workletRefMap[l]=i)}else if("_jsFn"===o)!function(e,t,n){for(let r in e){let l=e[r],i=t[r];if(!(null==i?void 0:i._delayIndices)){i&&(i._isFirstScreen=!1,i._execId=n,Object.assign(i,l));continue}for(let e of i._delayIndices){let t=lynxWorkletImpl._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[e];l._execId=n,t.jsFnHandle=l}}}(t[o],n[o],r);else{let l="function"==typeof n[o]?n[o].ctx:n[o];e(t[o],l,r)}})(e,t,e._execId)},_eventDelayImpl:i={_delayedWorkletParamsMap:new Map,runDelayedWorklet:function(e,t){(()=>{let n=i._delayedWorkletParamsMap.get(e._wkltId);if(void 0===n)return;let r=[];n.forEach(n=>{var l;let i=n[0];(null==i||null==(l=i.currentTarget)?void 0:l.elementRefptr)===t?setTimeout(()=>{runWorklet(e,n)},0):r.push(n)}),i._delayedWorkletParamsMap.set(e._wkltId,r)})()},clearDelayedWorklets:function(){i._delayedWorkletParamsMap.clear()}},_eomImpl:{setShouldFlush:function(e){f=e}},_runRunOnMainThreadTask:h},c(2,15)&&(globalThis.lynxWorkletImpl._jsFunctionLifecycleManager=new class e{addRef(e,t){var n;this.execIdRefCount.set(e,(null!=(n=this.execIdRefCount.get(e))?n:0)+1),this.registry.register(t,e)}removeRef(e){let t=this.execIdRefCount.get(e);t>1?this.execIdRefCount.set(e,t-1):(this.execIdRefCount.delete(e),this.execIdSetToFire.add(e),this.willFire||(this.willFire=!0,Promise.resolve().then(()=>{this.fire()})))}fire(){lynx.getJSContext().dispatchEvent({type:"Lynx.Worklet.releaseBackgroundWorkletCtx",data:Array.from(this.execIdSetToFire)}),this.execIdSetToFire.clear(),this.willFire=!1}constructor(){k(this,"execIdRefCount",new Map),k(this,"execIdSetToFire",new Set),k(this,"willFire",!1),k(this,"registry",void 0),this.registry=new FinalizationRegistry(this.removeRef.bind(this))}}),globalThis.registerWorklet=g,globalThis.registerWorkletInternal=g,globalThis.runWorklet=function(e,t,n){var r,l;if(!("object"==typeof(r=e)&&null!==r&&("_wkltId"in r||"_lepusWorkletHash"in r)))return void console.warn("Worklet: Invalid worklet object: "+JSON.stringify(e));if("_lepusWorkletHash"in e){let n,r;return void(l=e._lepusWorkletHash,(r=(n=i._delayedWorkletParamsMap).get(l))?r.push(t):n.set(l,[t]))}return function(e,t,n){let r=(e._wkltId,I(e,!0)),l=I(t||[],!1),[i,o]=function(e,t){if(!Array.isArray(e)||"object"!=typeof e[0]||null===e[0]||(!t||1!==t.source)&&1)return[!1,{}];let n={},r=e[0];return r.stopPropagation=function(){var e;n._eventReturnResult=(null!=(e=n._eventReturnResult)?e:0)|1},r.stopImmediatePropagation=function(){var e;n._eventReturnResult=(null!=(e=n._eventReturnResult)?e:0)|2},[!0,n]}(l,n),a=r(...l);return i?{returnValue:a,eventReturnResult:o._eventReturnResult}:a}(e,t,n)},lynx.querySelector=function(e){let t=__QuerySelector(m.get(),e,{});return t?new y(t):null},lynx.querySelectorAll=function(e){return __QuerySelectorAll(m.get(),e,{}).map(e=>new y(e))},globalThis.setTimeout=lynx.setTimeout,globalThis.setInterval=lynx.setInterval,globalThis.clearTimeout=lynx.clearTimeout,globalThis.clearInterval=null!=(n=lynx.clearInterval)?n:lynx.clearTimeInterval,e=lynx.requestAnimationFrame,lynx.requestAnimationFrame=globalThis.requestAnimationFrame=t=>{if(!c(2,15))throw Error("requestAnimationFrame in main thread script requires Lynx sdk version 2.16");return e(t)},globalThis.cancelAnimationFrame=lynx.cancelAnimationFrame,(t=lynx.getJSContext()).addEventListener("Lynx.Worklet.runWorkletCtx",e=>{let t=JSON.parse(e.data);h(t.worklet,t.params,t.resolveId)}),t.addEventListener("Lynx.Worklet.releaseWorkletRef",e=>{var t;t=e.data.id,delete r._workletRefMap[t]})}})();
@@ -10,6 +10,7 @@ export declare class Element {
10
10
  getAttributeNames(): string[];
11
11
  querySelector(selector: string): Element | null;
12
12
  querySelectorAll(selector: string): Element[];
13
+ getComputedStyleProperty(key: string): string;
13
14
  animate(keyframes: Record<string, number | string>[], options?: number | Record<string, number | string>): Animation;
14
15
  invoke(methodName: string, params?: Record<string, unknown>): Promise<unknown>;
15
16
  private flushElementTree;
@@ -3,6 +3,7 @@
3
3
  // LICENSE file in the root directory of this source tree.
4
4
  import { Animation } from './animation/animation.js';
5
5
  import { KeyframeEffect } from './animation/effect.js';
6
+ import { isSdkVersionGt } from '../utils/version.js';
6
7
  let willFlush = false;
7
8
  let shouldFlush = true;
8
9
  export function setShouldFlush(value) {
@@ -50,6 +51,15 @@ export class Element {
50
51
  return new Element(element);
51
52
  });
52
53
  }
54
+ getComputedStyleProperty(key) {
55
+ if (!isSdkVersionGt(3, 4)) {
56
+ throw new Error('getComputedStyleProperty requires Lynx sdk version 3.5');
57
+ }
58
+ if (!key) {
59
+ throw new Error('getComputedStyleProperty: key is required');
60
+ }
61
+ return __GetComputedStyleByKey(this.element, key);
62
+ }
53
63
  animate(keyframes, options) {
54
64
  const normalizedOptions = typeof options === 'number' ? { duration: options } : options ?? {};
55
65
  return new Animation(new KeyframeEffect(this, keyframes, normalizedOptions));
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/api/element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/api/element.ts"],"names":[],"mappings":"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"}