@smarterplan/ngx-smarterplan-core 1.2.0 → 1.2.1

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 (48) hide show
  1. package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +51 -0
  2. package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +62 -0
  3. package/esm2020/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +158 -0
  4. package/esm2020/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +85 -0
  5. package/esm2020/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
  6. package/esm2020/lib/matterport-extensions/security-camera/SecurityCamera.mjs +22 -22
  7. package/esm2020/lib/services/matterport.service.mjs +39 -7
  8. package/esm2020/lib/services/models/object3D.service.mjs +1 -1
  9. package/esm2020/lib/services/models/poi.service.mjs +1 -1
  10. package/esm2020/lib/services/viewer.service.mjs +1 -1
  11. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +355 -28
  12. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  13. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +355 -28
  14. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  15. package/lib/matterport-extensions/nest-thermostat/CanvasImage.d.ts +31 -0
  16. package/lib/matterport-extensions/nest-thermostat/CanvasImage.d.ts.map +1 -0
  17. package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts +38 -0
  18. package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts.map +1 -0
  19. package/lib/matterport-extensions/nest-thermostat/NestThermostat.d.ts +42 -0
  20. package/lib/matterport-extensions/nest-thermostat/NestThermostat.d.ts.map +1 -0
  21. package/lib/matterport-extensions/nest-thermostat/PlaneRenderer.d.ts +46 -0
  22. package/lib/matterport-extensions/nest-thermostat/PlaneRenderer.d.ts.map +1 -0
  23. package/lib/services/matterport.service.d.ts.map +1 -1
  24. package/package.json +1 -1
  25. package/esm2020/lib/matterport-extensions/common/src/SceneComponent.mjs +0 -128
  26. package/esm2020/lib/matterport-extensions/common/src/sdk-components/OrientedBox.mjs +0 -145
  27. package/esm2020/lib/matterport-extensions/core/src/index.mjs +0 -4
  28. package/esm2020/lib/matterport-extensions/core/src/observable/Observable.mjs +0 -167
  29. package/esm2020/lib/matterport-extensions/core/src/observable/ObservableValue.mjs +0 -38
  30. package/esm2020/lib/matterport-extensions/core/src/subscription/ISubscription.mjs +0 -2
  31. package/esm2020/lib/matterport-extensions/core/src/types.mjs +0 -2
  32. package/esm2020/lib/matterport-extensions/core/src/util/index.mjs +0 -165
  33. package/lib/matterport-extensions/common/src/SceneComponent.d.ts +0 -388
  34. package/lib/matterport-extensions/common/src/SceneComponent.d.ts.map +0 -1
  35. package/lib/matterport-extensions/common/src/sdk-components/OrientedBox.d.ts +0 -44
  36. package/lib/matterport-extensions/common/src/sdk-components/OrientedBox.d.ts.map +0 -1
  37. package/lib/matterport-extensions/core/src/index.d.ts +0 -4
  38. package/lib/matterport-extensions/core/src/index.d.ts.map +0 -1
  39. package/lib/matterport-extensions/core/src/observable/Observable.d.ts +0 -94
  40. package/lib/matterport-extensions/core/src/observable/Observable.d.ts.map +0 -1
  41. package/lib/matterport-extensions/core/src/observable/ObservableValue.d.ts +0 -21
  42. package/lib/matterport-extensions/core/src/observable/ObservableValue.d.ts.map +0 -1
  43. package/lib/matterport-extensions/core/src/subscription/ISubscription.d.ts +0 -26
  44. package/lib/matterport-extensions/core/src/subscription/ISubscription.d.ts.map +0 -1
  45. package/lib/matterport-extensions/core/src/types.d.ts +0 -10
  46. package/lib/matterport-extensions/core/src/types.d.ts.map +0 -1
  47. package/lib/matterport-extensions/core/src/util/index.d.ts +0 -31
  48. package/lib/matterport-extensions/core/src/util/index.d.ts.map +0 -1
@@ -217,30 +217,30 @@ export class SecurityCamera extends SceneComponent {
217
217
  }
218
218
  }
219
219
  function vertexShader() {
220
- return `
221
- uniform mat4 lightMatrix;
222
-
223
- varying vec4 vLightCoords;
224
-
225
- void main() {
226
- // create a UV region [0,1] x [0,1] to represent what the lightMatrix "sees"
227
- vLightCoords = lightMatrix * modelMatrix * vec4(position, 1.0);
228
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
229
- }
220
+ return `
221
+ uniform mat4 lightMatrix;
222
+
223
+ varying vec4 vLightCoords;
224
+
225
+ void main() {
226
+ // create a UV region [0,1] x [0,1] to represent what the lightMatrix "sees"
227
+ vLightCoords = lightMatrix * modelMatrix * vec4(position, 1.0);
228
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
229
+ }
230
230
  `;
231
231
  }
232
232
  function fragmentShader() {
233
- return `
234
- uniform vec3 color;
235
-
236
- varying vec4 vLightCoords;
237
-
238
- void main() {
239
- vec2 lightUV = vLightCoords.xy / vLightCoords.w;
240
- float inView = float(max(lightUV.x, lightUV.y) <= 1.0 && min(lightUV.x, lightUV.y) >= 0.0 && vLightCoords.z > 0.0);
241
-
242
- gl_FragColor = vec4(color, min(inView, 0.2));
243
- }
233
+ return `
234
+ uniform vec3 color;
235
+
236
+ varying vec4 vLightCoords;
237
+
238
+ void main() {
239
+ vec2 lightUV = vLightCoords.xy / vLightCoords.w;
240
+ float inView = float(max(lightUV.x, lightUV.y) <= 1.0 && min(lightUV.x, lightUV.y) >= 0.0 && vLightCoords.z > 0.0);
241
+
242
+ gl_FragColor = vec4(color, min(inView, 0.2));
243
+ }
244
244
  `;
245
245
  }
246
246
  function updateHighlightUniforms(projector, uniforms) {
@@ -256,4 +256,4 @@ export const securityCameraType = 'mp.securityCamera';
256
256
  export const makeSecurityCamera = function () {
257
257
  return new SecurityCamera();
258
258
  };
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlDYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9zZWN1cml0eS1jYW1lcmEvU2VjdXJpdHlDYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsY0FBYyxFQUVkLGFBQWEsRUFDYixjQUFjLEVBQ2QsS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYixZQUFZLEVBQ2IsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEtBQUssbUJBQW1CLE1BQU0saURBQWlELENBQUE7QUFDdEYsT0FBTyxFQUFtQixjQUFjLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQXFCbkYsTUFBTSxPQUFPLGNBQWUsU0FBUSxjQUFjO0lBQWxEOztRQUNVLGNBQVMsR0FBb0IsSUFBSSxDQUFDO1FBQ2xDLFNBQUksR0FBb0IsSUFBSSxDQUFDO1FBQzdCLFVBQUssR0FBb0IsSUFBSSxDQUFDO1FBQzlCLFFBQUcsR0FBZ0IsSUFBSSxDQUFDO1FBQ3hCLFVBQUssR0FBZ0IsSUFBSSxDQUFDO1FBRTFCLGNBQVMsR0FBZ0IsSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFzQjtZQUM3QyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBQztZQUMzQixZQUFZLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBQztZQUNwQyxXQUFXLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUs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QUE4RTtJQUM5RSw0Q0FBNEM7SUFDNUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsRSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgT2JqZWN0M0QsXHJcbiAgTWVzaCxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICBCb3hHZW9tZXRyeSxcclxuICBTaGFkZXJNYXRlcmlhbCxcclxuICBMaW5lQmFzaWNNYXRlcmlhbCxcclxuICBFZGdlc0dlb21ldHJ5LFxyXG4gIEFuaW1hdGlvbk1peGVyLFxyXG4gIENvbG9yLFxyXG4gIE1hdHJpeDQsXHJcbiAgVmVjdG9yMyxcclxuICBFdWxlcixcclxuICBDeWxpbmRlckJ1ZmZlckdlb21ldHJ5LFxyXG4gIEJhY2tTaWRlLFxyXG4gIE5vcm1hbEJsZW5kaW5nLFxyXG4gIEFkZGl0aXZlQmxlbmRpbmcsXHJcbiAgUXVhdGVybmlvbixcclxuICBRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjayxcclxuICBBbmltYXRpb25DbGlwLFxyXG4gIExvb3BQaW5nUG9uZ1xyXG59IGZyb20gJ3RocmVlJztcclxuaW1wb3J0ICogYXMgQnVmZmVyR2VvbWV0cnlVdGlscyBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vdXRpbHMvQnVmZmVyR2VvbWV0cnlVdGlscy5qcydcclxuaW1wb3J0IHtDb21wb25lbnRDb250ZXh0LCBTY2VuZUNvbXBvbmVudH0gZnJvbSAnLi4vc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50JztcclxuXHJcbmludGVyZmFjZSBJbnB1dHMge1xyXG4gIG5lYXJQbGFuZTogbnVtYmVyO1xyXG4gIGZhclBsYW5lOiBudW1iZXIsXHJcbiAgaG9yaXpvbnRhbEZPVjogbnVtYmVyLFxyXG4gIGFzcGVjdDogbnVtYmVyLFxyXG4gIGxvY2FsUG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcjsgfTtcclxuICBsb2NhbFJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IH07XHJcbiAgY29sb3I6IG51bWJlcjtcclxuICBwYW5QZXJpb2Q6IG51bWJlcjtcclxuICBwYW5BbmdsZTogbnVtYmVyO1xyXG59XHJcblxyXG50eXBlIEhpZ2hsaWdodFVuaWZvcm1zID0ge1xyXG4gIGNvbG9yOiB7IHZhbHVlOiBDb2xvciB9LFxyXG4gIHByb2pQb3NpdGlvbjogeyB2YWx1ZTogVmVjdG9yMyB9O1xyXG4gIGxpZ2h0TWF0cml4OiB7IHZhbHVlOiBNYXRyaXg0IH07XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlDYW1lcmEgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSByb290U2NlbmU6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByb290OiBPYmplY3QzRCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgcGl2b3Q6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBib3g6IE1lc2ggfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGVkZ2VzOiBNZXNoIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBwcm9qZWN0b3I6IFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gIHByaXZhdGUgaGlnaGxpZ2h0OiBNZXNoIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBoaWdobGlnaHRVbmlmb3JtczogSGlnaGxpZ2h0VW5pZm9ybXMgPSB7XHJcbiAgICBjb2xvcjoge3ZhbHVlOiBuZXcgQ29sb3IoKX0sXHJcbiAgICBwcm9qUG9zaXRpb246IHt2YWx1ZTogbmV3IFZlY3RvcjMoKX0sXHJcbiAgICBsaWdodE1hdHJpeDoge3ZhbHVlOiBuZXcgTWF0cml4NCgpfSxcclxuICB9XHJcbiAgcHJpdmF0ZSBtaXhlcjogQW5pbWF0aW9uTWl4ZXI7XHJcblxyXG4gIG92ZXJyaWRlIGlucHV0czogSW5wdXRzID0ge1xyXG4gICAgbmVhclBsYW5lOiAwLjEsXHJcbiAgICBmYXJQbGFuZTogNCxcclxuICAgIGhvcml6b250YWxGT1Y6IDgwLFxyXG4gICAgYXNwZWN0OiAxNiAvIDksXHJcbiAgICBsb2NhbFBvc2l0aW9uOiB7eDogMCwgeTogMCwgejogMH0sXHJcbiAgICBsb2NhbFJvdGF0aW9uOiB7eDogMCwgeTogMCwgejogMH0sXHJcbiAgICBjb2xvcjogMHhmZmZmZmYsXHJcbiAgICBwYW5QZXJpb2Q6IDIwLFxyXG4gICAgcGFuQW5nbGU6IDE4MCxcclxuICB9O1xyXG5cclxuICBvdmVycmlkZSBvdXRwdXRzOiBhbnkgPSB7fTtcclxuICBwcml2YXRlIGNvbXBvbmVudDogU2NlbmVDb21wb25lbnQ7XHJcblxyXG5cclxuICBzZXRDb21wb25lbnQoY29tcG9uZW50OiBTY2VuZUNvbXBvbmVudCkge1xyXG4gICAgY29tcG9uZW50Lm9uVGljayA9IHRoaXMub25UaWNrLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbXBvbmVudC5jb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgc2V0Um9vdFNjZW5lKHJvb3RTY2VuZTogT2JqZWN0M0QpIHtcclxuICAgIHRoaXMucm9vdFNjZW5lID0gcm9vdFNjZW5lO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgb25Jbml0KG1vZGVsTm9kZT86IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcclxuICAgICAgdGhpcy5jb250ZXh0ID0ge1xyXG4gICAgICAgIHJvb3Q6IG1vZGVsTm9kZVxyXG4gICAgICB9IGFzIENvbXBvbmVudENvbnRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yb290ID0gbmV3IE9iamVjdDNEKCk7XHJcbiAgICB0aGlzLnBpdm90ID0gbmV3IE9iamVjdDNEKCk7XHJcbiAgICB0aGlzLnJvb3QuYWRkKHRoaXMucGl2b3QpO1xyXG4gICAgdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QgPSB0aGlzLnJvb3Q7XHJcblxyXG4gICAgdGhpcy5yb290LnBvc2l0aW9uLnNldCh0aGlzLmlucHV0cy5sb2NhbFBvc2l0aW9uLngsIHRoaXMuaW5wdXRzLmxvY2FsUG9zaXRpb24ueSwgdGhpcy5pbnB1dHMubG9jYWxQb3NpdGlvbi56KTtcclxuXHJcbiAgICBjb25zdCBldWxlciA9IG5ldyBFdWxlcih0aGlzLmlucHV0cy5sb2NhbFJvdGF0aW9uLnggKiBNYXRoLlBJIC8gMTgwLCB0aGlzLmlucHV0cy5sb2NhbFJvdGF0aW9uLnkgKiBNYXRoLlBJIC8gMTgwLCB0aGlzLmlucHV0cy5sb2NhbFJvdGF0aW9uLnogKiBNYXRoLlBJIC8gMTgwLCAnWVhaJyk7XHJcbiAgICB0aGlzLnBpdm90LnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKGV1bGVyKTtcclxuXHJcbiAgICBjb25zdCBhc3BlY3QgPSB0aGlzLmlucHV0cy5hc3BlY3Q7XHJcbiAgICBjb25zdCBERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcclxuICAgIGNvbnN0IFJBRDJERUcgPSAxIC8gREVHMlJBRDtcclxuICAgIGNvbnN0IHZlcnRpY2FsRk9WID0gMiAqIE1hdGguYXRhbigxIC8gYXNwZWN0ICogTWF0aC50YW4oMC41ICogdGhpcy5pbnB1dHMuaG9yaXpvbnRhbEZPViAqIERFRzJSQUQpKSAqIFJBRDJERUc7XHJcbiAgICB0aGlzLnByb2plY3RvciA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh2ZXJ0aWNhbEZPViwgYXNwZWN0LCB0aGlzLmlucHV0cy5uZWFyUGxhbmUsIHRoaXMuaW5wdXRzLmZhclBsYW5lKTtcclxuICAgIC8vIG9yaWVudGF0aW9uIG9mIHRoZSBwcm9qZWN0b3IgaXMgaGFuZGxlZCBieSB0aGUgcGl2b3RcclxuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMucHJvamVjdG9yKTtcclxuXHJcbiAgICB0aGlzLm1ha2VGcnVzdHVtVmlzdWFscygpO1xyXG5cclxuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMuYm94KTtcclxuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMuZWRnZXMpO1xyXG5cclxuICAgIHRoaXMubWFrZUhpZ2hsaWdodCgpO1xyXG5cclxuICAgIC8vIGF0dGFjaCBoaWdoaWdodGluZyB0byB0aGUgbWVzaCBpdCByZXByZXNlbnRzXHJcbiAgICAvLyBUT0RPIChzY2VuZSBxdWVyeSk6IHRoaXMgaXMgdmVyeSBicml0dGxlIGJ1dCBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIHNvbWV0aGluZyB0byBhIHJvb20gb2YgdGhlIG1vZGVsXHJcbiAgICAvLyB0aGlzLm91dHB1dHMub2JqZWN0Um9vdC5wYXJlbnQucGFyZW50LmFkZCh0aGlzLmhpZ2hsaWdodCk7IC8vIGxlZ2FjeSBtYXR0ZXJwb3J0IGNvZGVcclxuICAgIHRoaXMucm9vdFNjZW5lLmFkZCh0aGlzLmhpZ2hsaWdodCk7XHJcblxyXG4gICAgLy8gY3JlYXRlIHRoZSBhbmltYXRpb24gbWl4ZXIgdG8gcm90YXRlIHRoZSBjYW1lcmFcclxuICAgIHRoaXMubWFrZUFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIG92ZXJyaWRlIG9uVGljayhkZWx0YTogbnVtYmVyKSB7XHJcbiAgICB1cGRhdGVIaWdobGlnaHRVbmlmb3Jtcyh0aGlzLnByb2plY3RvciwgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcyk7XHJcbiAgICBpZiAodGhpcy5taXhlcikge1xyXG4gICAgICB0aGlzLm1peGVyLnVwZGF0ZShkZWx0YSAvIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ICYmIHRoaXMuaGlnaGxpZ2h0LnBhcmVudCkge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodC5wYXJlbnQucmVtb3ZlKHRoaXMuaGlnaGxpZ2h0KTtcclxuICAgICAgKHRoaXMuaGlnaGxpZ2h0Lm1hdGVyaWFsIGFzIFNoYWRlck1hdGVyaWFsKS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lZGdlcykge1xyXG4gICAgICB0aGlzLmVkZ2VzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICAgICAgKHRoaXMuZWRnZXMubWF0ZXJpYWwgYXMgTGluZUJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmJveCkge1xyXG4gICAgICB0aGlzLmJveC5nZW9tZXRyeS5kaXNwb3NlKCk7XHJcbiAgICAgICh0aGlzLmJveC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRnJ1c3R1bVZpc3VhbHMoKSB7XHJcbiAgICBpZiAodGhpcy5ib3gpIHtcclxuICAgICAgdGhpcy5yb290LnJlbW92ZSh0aGlzLmJveCk7XHJcbiAgICAgICh0aGlzLmJveC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xyXG4gICAgICAodGhpcy5ib3guZ2VvbWV0cnkgYXMgQm94R2VvbWV0cnkpLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5ib3ggPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZWRnZXMpIHtcclxuICAgICAgdGhpcy5yb290LnJlbW92ZSh0aGlzLmVkZ2VzKTtcclxuICAgICAgKHRoaXMuZWRnZXMubWF0ZXJpYWwgYXMgTGluZUJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcclxuICAgICAgKHRoaXMuZWRnZXMuZ2VvbWV0cnkgYXMgRWRnZXNHZW9tZXRyeSkuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLmVkZ2VzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBlZGdlc1RvQ3lsaW5kZXJzKGVkZ2VzR2VvbWV0cnk6IEVkZ2VzR2VvbWV0cnksIHRoaWNrbmVzczogbnVtYmVyKSB7XHJcbiAgICAgIGNvbnN0IHtwb3NpdGlvbn0gPSBlZGdlc0dlb21ldHJ5LmF0dHJpYnV0ZXM7XHJcbiAgICAgIGNvbnN0IHthcnJheSwgY291bnR9ID0gcG9zaXRpb247XHJcbiAgICAgIGNvbnN0IHIgPSB0aGlja25lc3MgLyAyO1xyXG4gICAgICBjb25zdCBnZW9tcyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50ICogMyAtIDE7IGkgKz0gNikge1xyXG4gICAgICAgIGNvbnN0IGEgPSBuZXcgVmVjdG9yMyhhcnJheVtpXSwgYXJyYXlbaSArIDFdLCBhcnJheVtpICsgMl0pO1xyXG4gICAgICAgIGNvbnN0IGIgPSBuZXcgVmVjdG9yMyhhcnJheVtpICsgM10sIGFycmF5W2kgKyA0XSwgYXJyYXlbaSArIDVdKTtcclxuXHJcbiAgICAgICAgY29uc3QgdmVjID0gbmV3IFZlY3RvcjMoKS5zdWJWZWN0b3JzKGIsIGEpO1xyXG4gICAgICAgIGNvbnN0IGxlbiA9IHZlYy5sZW5ndGgoKTtcclxuICAgICAgICBjb25zdCBnZW9tID0gbmV3IEN5bGluZGVyQnVmZmVyR2VvbWV0cnkociwgciwgbGVuLCA4KTtcclxuICAgICAgICBnZW9tLnRyYW5zbGF0ZSgwLCBsZW4gLyAyLCAwKTtcclxuICAgICAgICBnZW9tLnJvdGF0ZVgoTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgIGdlb20ubG9va0F0KHZlYyk7XHJcbiAgICAgICAgZ2VvbS50cmFuc2xhdGUoYS54LCBhLnksIGEueik7XHJcbiAgICAgICAgZ2VvbXMucHVzaChnZW9tKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBBUEkgdG8gYmUgdXBkYXRlZCBpbiBidW5kbGUgLSBKU1NESy0xMjIyXHJcbiAgICAgIHJldHVybiBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcyhnZW9tcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZnJ1c3R1bUxlbmd0aCA9IHRoaXMuaW5wdXRzLmZhclBsYW5lIC0gdGhpcy5pbnB1dHMubmVhclBsYW5lO1xyXG4gICAgY29uc3QgYm94R2VvbWV0cnk6IEJveEdlb21ldHJ5ID0gbmV3IEJveEdlb21ldHJ5KDIsIDIsIGZydXN0dW1MZW5ndGgpO1xyXG4gICAgY29uc3QgaGFsZkhBbmdsZSA9IHRoaXMuaW5wdXRzLmhvcml6b250YWxGT1YgKiAwLjUgKiBNYXRoLlBJIC8gMTgwO1xyXG4gICAgY29uc3QgbmVhckhhbGZXaWR0aCA9IE1hdGgudGFuKGhhbGZIQW5nbGUpICogdGhpcy5pbnB1dHMubmVhclBsYW5lO1xyXG4gICAgY29uc3QgZmFySGFsZldpZHRoID0gTWF0aC50YW4oaGFsZkhBbmdsZSkgKiB0aGlzLmlucHV0cy5mYXJQbGFuZTtcclxuICAgIGNvbnN0IG5lYXJIYWxmSGVpZ2h0ID0gbmVhckhhbGZXaWR0aCAvIHRoaXMuaW5wdXRzLmFzcGVjdDtcclxuICAgIGNvbnN0IGZhckhhbGZIZWlnaHQgPSBmYXJIYWxmV2lkdGggLyB0aGlzLmlucHV0cy5hc3BlY3Q7XHJcblxyXG4gICAgY29uc3QgcG9zaXRpb25zID0gYm94R2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmNvdW50OyBpKyspIHtcclxuICAgICAgY29uc3QgdmVydGV4WiA9IHBvc2l0aW9ucy5nZXRaKGkpO1xyXG4gICAgICBjb25zdCB2ZXJ0ZXhYID0gcG9zaXRpb25zLmdldFgoaSk7XHJcbiAgICAgIGNvbnN0IHZlcnRleFkgPSBwb3NpdGlvbnMuZ2V0WShpKTtcclxuICAgICAgaWYgKHZlcnRleFogPiAwKSB7XHJcbiAgICAgICAgLy8gYmFjayBvZiB0aGUgY2FtZXJhXHJcbiAgICAgICAgcG9zaXRpb25zLnNldFgoaSwgdmVydGV4WCAqIG5lYXJIYWxmV2lkdGgpXHJcbiAgICAgICAgcG9zaXRpb25zLnNldFkoaSwgdmVydGV4WSAqIG5lYXJIYWxmSGVpZ2h0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBmcm9udCBvZiB0aGUgY2FtZXJhXHJcbiAgICAgICAgcG9zaXRpb25zLnNldFgoaSwgdmVydGV4WCAqIGZhckhhbGZXaWR0aClcclxuICAgICAgICBwb3NpdGlvbnMuc2V0WShpLCB2ZXJ0ZXhZICogZmFySGFsZkhlaWdodCk7XHJcbiAgICAgIH1cclxuICAgICAgcG9zaXRpb25zLnNldFooaSwgdmVydGV4WiAtIDAuNSAqIGZydXN0dW1MZW5ndGggLSB0aGlzLmlucHV0cy5uZWFyUGxhbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBib3hNYXRlcmlhbDogTWVzaEJhc2ljTWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogdGhpcy5pbnB1dHMuY29sb3IsXHJcbiAgICAgIG9wYWNpdHk6IDAuMDUsXHJcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICBzaWRlOiBCYWNrU2lkZSxcclxuICAgICAgYmxlbmRpbmc6IE5vcm1hbEJsZW5kaW5nLFxyXG4gICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5ib3ggPSBuZXcgTWVzaChib3hHZW9tZXRyeSwgYm94TWF0ZXJpYWwpO1xyXG4gICAgY29uc3QgZWRnZXNHZW9tZXRyeSA9IGVkZ2VzVG9DeWxpbmRlcnMobmV3IEVkZ2VzR2VvbWV0cnkoYm94R2VvbWV0cnkpLCAwLjAxNSk7XHJcbiAgICB0aGlzLmVkZ2VzID0gbmV3IE1lc2goZWRnZXNHZW9tZXRyeSwgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4ZmZmZmZmLFxyXG4gICAgICBvcGFjaXR5OiAwLjI1LFxyXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgYmxlbmRpbmc6IEFkZGl0aXZlQmxlbmRpbmcsXHJcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IGVkZ2VzR2VvbWV0cnkyID0gZWRnZXNUb0N5bGluZGVycyhuZXcgRWRnZXNHZW9tZXRyeShib3hHZW9tZXRyeSksIDAuMDYpO1xyXG4gICAgY29uc3QgZWRnZXMyID0gbmV3IE1lc2goZWRnZXNHZW9tZXRyeTIsIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiB0aGlzLmlucHV0cy5jb2xvcixcclxuICAgICAgb3BhY2l0eTogMC4wNSxcclxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgIGJsZW5kaW5nOiBBZGRpdGl2ZUJsZW5kaW5nLFxyXG4gICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcclxuICAgIH0pKTtcclxuICAgIHRoaXMucGl2b3QuYWRkKGVkZ2VzMik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VIaWdobGlnaHQoKSB7XHJcblxyXG4gICAgLy8gVE9ETyAoc2NlbmUgcXVlcnkpOiB0aGlzIGlzIHZlcnkgYnJpdHRsZSBhbmQgaGFyZGNvZGVkIGJ1dCBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IHJvb20gZ2VvbWV0cmllcyB1bnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHdheSB0byBxdWVyeSB0aGUgc2NlbmUgZ3JhcGhcclxuICAgIC8vIGNvbnN0IGZsb29yTWVzaCA9IHRoaXMub3V0cHV0cy5vYmplY3RSb290LnBhcmVudC5wYXJlbnQuZ2V0T2JqZWN0QnlOYW1lKCdGbG9vck1lc2g6MCcpOyAvLyBsZWdhY3kgbWF0dGVycG9ydCBjb2RlLi5cclxuICAgIGNvbnN0IGZsb29yTWVzaCA9IHRoaXMucm9vdFNjZW5lLmdldE9iamVjdEJ5TmFtZSgnRmxvb3JNZXNoOjAnKTtcclxuICAgIGNvbnN0IHJvb21NZXNoID0gZmxvb3JNZXNoLmNoaWxkcmVuWzBdIGFzIE1lc2g7XHJcblxyXG4gICAgdXBkYXRlSGlnaGxpZ2h0VW5pZm9ybXModGhpcy5wcm9qZWN0b3IsIHRoaXMuaGlnaGxpZ2h0VW5pZm9ybXMpO1xyXG4gICAgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcy5jb2xvci52YWx1ZS5zZXRIZXgodGhpcy5pbnB1dHMuY29sb3IpO1xyXG5cclxuICAgIGNvbnN0IHNoYWRlciA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcbiAgICAgIHBvbHlnb25PZmZzZXQ6IHRydWUsXHJcbiAgICAgIHBvbHlnb25PZmZzZXRVbml0czogLTAuMSxcclxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgIHVuaWZvcm1zOiB0aGlzLmhpZ2hsaWdodFVuaWZvcm1zLFxyXG4gICAgICB2ZXJ0ZXhTaGFkZXI6IHZlcnRleFNoYWRlcigpLFxyXG4gICAgICBmcmFnbWVudFNoYWRlcjogZnJhZ21lbnRTaGFkZXIoKSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGEgbWVzaCB0byByZXByZXNlbnQgdGhlIFwiaGlnaGxpZ2h0XCJcclxuICAgIHRoaXMuaGlnaGxpZ2h0ID0gbmV3IE1lc2gocm9vbU1lc2guZ2VvbWV0cnksIHNoYWRlcik7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFuaW1hdGlvbigpIHtcclxuXHJcbiAgICAvLyBwcmVhcHBseSB0aGUgaW5pdGlhbCByb3RhdGlvbiBvZiB0aGUgcm9vdCBzbyB0aGF0IHBhbkFuZ2xlIGlzIHJlbGF0aXZlIHRvIGl0LlxyXG5cclxuICAgIC8vIFRPRE86IGZpeCBpdCFcclxuICAgIGNvbnN0IHJvb3RSb3RhdGlvbiA9IHRoaXMuY29udGV4dC5yb290LnF1YXRlcm5pb247IC8vIGxlZ2FjeSBtYXR0ZXJwb3J0IGNvZGVcclxuICAgIC8vIGNvbnN0IHJvb3RSb3RhdGlvbiA9IHRoaXMucm9vdC5xdWF0ZXJuaW9uO1xyXG5cclxuICAgIGNvbnN0IHlBeGlzID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcbiAgICBjb25zdCBmcmFtZTAgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21BeGlzQW5nbGUoeUF4aXMsIDApLnByZW11bHRpcGx5KHJvb3RSb3RhdGlvbik7XHJcbiAgICBjb25zdCBmcmFtZTEgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21BeGlzQW5nbGUoeUF4aXMsIHRoaXMuaW5wdXRzLnBhbkFuZ2xlKS5wcmVtdWx0aXBseShyb290Um90YXRpb24pO1xyXG5cclxuICAgIC8vIGEgdHJhY2sgdGhhdCBoYXMgZGVsYXlzIGF0IHRoZSBzdGFydCBhbmQgZW5kIGZvciA1JSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAgICBjb25zdCB0cmFjayA9IG5ldyBRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjaygnLnF1YXRlcm5pb24nLCBbXHJcbiAgICAgIDAsIHRoaXMuaW5wdXRzLnBhblBlcmlvZCAqIDAuMDUsIHRoaXMuaW5wdXRzLnBhblBlcmlvZCAqIDAuOTUsIHRoaXMuaW5wdXRzLnBhblBlcmlvZFxyXG4gICAgXSwgW1xyXG4gICAgICBmcmFtZTAueCwgZnJhbWUwLnksIGZyYW1lMC56LCBmcmFtZTAudyxcclxuICAgICAgZnJhbWUwLngsIGZyYW1lMC55LCBmcmFtZTAueiwgZnJhbWUwLncsXHJcbiAgICAgIGZyYW1lMS54LCBmcmFtZTEueSwgZnJhbWUxLnosIGZyYW1lMS53LFxyXG4gICAgICBmcmFtZTEueCwgZnJhbWUxLnksIGZyYW1lMS56LCBmcmFtZTEudyxcclxuICAgIF0pO1xyXG5cclxuICAgIGNvbnN0IGNsaXAgPSBuZXcgQW5pbWF0aW9uQ2xpcCgncGFubmluZycsIHRoaXMuaW5wdXRzLnBhblBlcmlvZCwgW3RyYWNrXSk7XHJcblxyXG4gICAgLy8gVGhlcmUgaXMgbm8gYXBpIHRvIGNoYW5nZSB0aGUgcm90YXRpb24gb2YgdGhlIHJvb3QsIHNvIHdlIHdpbGwgdXNlIGEgcHJpdmF0ZSBwcm9wZXJ0eSB0byBhY2Nlc3MgdGhlIE9iamVjdDNELlxyXG4gICAgLy8gVGhpcyB3aWxsIGxpa2VseSBuZWVkIHRvIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxyXG4gICAgdGhpcy5taXhlciA9IG5ldyBBbmltYXRpb25NaXhlcigodGhpcy5jb250ZXh0LnJvb3QgYXMgYW55KS5vYmozRCk7IC8vIGxlZ2Fjb2RlIGNvZGUgbWF0dGVycG9ydFxyXG4gICAgLy8gdGhpcy5taXhlciA9IG5ldyBBbmltYXRpb25NaXhlcih0aGlzLnJvb3QpO1xyXG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5taXhlci5jbGlwQWN0aW9uKGNsaXApO1xyXG4gICAgYWN0aW9uLmxvb3AgPSBMb29wUGluZ1Bvbmc7XHJcbiAgICBhY3Rpb24ucGxheSgpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZlcnRleFNoYWRlcigpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgXHJcbiAgICB1bmlmb3JtIG1hdDQgbGlnaHRNYXRyaXg7XHJcblxyXG4gICAgdmFyeWluZyB2ZWM0IHZMaWdodENvb3JkcztcclxuXHJcbiAgICB2b2lkIG1haW4oKSB7XHJcbiAgICAgIC8vIGNyZWF0ZSBhIFVWIHJlZ2lvbiBbMCwxXSB4IFswLDFdIHRvIHJlcHJlc2VudCB3aGF0IHRoZSBsaWdodE1hdHJpeCBcInNlZXNcIlxyXG4gICAgICB2TGlnaHRDb29yZHMgPSBsaWdodE1hdHJpeCAqICBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XHJcbiAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XHJcbiAgICB9XHJcbiAgYDtcclxufVxyXG5cclxuZnVuY3Rpb24gZnJhZ21lbnRTaGFkZXIoKSB7XHJcbiAgcmV0dXJuIGBcclxuICAgIHVuaWZvcm0gdmVjMyBjb2xvcjtcclxuXHJcbiAgICB2YXJ5aW5nIHZlYzQgdkxpZ2h0Q29vcmRzO1xyXG5cclxuICAgIHZvaWQgbWFpbigpIHtcclxuICAgICAgdmVjMiBsaWdodFVWID0gdkxpZ2h0Q29vcmRzLnh5IC8gdkxpZ2h0Q29vcmRzLnc7XHJcbiAgICAgIGZsb2F0IGluVmlldyA9IGZsb2F0KG1heChsaWdodFVWLngsIGxpZ2h0VVYueSkgPD0gMS4wICYmIG1pbihsaWdodFVWLngsIGxpZ2h0VVYueSkgPj0gMC4wICYmIHZMaWdodENvb3Jkcy56ID4gMC4wKTtcclxuXHJcbiAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIG1pbihpblZpZXcsIDAuMikpO1xyXG4gICAgfVxyXG4gIGA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZUhpZ2hsaWdodFVuaWZvcm1zKHByb2plY3RvcjogUGVyc3BlY3RpdmVDYW1lcmEsIHVuaWZvcm1zOiBIaWdobGlnaHRVbmlmb3Jtcykge1xyXG4gIHByb2plY3Rvci5nZXRXb3JsZFBvc2l0aW9uKHVuaWZvcm1zLnByb2pQb3NpdGlvbi52YWx1ZSk7XHJcblxyXG4gIC8vIHNpbWlsYXIgdG8gYSBzaGFkb3cgbWF0cml4LCBidXQgd2UncmUgdXNpbmcgaXQgYXMgYSBcInJlY3Rhbmd1bGFyXCIgc3BvdGxpZ2h0XHJcbiAgLy8gW2xpZ2h0Qmlhc10gKiBbcHJvamVjdGlvbl0gKiBbdmlld01hdHJpeF1cclxuICB1bmlmb3Jtcy5saWdodE1hdHJpeC52YWx1ZS5tYWtlU2NhbGUoMC41LCAwLjUsIDAuNSk7XHJcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUuc2V0UG9zaXRpb24obmV3IFZlY3RvcjMoMC41LCAwLjUsIDAuNSkpXHJcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUubXVsdGlwbHlNYXRyaWNlcyh1bmlmb3Jtcy5saWdodE1hdHJpeC52YWx1ZSwgcHJvamVjdG9yLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm11bHRpcGx5TWF0cmljZXModW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUsIHByb2plY3Rvci5tYXRyaXhXb3JsZEludmVyc2UpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2VjdXJpdHlDYW1lcmFUeXBlID0gJ21wLnNlY3VyaXR5Q2FtZXJhJztcclxuZXhwb3J0IGNvbnN0IG1ha2VTZWN1cml0eUNhbWVyYSA9IGZ1bmN0aW9uICgpIHtcclxuICByZXR1cm4gbmV3IFNlY3VyaXR5Q2FtZXJhKCk7XHJcbn1cclxuIl19
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlDYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9zZWN1cml0eS1jYW1lcmEvU2VjdXJpdHlDYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsY0FBYyxFQUVkLGFBQWEsRUFDYixjQUFjLEVBQ2QsS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYixZQUFZLEVBQ2IsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEtBQUssbUJBQW1CLE1BQU0saURBQWlELENBQUE7QUFDdEYsT0FBTyxFQUFtQixjQUFjLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQXFCbkYsTUFBTSxPQUFPLGNBQWUsU0FBUSxjQUFjO0lBQWxEOztRQUNVLGNBQVMsR0FBb0IsSUFBSSxDQUFDO1FBQ2xDLFNBQUksR0FBb0IsSUFBSSxDQUFDO1FBQzdCLFVBQUssR0FBb0IsSUFBSSxDQUFDO1FBQzlCLFFBQUcsR0FBZ0IsSUFBSSxDQUFDO1FBQ3hCLFVBQUssR0FBZ0IsSUFBSSxDQUFDO1FBRTFCLGNBQVMsR0FBZ0IsSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFzQjtZQUM3QyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBQztZQUMzQixZQUFZLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBQztZQUNwQyxXQUFXLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUs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QUE4RTtJQUM5RSw0Q0FBNEM7SUFDNUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsRSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE9iamVjdDNELFxuICBNZXNoLFxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXG4gIEJveEdlb21ldHJ5LFxuICBTaGFkZXJNYXRlcmlhbCxcbiAgTGluZUJhc2ljTWF0ZXJpYWwsXG4gIEVkZ2VzR2VvbWV0cnksXG4gIEFuaW1hdGlvbk1peGVyLFxuICBDb2xvcixcbiAgTWF0cml4NCxcbiAgVmVjdG9yMyxcbiAgRXVsZXIsXG4gIEN5bGluZGVyQnVmZmVyR2VvbWV0cnksXG4gIEJhY2tTaWRlLFxuICBOb3JtYWxCbGVuZGluZyxcbiAgQWRkaXRpdmVCbGVuZGluZyxcbiAgUXVhdGVybmlvbixcbiAgUXVhdGVybmlvbktleWZyYW1lVHJhY2ssXG4gIEFuaW1hdGlvbkNsaXAsXG4gIExvb3BQaW5nUG9uZ1xufSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgKiBhcyBCdWZmZXJHZW9tZXRyeVV0aWxzIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS91dGlscy9CdWZmZXJHZW9tZXRyeVV0aWxzLmpzJ1xuaW1wb3J0IHtDb21wb25lbnRDb250ZXh0LCBTY2VuZUNvbXBvbmVudH0gZnJvbSAnLi4vc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50JztcblxuaW50ZXJmYWNlIElucHV0cyB7XG4gIG5lYXJQbGFuZTogbnVtYmVyO1xuICBmYXJQbGFuZTogbnVtYmVyLFxuICBob3Jpem9udGFsRk9WOiBudW1iZXIsXG4gIGFzcGVjdDogbnVtYmVyLFxuICBsb2NhbFBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IH07XG4gIGxvY2FsUm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcjsgfTtcbiAgY29sb3I6IG51bWJlcjtcbiAgcGFuUGVyaW9kOiBudW1iZXI7XG4gIHBhbkFuZ2xlOiBudW1iZXI7XG59XG5cbnR5cGUgSGlnaGxpZ2h0VW5pZm9ybXMgPSB7XG4gIGNvbG9yOiB7IHZhbHVlOiBDb2xvciB9LFxuICBwcm9qUG9zaXRpb246IHsgdmFsdWU6IFZlY3RvcjMgfTtcbiAgbGlnaHRNYXRyaXg6IHsgdmFsdWU6IE1hdHJpeDQgfTtcbn1cblxuXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlDYW1lcmEgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcm9vdFNjZW5lOiBPYmplY3QzRCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJvb3Q6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGl2b3Q6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYm94OiBNZXNoIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZWRnZXM6IE1lc2ggfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcm9qZWN0b3I6IFBlcnNwZWN0aXZlQ2FtZXJhO1xuICBwcml2YXRlIGhpZ2hsaWdodDogTWVzaCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGhpZ2hsaWdodFVuaWZvcm1zOiBIaWdobGlnaHRVbmlmb3JtcyA9IHtcbiAgICBjb2xvcjoge3ZhbHVlOiBuZXcgQ29sb3IoKX0sXG4gICAgcHJvalBvc2l0aW9uOiB7dmFsdWU6IG5ldyBWZWN0b3IzKCl9LFxuICAgIGxpZ2h0TWF0cml4OiB7dmFsdWU6IG5ldyBNYXRyaXg0KCl9LFxuICB9XG4gIHByaXZhdGUgbWl4ZXI6IEFuaW1hdGlvbk1peGVyO1xuXG4gIG92ZXJyaWRlIGlucHV0czogSW5wdXRzID0ge1xuICAgIG5lYXJQbGFuZTogMC4xLFxuICAgIGZhclBsYW5lOiA0LFxuICAgIGhvcml6b250YWxGT1Y6IDgwLFxuICAgIGFzcGVjdDogMTYgLyA5LFxuICAgIGxvY2FsUG9zaXRpb246IHt4OiAwLCB5OiAwLCB6OiAwfSxcbiAgICBsb2NhbFJvdGF0aW9uOiB7eDogMCwgeTogMCwgejogMH0sXG4gICAgY29sb3I6IDB4ZmZmZmZmLFxuICAgIHBhblBlcmlvZDogMjAsXG4gICAgcGFuQW5nbGU6IDE4MCxcbiAgfTtcblxuICBvdmVycmlkZSBvdXRwdXRzOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBjb21wb25lbnQ6IFNjZW5lQ29tcG9uZW50O1xuXG5cbiAgc2V0Q29tcG9uZW50KGNvbXBvbmVudDogU2NlbmVDb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQub25UaWNrID0gdGhpcy5vblRpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb21wb25lbnQuY29udGV4dDtcbiAgfVxuXG4gIHNldFJvb3RTY2VuZShyb290U2NlbmU6IE9iamVjdDNEKSB7XG4gICAgdGhpcy5yb290U2NlbmUgPSByb290U2NlbmU7XG4gIH1cblxuICBvdmVycmlkZSBvbkluaXQobW9kZWxOb2RlPzogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgcm9vdDogbW9kZWxOb2RlXG4gICAgICB9IGFzIENvbXBvbmVudENvbnRleHQ7XG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IE9iamVjdDNEKCk7XG4gICAgdGhpcy5waXZvdCA9IG5ldyBPYmplY3QzRCgpO1xuICAgIHRoaXMucm9vdC5hZGQodGhpcy5waXZvdCk7XG4gICAgdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QgPSB0aGlzLnJvb3Q7XG5cbiAgICB0aGlzLnJvb3QucG9zaXRpb24uc2V0KHRoaXMuaW5wdXRzLmxvY2FsUG9zaXRpb24ueCwgdGhpcy5pbnB1dHMubG9jYWxQb3NpdGlvbi55LCB0aGlzLmlucHV0cy5sb2NhbFBvc2l0aW9uLnopO1xuXG4gICAgY29uc3QgZXVsZXIgPSBuZXcgRXVsZXIodGhpcy5pbnB1dHMubG9jYWxSb3RhdGlvbi54ICogTWF0aC5QSSAvIDE4MCwgdGhpcy5pbnB1dHMubG9jYWxSb3RhdGlvbi55ICogTWF0aC5QSSAvIDE4MCwgdGhpcy5pbnB1dHMubG9jYWxSb3RhdGlvbi56ICogTWF0aC5QSSAvIDE4MCwgJ1lYWicpO1xuICAgIHRoaXMucGl2b3QucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIoZXVsZXIpO1xuXG4gICAgY29uc3QgYXNwZWN0ID0gdGhpcy5pbnB1dHMuYXNwZWN0O1xuICAgIGNvbnN0IERFRzJSQUQgPSBNYXRoLlBJIC8gMTgwO1xuICAgIGNvbnN0IFJBRDJERUcgPSAxIC8gREVHMlJBRDtcbiAgICBjb25zdCB2ZXJ0aWNhbEZPViA9IDIgKiBNYXRoLmF0YW4oMSAvIGFzcGVjdCAqIE1hdGgudGFuKDAuNSAqIHRoaXMuaW5wdXRzLmhvcml6b250YWxGT1YgKiBERUcyUkFEKSkgKiBSQUQyREVHO1xuICAgIHRoaXMucHJvamVjdG9yID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHZlcnRpY2FsRk9WLCBhc3BlY3QsIHRoaXMuaW5wdXRzLm5lYXJQbGFuZSwgdGhpcy5pbnB1dHMuZmFyUGxhbmUpO1xuICAgIC8vIG9yaWVudGF0aW9uIG9mIHRoZSBwcm9qZWN0b3IgaXMgaGFuZGxlZCBieSB0aGUgcGl2b3RcbiAgICB0aGlzLnBpdm90LmFkZCh0aGlzLnByb2plY3Rvcik7XG5cbiAgICB0aGlzLm1ha2VGcnVzdHVtVmlzdWFscygpO1xuXG4gICAgdGhpcy5waXZvdC5hZGQodGhpcy5ib3gpO1xuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMuZWRnZXMpO1xuXG4gICAgdGhpcy5tYWtlSGlnaGxpZ2h0KCk7XG5cbiAgICAvLyBhdHRhY2ggaGlnaGlnaHRpbmcgdG8gdGhlIG1lc2ggaXQgcmVwcmVzZW50c1xuICAgIC8vIFRPRE8gKHNjZW5lIHF1ZXJ5KTogdGhpcyBpcyB2ZXJ5IGJyaXR0bGUgYnV0IGlzIHRoZSBvbmx5IHdheSB0byBhdHRhY2ggc29tZXRoaW5nIHRvIGEgcm9vbSBvZiB0aGUgbW9kZWxcbiAgICAvLyB0aGlzLm91dHB1dHMub2JqZWN0Um9vdC5wYXJlbnQucGFyZW50LmFkZCh0aGlzLmhpZ2hsaWdodCk7IC8vIGxlZ2FjeSBtYXR0ZXJwb3J0IGNvZGVcbiAgICB0aGlzLnJvb3RTY2VuZS5hZGQodGhpcy5oaWdobGlnaHQpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBhbmltYXRpb24gbWl4ZXIgdG8gcm90YXRlIHRoZSBjYW1lcmFcbiAgICB0aGlzLm1ha2VBbmltYXRpb24oKTtcbiAgfVxuXG5cbiAgb3ZlcnJpZGUgb25UaWNrKGRlbHRhOiBudW1iZXIpIHtcbiAgICB1cGRhdGVIaWdobGlnaHRVbmlmb3Jtcyh0aGlzLnByb2plY3RvciwgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcyk7XG4gICAgaWYgKHRoaXMubWl4ZXIpIHtcbiAgICAgIHRoaXMubWl4ZXIudXBkYXRlKGRlbHRhIC8gMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmhpZ2hsaWdodCAmJiB0aGlzLmhpZ2hsaWdodC5wYXJlbnQpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0LnBhcmVudC5yZW1vdmUodGhpcy5oaWdobGlnaHQpO1xuICAgICAgKHRoaXMuaGlnaGxpZ2h0Lm1hdGVyaWFsIGFzIFNoYWRlck1hdGVyaWFsKS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkZ2VzKSB7XG4gICAgICB0aGlzLmVkZ2VzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICh0aGlzLmVkZ2VzLm1hdGVyaWFsIGFzIExpbmVCYXNpY01hdGVyaWFsKS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJveCkge1xuICAgICAgdGhpcy5ib3guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgKHRoaXMuYm94Lm1hdGVyaWFsIGFzIE1lc2hCYXNpY01hdGVyaWFsKS5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRnJ1c3R1bVZpc3VhbHMoKSB7XG4gICAgaWYgKHRoaXMuYm94KSB7XG4gICAgICB0aGlzLnJvb3QucmVtb3ZlKHRoaXMuYm94KTtcbiAgICAgICh0aGlzLmJveC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xuICAgICAgKHRoaXMuYm94Lmdlb21ldHJ5IGFzIEJveEdlb21ldHJ5KS5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmJveCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkZ2VzKSB7XG4gICAgICB0aGlzLnJvb3QucmVtb3ZlKHRoaXMuZWRnZXMpO1xuICAgICAgKHRoaXMuZWRnZXMubWF0ZXJpYWwgYXMgTGluZUJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcbiAgICAgICh0aGlzLmVkZ2VzLmdlb21ldHJ5IGFzIEVkZ2VzR2VvbWV0cnkpLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuZWRnZXMgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVkZ2VzVG9DeWxpbmRlcnMoZWRnZXNHZW9tZXRyeTogRWRnZXNHZW9tZXRyeSwgdGhpY2tuZXNzOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHtwb3NpdGlvbn0gPSBlZGdlc0dlb21ldHJ5LmF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCB7YXJyYXksIGNvdW50fSA9IHBvc2l0aW9uO1xuICAgICAgY29uc3QgciA9IHRoaWNrbmVzcyAvIDI7XG4gICAgICBjb25zdCBnZW9tcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudCAqIDMgLSAxOyBpICs9IDYpIHtcbiAgICAgICAgY29uc3QgYSA9IG5ldyBWZWN0b3IzKGFycmF5W2ldLCBhcnJheVtpICsgMV0sIGFycmF5W2kgKyAyXSk7XG4gICAgICAgIGNvbnN0IGIgPSBuZXcgVmVjdG9yMyhhcnJheVtpICsgM10sIGFycmF5W2kgKyA0XSwgYXJyYXlbaSArIDVdKTtcblxuICAgICAgICBjb25zdCB2ZWMgPSBuZXcgVmVjdG9yMygpLnN1YlZlY3RvcnMoYiwgYSk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHZlYy5sZW5ndGgoKTtcbiAgICAgICAgY29uc3QgZ2VvbSA9IG5ldyBDeWxpbmRlckJ1ZmZlckdlb21ldHJ5KHIsIHIsIGxlbiwgOCk7XG4gICAgICAgIGdlb20udHJhbnNsYXRlKDAsIGxlbiAvIDIsIDApO1xuICAgICAgICBnZW9tLnJvdGF0ZVgoTWF0aC5QSSAvIDIpO1xuICAgICAgICBnZW9tLmxvb2tBdCh2ZWMpO1xuICAgICAgICBnZW9tLnRyYW5zbGF0ZShhLngsIGEueSwgYS56KTtcbiAgICAgICAgZ2VvbXMucHVzaChnZW9tKTtcbiAgICAgIH1cbiAgICAgIC8vIEFQSSB0byBiZSB1cGRhdGVkIGluIGJ1bmRsZSAtIEpTU0RLLTEyMjJcbiAgICAgIHJldHVybiBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcyhnZW9tcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZnJ1c3R1bUxlbmd0aCA9IHRoaXMuaW5wdXRzLmZhclBsYW5lIC0gdGhpcy5pbnB1dHMubmVhclBsYW5lO1xuICAgIGNvbnN0IGJveEdlb21ldHJ5OiBCb3hHZW9tZXRyeSA9IG5ldyBCb3hHZW9tZXRyeSgyLCAyLCBmcnVzdHVtTGVuZ3RoKTtcbiAgICBjb25zdCBoYWxmSEFuZ2xlID0gdGhpcy5pbnB1dHMuaG9yaXpvbnRhbEZPViAqIDAuNSAqIE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgbmVhckhhbGZXaWR0aCA9IE1hdGgudGFuKGhhbGZIQW5nbGUpICogdGhpcy5pbnB1dHMubmVhclBsYW5lO1xuICAgIGNvbnN0IGZhckhhbGZXaWR0aCA9IE1hdGgudGFuKGhhbGZIQW5nbGUpICogdGhpcy5pbnB1dHMuZmFyUGxhbmU7XG4gICAgY29uc3QgbmVhckhhbGZIZWlnaHQgPSBuZWFySGFsZldpZHRoIC8gdGhpcy5pbnB1dHMuYXNwZWN0O1xuICAgIGNvbnN0IGZhckhhbGZIZWlnaHQgPSBmYXJIYWxmV2lkdGggLyB0aGlzLmlucHV0cy5hc3BlY3Q7XG5cbiAgICBjb25zdCBwb3NpdGlvbnMgPSBib3hHZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5jb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2ZXJ0ZXhaID0gcG9zaXRpb25zLmdldFooaSk7XG4gICAgICBjb25zdCB2ZXJ0ZXhYID0gcG9zaXRpb25zLmdldFgoaSk7XG4gICAgICBjb25zdCB2ZXJ0ZXhZID0gcG9zaXRpb25zLmdldFkoaSk7XG4gICAgICBpZiAodmVydGV4WiA+IDApIHtcbiAgICAgICAgLy8gYmFjayBvZiB0aGUgY2FtZXJhXG4gICAgICAgIHBvc2l0aW9ucy5zZXRYKGksIHZlcnRleFggKiBuZWFySGFsZldpZHRoKVxuICAgICAgICBwb3NpdGlvbnMuc2V0WShpLCB2ZXJ0ZXhZICogbmVhckhhbGZIZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZnJvbnQgb2YgdGhlIGNhbWVyYVxuICAgICAgICBwb3NpdGlvbnMuc2V0WChpLCB2ZXJ0ZXhYICogZmFySGFsZldpZHRoKVxuICAgICAgICBwb3NpdGlvbnMuc2V0WShpLCB2ZXJ0ZXhZICogZmFySGFsZkhlaWdodCk7XG4gICAgICB9XG4gICAgICBwb3NpdGlvbnMuc2V0WihpLCB2ZXJ0ZXhaIC0gMC41ICogZnJ1c3R1bUxlbmd0aCAtIHRoaXMuaW5wdXRzLm5lYXJQbGFuZSk7XG4gICAgfVxuXG4gICAgdmFyIGJveE1hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogdGhpcy5pbnB1dHMuY29sb3IsXG4gICAgICBvcGFjaXR5OiAwLjA1LFxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICBzaWRlOiBCYWNrU2lkZSxcbiAgICAgIGJsZW5kaW5nOiBOb3JtYWxCbGVuZGluZyxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuYm94ID0gbmV3IE1lc2goYm94R2VvbWV0cnksIGJveE1hdGVyaWFsKTtcbiAgICBjb25zdCBlZGdlc0dlb21ldHJ5ID0gZWRnZXNUb0N5bGluZGVycyhuZXcgRWRnZXNHZW9tZXRyeShib3hHZW9tZXRyeSksIDAuMDE1KTtcbiAgICB0aGlzLmVkZ2VzID0gbmV3IE1lc2goZWRnZXNHZW9tZXRyeSwgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcbiAgICAgIGNvbG9yOiAweGZmZmZmZixcbiAgICAgIG9wYWNpdHk6IDAuMjUsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIGJsZW5kaW5nOiBBZGRpdGl2ZUJsZW5kaW5nLFxuICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZWRnZXNHZW9tZXRyeTIgPSBlZGdlc1RvQ3lsaW5kZXJzKG5ldyBFZGdlc0dlb21ldHJ5KGJveEdlb21ldHJ5KSwgMC4wNik7XG4gICAgY29uc3QgZWRnZXMyID0gbmV3IE1lc2goZWRnZXNHZW9tZXRyeTIsIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogdGhpcy5pbnB1dHMuY29sb3IsXG4gICAgICBvcGFjaXR5OiAwLjA1LFxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICBibGVuZGluZzogQWRkaXRpdmVCbGVuZGluZyxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pKTtcbiAgICB0aGlzLnBpdm90LmFkZChlZGdlczIpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSGlnaGxpZ2h0KCkge1xuXG4gICAgLy8gVE9ETyAoc2NlbmUgcXVlcnkpOiB0aGlzIGlzIHZlcnkgYnJpdHRsZSBhbmQgaGFyZGNvZGVkIGJ1dCBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IHJvb20gZ2VvbWV0cmllcyB1bnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHdheSB0byBxdWVyeSB0aGUgc2NlbmUgZ3JhcGhcbiAgICAvLyBjb25zdCBmbG9vck1lc2ggPSB0aGlzLm91dHB1dHMub2JqZWN0Um9vdC5wYXJlbnQucGFyZW50LmdldE9iamVjdEJ5TmFtZSgnRmxvb3JNZXNoOjAnKTsgLy8gbGVnYWN5IG1hdHRlcnBvcnQgY29kZS4uXG4gICAgY29uc3QgZmxvb3JNZXNoID0gdGhpcy5yb290U2NlbmUuZ2V0T2JqZWN0QnlOYW1lKCdGbG9vck1lc2g6MCcpO1xuICAgIGNvbnN0IHJvb21NZXNoID0gZmxvb3JNZXNoLmNoaWxkcmVuWzBdIGFzIE1lc2g7XG5cbiAgICB1cGRhdGVIaWdobGlnaHRVbmlmb3Jtcyh0aGlzLnByb2plY3RvciwgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcyk7XG4gICAgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcy5jb2xvci52YWx1ZS5zZXRIZXgodGhpcy5pbnB1dHMuY29sb3IpO1xuXG4gICAgY29uc3Qgc2hhZGVyID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcbiAgICAgIHBvbHlnb25PZmZzZXQ6IHRydWUsXG4gICAgICBwb2x5Z29uT2Zmc2V0VW5pdHM6IC0wLjEsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIHVuaWZvcm1zOiB0aGlzLmhpZ2hsaWdodFVuaWZvcm1zLFxuICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXIoKSxcbiAgICAgIGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFNoYWRlcigpLFxuICAgIH0pO1xuXG4gICAgLy8gYSBtZXNoIHRvIHJlcHJlc2VudCB0aGUgXCJoaWdobGlnaHRcIlxuICAgIHRoaXMuaGlnaGxpZ2h0ID0gbmV3IE1lc2gocm9vbU1lc2guZ2VvbWV0cnksIHNoYWRlcik7XG5cblxuICB9XG5cbiAgcHJpdmF0ZSBtYWtlQW5pbWF0aW9uKCkge1xuXG4gICAgLy8gcHJlYXBwbHkgdGhlIGluaXRpYWwgcm90YXRpb24gb2YgdGhlIHJvb3Qgc28gdGhhdCBwYW5BbmdsZSBpcyByZWxhdGl2ZSB0byBpdC5cblxuICAgIC8vIFRPRE86IGZpeCBpdCFcbiAgICBjb25zdCByb290Um90YXRpb24gPSB0aGlzLmNvbnRleHQucm9vdC5xdWF0ZXJuaW9uOyAvLyBsZWdhY3kgbWF0dGVycG9ydCBjb2RlXG4gICAgLy8gY29uc3Qgcm9vdFJvdGF0aW9uID0gdGhpcy5yb290LnF1YXRlcm5pb247XG5cbiAgICBjb25zdCB5QXhpcyA9IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xuICAgIGNvbnN0IGZyYW1lMCA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZSh5QXhpcywgMCkucHJlbXVsdGlwbHkocm9vdFJvdGF0aW9uKTtcbiAgICBjb25zdCBmcmFtZTEgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21BeGlzQW5nbGUoeUF4aXMsIHRoaXMuaW5wdXRzLnBhbkFuZ2xlKS5wcmVtdWx0aXBseShyb290Um90YXRpb24pO1xuXG4gICAgLy8gYSB0cmFjayB0aGF0IGhhcyBkZWxheXMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgZm9yIDUlIG9mIHRoZSBhbmltYXRpb25cbiAgICBjb25zdCB0cmFjayA9IG5ldyBRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjaygnLnF1YXRlcm5pb24nLCBbXG4gICAgICAwLCB0aGlzLmlucHV0cy5wYW5QZXJpb2QgKiAwLjA1LCB0aGlzLmlucHV0cy5wYW5QZXJpb2QgKiAwLjk1LCB0aGlzLmlucHV0cy5wYW5QZXJpb2RcbiAgICBdLCBbXG4gICAgICBmcmFtZTAueCwgZnJhbWUwLnksIGZyYW1lMC56LCBmcmFtZTAudyxcbiAgICAgIGZyYW1lMC54LCBmcmFtZTAueSwgZnJhbWUwLnosIGZyYW1lMC53LFxuICAgICAgZnJhbWUxLngsIGZyYW1lMS55LCBmcmFtZTEueiwgZnJhbWUxLncsXG4gICAgICBmcmFtZTEueCwgZnJhbWUxLnksIGZyYW1lMS56LCBmcmFtZTEudyxcbiAgICBdKTtcblxuICAgIGNvbnN0IGNsaXAgPSBuZXcgQW5pbWF0aW9uQ2xpcCgncGFubmluZycsIHRoaXMuaW5wdXRzLnBhblBlcmlvZCwgW3RyYWNrXSk7XG5cbiAgICAvLyBUaGVyZSBpcyBubyBhcGkgdG8gY2hhbmdlIHRoZSByb3RhdGlvbiBvZiB0aGUgcm9vdCwgc28gd2Ugd2lsbCB1c2UgYSBwcml2YXRlIHByb3BlcnR5IHRvIGFjY2VzcyB0aGUgT2JqZWN0M0QuXG4gICAgLy8gVGhpcyB3aWxsIGxpa2VseSBuZWVkIHRvIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICAgIHRoaXMubWl4ZXIgPSBuZXcgQW5pbWF0aW9uTWl4ZXIoKHRoaXMuY29udGV4dC5yb290IGFzIGFueSkub2JqM0QpOyAvLyBsZWdhY29kZSBjb2RlIG1hdHRlcnBvcnRcbiAgICAvLyB0aGlzLm1peGVyID0gbmV3IEFuaW1hdGlvbk1peGVyKHRoaXMucm9vdCk7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5taXhlci5jbGlwQWN0aW9uKGNsaXApO1xuICAgIGFjdGlvbi5sb29wID0gTG9vcFBpbmdQb25nO1xuICAgIGFjdGlvbi5wbGF5KCk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB2ZXJ0ZXhTaGFkZXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIG1hdDQgbGlnaHRNYXRyaXg7XG5cbiAgICB2YXJ5aW5nIHZlYzQgdkxpZ2h0Q29vcmRzO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgLy8gY3JlYXRlIGEgVVYgcmVnaW9uIFswLDFdIHggWzAsMV0gdG8gcmVwcmVzZW50IHdoYXQgdGhlIGxpZ2h0TWF0cml4IFwic2Vlc1wiXG4gICAgICB2TGlnaHRDb29yZHMgPSBsaWdodE1hdHJpeCAqICBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZnJhZ21lbnRTaGFkZXIoKSB7XG4gIHJldHVybiBgXG4gICAgdW5pZm9ybSB2ZWMzIGNvbG9yO1xuXG4gICAgdmFyeWluZyB2ZWM0IHZMaWdodENvb3JkcztcblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIHZlYzIgbGlnaHRVViA9IHZMaWdodENvb3Jkcy54eSAvIHZMaWdodENvb3Jkcy53O1xuICAgICAgZmxvYXQgaW5WaWV3ID0gZmxvYXQobWF4KGxpZ2h0VVYueCwgbGlnaHRVVi55KSA8PSAxLjAgJiYgbWluKGxpZ2h0VVYueCwgbGlnaHRVVi55KSA+PSAwLjAgJiYgdkxpZ2h0Q29vcmRzLnogPiAwLjApO1xuXG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBtaW4oaW5WaWV3LCAwLjIpKTtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhpZ2hsaWdodFVuaWZvcm1zKHByb2plY3RvcjogUGVyc3BlY3RpdmVDYW1lcmEsIHVuaWZvcm1zOiBIaWdobGlnaHRVbmlmb3Jtcykge1xuICBwcm9qZWN0b3IuZ2V0V29ybGRQb3NpdGlvbih1bmlmb3Jtcy5wcm9qUG9zaXRpb24udmFsdWUpO1xuXG4gIC8vIHNpbWlsYXIgdG8gYSBzaGFkb3cgbWF0cml4LCBidXQgd2UncmUgdXNpbmcgaXQgYXMgYSBcInJlY3Rhbmd1bGFyXCIgc3BvdGxpZ2h0XG4gIC8vIFtsaWdodEJpYXNdICogW3Byb2plY3Rpb25dICogW3ZpZXdNYXRyaXhdXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm1ha2VTY2FsZSgwLjUsIDAuNSwgMC41KTtcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUuc2V0UG9zaXRpb24obmV3IFZlY3RvcjMoMC41LCAwLjUsIDAuNSkpXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm11bHRpcGx5TWF0cmljZXModW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUsIHByb2plY3Rvci5wcm9qZWN0aW9uTWF0cml4KTtcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUubXVsdGlwbHlNYXRyaWNlcyh1bmlmb3Jtcy5saWdodE1hdHJpeC52YWx1ZSwgcHJvamVjdG9yLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzZWN1cml0eUNhbWVyYVR5cGUgPSAnbXAuc2VjdXJpdHlDYW1lcmEnO1xuZXhwb3J0IGNvbnN0IG1ha2VTZWN1cml0eUNhbWVyYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBTZWN1cml0eUNhbWVyYSgpO1xufVxuIl19