hart-estate-widget 0.0.66 → 0.0.69

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 (45) hide show
  1. package/README.md +3 -0
  2. package/build/assets/css/index.css +2 -0
  3. package/build/assets/img/floor-dark.jpg +0 -0
  4. package/build/assets/img/floor-white.jpg +0 -0
  5. package/build/assets/img/grass.jpg +0 -0
  6. package/build/bundle.js +2 -0
  7. package/build/components/Application.js +2 -135
  8. package/build/components/Buttons/FullScreenButton.js +2 -50
  9. package/build/components/Buttons/TabButton.js +2 -24
  10. package/build/components/Instructions.js +2 -54
  11. package/build/components/Loader.js +2 -22
  12. package/build/components/ModelTab.js +2 -213
  13. package/build/components/PanoramaTab.js +2 -620
  14. package/build/components/RotationTab/DefaultView.js +2 -124
  15. package/build/components/RotationTab/ThreesixtyView.js +2 -45
  16. package/build/components/RotationTab/index.js +2 -194
  17. package/build/components/Widget.js +2 -110
  18. package/build/config/defaultConfig.js +2 -32
  19. package/build/enums/deviceOrientationStatuses.js +2 -11
  20. package/build/enums/deviceWidth.js +2 -21
  21. package/build/enums/imageExtentions.js +2 -16
  22. package/build/enums/rotationModes.js +2 -11
  23. package/build/index.css +1 -1
  24. package/build/index.js +2 -75
  25. package/build/locale/index.js +2 -71
  26. package/build/store/apiStore.js +2 -231
  27. package/build/store/deviceStore.js +2 -60
  28. package/build/store/fullScreenStore.js +2 -159
  29. package/build/store/houseStore.js +2 -952
  30. package/build/store/index.js +2 -124
  31. package/build/store/modelStore.js +2 -338
  32. package/build/threesixty/events.js +2 -220
  33. package/build/threesixty/index.js +2 -264
  34. package/build/utils/csg/csg-lib.js +2 -472
  35. package/build/utils/csg/csg-worker.js +2 -84
  36. package/build/utils/csg/three-csg.js +2 -277
  37. package/build/utils/helpers.js +2 -12
  38. package/build/utils/modelHelpers.js +2 -161
  39. package/build/utils/panoramaHelpers.js +2 -117
  40. package/package.json +17 -5
  41. package/build/assets/css/app.css +0 -1
  42. package/build/assets/css/app.css.map +0 -1
  43. package/build/assets/img/floor-dark.png +0 -0
  44. package/build/assets/img/floor-white.png +0 -0
  45. package/build/assets/img/grass.png +0 -0
@@ -1,277 +1,2 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _react = _interopRequireDefault(require("react"));
11
-
12
- var THREE = _interopRequireWildcard(require("three"));
13
-
14
- var _csgLib = require("./csg-lib.js");
15
-
16
- require("./csg-worker.js");
17
-
18
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
-
20
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
-
24
- var Geometry = THREE.Geometry,
25
- BufferGeometry = THREE.BufferGeometry,
26
- Vector3 = THREE.Vector3,
27
- Vector2 = THREE.Vector2;
28
-
29
- _csgLib.CSG.fromGeometry = function (geom, objectIndex) {
30
- var polys = [];
31
-
32
- if (geom.isGeometry) {
33
- var fs = geom.faces;
34
- var vs = geom.vertices;
35
- var fm = ['a', 'b', 'c'];
36
-
37
- for (var i = 0; i < fs.length; i++) {
38
- var f = fs[i];
39
- var vertices = [];
40
-
41
- for (var j = 0; j < 3; j++) {
42
- vertices.push(new _csgLib.Vertex(vs[f[fm[j]]], f.vertexNormals[j], geom.faceVertexUvs[0][i][j]));
43
- }
44
-
45
- polys.push(new _csgLib.Polygon(vertices, objectIndex));
46
- }
47
- } else if (geom.isBufferGeometry) {
48
- var _vertices, normals, uvs;
49
-
50
- var posattr = geom.attributes.position;
51
- var normalattr = geom.attributes.normal;
52
- var uvattr = geom.attributes.uv;
53
- var colorattr = geom.attributes.color;
54
- var index;
55
- if (geom.index) index = geom.index.array;else {
56
- index = new Array(posattr.array.length / posattr.itemSize | 0);
57
-
58
- for (var _i = 0; _i < index.length; _i++) {
59
- index[_i] = _i;
60
- }
61
- }
62
- var triCount = index.length / 3 | 0;
63
- polys = new Array(triCount);
64
-
65
- for (var _i2 = 0, pli = 0, l = index.length; _i2 < l; _i2 += 3, pli++) {
66
- var _vertices2 = new Array(3);
67
-
68
- for (var _j = 0; _j < 3; _j++) {
69
- var vi = index[_i2 + _j];
70
- var vp = vi * 3;
71
- var vt = vi * 2;
72
- var x = posattr.array[vp];
73
- var y = posattr.array[vp + 1];
74
- var z = posattr.array[vp + 2];
75
- var nx = normalattr.array[vp];
76
- var ny = normalattr.array[vp + 1];
77
- var nz = normalattr.array[vp + 2]; //let u = uvattr.array[vt]
78
- //let v = uvattr.array[vt + 1]
79
-
80
- _vertices2[_j] = new _csgLib.Vertex({
81
- x: x,
82
- y: y,
83
- z: z
84
- }, {
85
- x: nx,
86
- y: ny,
87
- z: nz
88
- }, uvattr && {
89
- x: uvattr.array[vt],
90
- y: uvattr.array[vt + 1],
91
- z: 0
92
- }, colorattr && {
93
- x: colorattr.array[vt],
94
- y: colorattr.array[vt + 1],
95
- z: colorattr.array[vt + 2]
96
- });
97
- }
98
-
99
- polys[pli] = new _csgLib.Polygon(_vertices2, objectIndex);
100
- }
101
- } else console.error("Unsupported CSG input type:" + geom.type);
102
-
103
- return _csgLib.CSG.fromPolygons(polys);
104
- };
105
-
106
- var ttvv0 = new THREE.Vector3();
107
- var tmpm3 = new THREE.Matrix3();
108
-
109
- _csgLib.CSG.fromMesh = function (mesh, objectIndex) {
110
- var csg = _csgLib.CSG.fromGeometry(mesh.geometry, objectIndex);
111
-
112
- tmpm3.getNormalMatrix(mesh.matrix);
113
-
114
- for (var i = 0; i < csg.polygons.length; i++) {
115
- var p = csg.polygons[i];
116
-
117
- for (var j = 0; j < p.vertices.length; j++) {
118
- var v = p.vertices[j];
119
- v.pos.copy(ttvv0.copy(v.pos).applyMatrix4(mesh.matrix));
120
- v.normal.copy(ttvv0.copy(v.normal).applyMatrix3(tmpm3));
121
- }
122
- }
123
-
124
- return csg;
125
- };
126
-
127
- var nbuf3 = function nbuf3(ct) {
128
- return {
129
- top: 0,
130
- array: new Float32Array(ct),
131
- write: function write(v) {
132
- this.array[this.top++] = v.x;
133
- this.array[this.top++] = v.y;
134
- this.array[this.top++] = v.z;
135
- }
136
- };
137
- };
138
-
139
- var nbuf2 = function nbuf2(ct) {
140
- return {
141
- top: 0,
142
- array: new Float32Array(ct),
143
- write: function write(v) {
144
- this.array[this.top++] = v.x;
145
- this.array[this.top++] = v.y;
146
- }
147
- };
148
- };
149
-
150
- _csgLib.CSG.toGeometry = function (csg) {
151
- var buffered = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
152
- var ps = csg.polygons;
153
- var geom;
154
- var g2;
155
-
156
- if (!buffered) //Old geometry path...
157
- {
158
- geom = new Geometry();
159
- var vs = geom.vertices;
160
- var fvuv = geom.faceVertexUvs[0];
161
-
162
- for (var i = 0; i < ps.length; i++) {
163
- var p = ps[i];
164
- var pvs = p.vertices;
165
- var v0 = vs.length;
166
- var pvlen = pvs.length;
167
-
168
- for (var j = 0; j < pvlen; j++) {
169
- vs.push(new THREE.Vector3().copy(pvs[j].pos));
170
- }
171
-
172
- for (var _j2 = 3; _j2 <= pvlen; _j2++) {
173
- var fc = new THREE.Face3();
174
- var fuv = [];
175
- fvuv.push(fuv);
176
- var fnml = fc.vertexNormals;
177
- fc.a = v0;
178
- fc.b = v0 + _j2 - 2;
179
- fc.c = v0 + _j2 - 1;
180
- fnml.push(new THREE.Vector3().copy(pvs[0].normal));
181
- fnml.push(new THREE.Vector3().copy(pvs[_j2 - 2].normal));
182
- fnml.push(new THREE.Vector3().copy(pvs[_j2 - 1].normal));
183
- fuv.push(new THREE.Vector3().copy(pvs[0].uv));
184
- fuv.push(new THREE.Vector3().copy(pvs[_j2 - 2].uv));
185
- fuv.push(new THREE.Vector3().copy(pvs[_j2 - 1].uv));
186
- fc.normal = new THREE.Vector3().copy(p.plane.normal);
187
- geom.faces.push(fc);
188
- }
189
- }
190
-
191
- geom = new THREE.BufferGeometry().fromGeometry(geom);
192
- geom.verticesNeedUpdate = geom.elementsNeedUpdate = geom.normalsNeedUpdate = true;
193
- } else {
194
- //BufferGeometry path
195
- var triCount = 0;
196
- ps.forEach(function (p) {
197
- return triCount += p.vertices.length - 2;
198
- });
199
- geom = new THREE.BufferGeometry();
200
- var vertices = nbuf3(triCount * 3 * 3);
201
- var normals = nbuf3(triCount * 3 * 3);
202
- var uvs; // = nbuf2(triCount * 2 * 3)
203
-
204
- var colors;
205
- var grps = [];
206
- ps.forEach(function (p) {
207
- var pvs = p.vertices;
208
- var pvlen = pvs.length;
209
-
210
- if (p.shared !== undefined) {
211
- if (!grps[p.shared]) grps[p.shared] = [];
212
- }
213
-
214
- if (pvlen) {
215
- if (pvs[0].color !== undefined) {
216
- if (!colors) colors = nbuf3(triCount * 3 * 3);
217
- }
218
-
219
- if (pvs[0].uv !== undefined) {
220
- if (!uvs) uvs = nbuf2(triCount * 2 * 3);
221
- }
222
- }
223
-
224
- for (var _j3 = 3; _j3 <= pvlen; _j3++) {
225
- p.shared !== undefined && grps[p.shared].push(vertices.top / 3, vertices.top / 3 + 1, vertices.top / 3 + 2);
226
- vertices.write(pvs[0].pos);
227
- vertices.write(pvs[_j3 - 2].pos);
228
- vertices.write(pvs[_j3 - 1].pos);
229
- normals.write(pvs[0].normal);
230
- normals.write(pvs[_j3 - 2].normal);
231
- normals.write(pvs[_j3 - 1].normal);
232
- uvs && pvs[0].uv && (uvs.write(pvs[0].uv) || uvs.write(pvs[_j3 - 2].uv) || uvs.write(pvs[_j3 - 1].uv));
233
- colors && (colors.write(pvs[0].color) || colors.write(pvs[_j3 - 2].color) || colors.write(pvs[_j3 - 1].color));
234
- }
235
- });
236
- geom.setAttribute('position', new THREE.BufferAttribute(vertices.array, 3));
237
- geom.setAttribute('normal', new THREE.BufferAttribute(normals.array, 3));
238
- uvs && geom.setAttribute('uv', new THREE.BufferAttribute(uvs.array, 2));
239
- colors && geom.setAttribute('color', new THREE.BufferAttribute(colors.array, 3));
240
-
241
- if (grps.length) {
242
- var index = [];
243
- var gbase = 0;
244
-
245
- for (var gi = 0; gi < grps.length; gi++) {
246
- geom.addGroup(gbase, grps[gi].length, gi);
247
- gbase += grps[gi].length;
248
- index = index.concat(grps[gi]);
249
- }
250
-
251
- geom.setIndex(index);
252
- }
253
-
254
- g2 = geom;
255
- }
256
-
257
- return geom;
258
- };
259
-
260
- _csgLib.CSG.toMesh = function (csg, toMatrix, toMaterial) {
261
- var geom = _csgLib.CSG.toGeometry(csg);
262
-
263
- var inv = new THREE.Matrix4().copy(toMatrix).invert();
264
- geom.applyMatrix4(inv);
265
- geom.computeBoundingSphere();
266
- geom.computeBoundingBox();
267
- var m = new THREE.Mesh(geom, toMaterial);
268
- m.matrix.copy(toMatrix);
269
- m.matrix.decompose(m.position, m.quaternion, m.scale);
270
- m.rotation.setFromQuaternion(m.quaternion);
271
- m.updateMatrixWorld();
272
- m.castShadow = m.receiveShadow = true;
273
- return m;
274
- };
275
-
276
- var _default = _csgLib.CSG;
277
- exports.default = _default;
1
+ "use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _react=_interopRequireDefault(require("react")),THREE=_interopRequireWildcard(require("three")),_csgLib=require("./csg-lib.js");function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function(e){return e?t:r})(e)}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};r=_getRequireWildcardCache(r);if(r&&r.has(e))return r.get(e);var t,o,a={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&((o=n?Object.getOwnPropertyDescriptor(e,t):null)&&(o.get||o.set)?Object.defineProperty(a,t,o):a[t]=e[t]);return a.default=e,r&&r.set(e,a),a}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}require("./csg-worker.js");var Geometry=THREE.Geometry,BufferGeometry=THREE.BufferGeometry,Vector3=THREE.Vector3,Vector2=THREE.Vector2,ttvv0=(_csgLib.CSG.fromGeometry=function(e,r){var t=[];if(e.isGeometry)for(var o=e.faces,a=e.vertices,n=["a","b","c"],i=0;i<o.length;i++){for(var u=o[i],c=[],s=0;s<3;s++)c.push(new _csgLib.Vertex(a[u[n[s]]],u.vertexNormals[s],e.faceVertexUvs[0][i][s]));t.push(new _csgLib.Polygon(c,r))}else if(e.isBufferGeometry){var p=e.attributes.position,f=e.attributes.normal,y=e.attributes.uv,l=e.attributes.color;if(e.index)v=e.index.array;else for(var v=new Array(p.array.length/p.itemSize|0),m=0;m<v.length;m++)v[m]=m;for(var h=v.length/3|0,t=new Array(h),d=0,w=0,E=v.length;d<E;d+=3,w++){for(var g=new Array(3),b=0;b<3;b++){var _=v[d+b],R=3*_,_=2*_,x=p.array[R],G=p.array[1+R],H=p.array[2+R],T=f.array[R],S=f.array[1+R],R=f.array[2+R];g[b]=new _csgLib.Vertex({x:x,y:G,z:H},{x:T,y:S,z:R},y&&{x:y.array[_],y:y.array[1+_],z:0},l&&{x:l.array[_],y:l.array[1+_],z:l.array[2+_]})}t[w]=new _csgLib.Polygon(g,r)}}else console.error("Unsupported CSG input type:"+e.type);return _csgLib.CSG.fromPolygons(t)},new THREE.Vector3),tmpm3=new THREE.Matrix3,nbuf3=(_csgLib.CSG.fromMesh=function(e,r){var t=_csgLib.CSG.fromGeometry(e.geometry,r);tmpm3.getNormalMatrix(e.matrix);for(var o=0;o<t.polygons.length;o++)for(var a=t.polygons[o],n=0;n<a.vertices.length;n++){var i=a.vertices[n];i.pos.copy(ttvv0.copy(i.pos).applyMatrix4(e.matrix)),i.normal.copy(ttvv0.copy(i.normal).applyMatrix3(tmpm3))}return t},function(e){return{top:0,array:new Float32Array(e),write:function(e){this.array[this.top++]=e.x,this.array[this.top++]=e.y,this.array[this.top++]=e.z}}}),nbuf2=function(e){return{top:0,array:new Float32Array(e),write:function(e){this.array[this.top++]=e.x,this.array[this.top++]=e.y}}},_default=(_csgLib.CSG.toGeometry=function(e){var r=e.polygons;if(!(1<arguments.length&&void 0!==arguments[1])||arguments[1]){var a,n,i=0,u=(r.forEach(function(e){return i+=e.vertices.length-2}),f=new THREE.BufferGeometry,nbuf3(3*i*3)),c=nbuf3(3*i*3),s=[];if(r.forEach(function(e){var r=e.vertices,t=r.length;void 0===e.shared||s[e.shared]||(s[e.shared]=[]),t&&(void 0!==r[0].color&&(n=n||nbuf3(3*i*3)),void 0!==r[0].uv&&(a=a||nbuf2(2*i*3)));for(var o=3;o<=t;o++)void 0!==e.shared&&s[e.shared].push(u.top/3,u.top/3+1,u.top/3+2),u.write(r[0].pos),u.write(r[o-2].pos),u.write(r[o-1].pos),c.write(r[0].normal),c.write(r[o-2].normal),c.write(r[o-1].normal),a&&r[0].uv&&(a.write(r[0].uv)||a.write(r[o-2].uv)||a.write(r[o-1].uv)),!n||n.write(r[0].color)||n.write(r[o-2].color)||n.write(r[o-1].color)}),f.setAttribute("position",new THREE.BufferAttribute(u.array,3)),f.setAttribute("normal",new THREE.BufferAttribute(c.array,3)),a&&f.setAttribute("uv",new THREE.BufferAttribute(a.array,2)),n&&f.setAttribute("color",new THREE.BufferAttribute(n.array,3)),s.length){for(var t=[],o=0,p=0;p<s.length;p++)f.addGroup(o,s[p].length,p),o+=s[p].length,t=t.concat(s[p]);f.setIndex(t)}0}else{for(var f,y=(f=new Geometry).vertices,l=f.faceVertexUvs[0],v=0;v<r.length;v++){for(var m=r[v],h=m.vertices,d=y.length,w=h.length,E=0;E<w;E++)y.push((new THREE.Vector3).copy(h[E].pos));for(var g=3;g<=w;g++){var b=new THREE.Face3,_=[],R=(l.push(_),b.vertexNormals);b.a=d,b.b=d+g-2,b.c=d+g-1,R.push((new THREE.Vector3).copy(h[0].normal)),R.push((new THREE.Vector3).copy(h[g-2].normal)),R.push((new THREE.Vector3).copy(h[g-1].normal)),_.push((new THREE.Vector3).copy(h[0].uv)),_.push((new THREE.Vector3).copy(h[g-2].uv)),_.push((new THREE.Vector3).copy(h[g-1].uv)),b.normal=(new THREE.Vector3).copy(m.plane.normal),f.faces.push(b)}}(f=(new THREE.BufferGeometry).fromGeometry(f)).verticesNeedUpdate=f.elementsNeedUpdate=f.normalsNeedUpdate=!0}return f},_csgLib.CSG.toMesh=function(e,r,t){var e=_csgLib.CSG.toGeometry(e),o=(new THREE.Matrix4).copy(r).invert(),o=(e.applyMatrix4(o),e.computeBoundingSphere(),e.computeBoundingBox(),new THREE.Mesh(e,t));return o.matrix.copy(r),o.matrix.decompose(o.position,o.quaternion,o.scale),o.rotation.setFromQuaternion(o.quaternion),o.updateMatrixWorld(),o.castShadow=o.receiveShadow=!0,o},_csgLib.CSG);exports.default=_default;
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWxzL2NzZy90aHJlZS1jc2cuanMiXSwibmFtZXMiOlsiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJUSFJFRSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2NzZ0xpYiIsIkdlb21ldHJ5IiwiQnVmZmVyR2VvbWV0cnkiLCJWZWN0b3IzIiwiVmVjdG9yMiIsInR0dnYwIiwiQ1NHIiwiZnJvbUdlb21ldHJ5IiwiZ2VvbSIsIm9iamVjdEluZGV4IiwicG9seXMiLCJpc0dlb21ldHJ5IiwiZnMiLCJmYWNlcyIsInZzIiwidmVydGljZXMiLCJmbSIsImkiLCJsZW5ndGgiLCJmIiwiaiIsInB1c2giLCJWZXJ0ZXgiLCJ2ZXJ0ZXhOb3JtYWxzIiwiZmFjZVZlcnRleFV2cyIsIlBvbHlnb24iLCJpc0J1ZmZlckdlb21ldHJ5IiwicG9zYXR0ciIsImF0dHJpYnV0ZXMiLCJwb3NpdGlvbiIsIm5vcm1hbGF0dHIiLCJub3JtYWwiLCJjb2xvcmF0dHIiLCJjb2xvciIsImluZGV4IiwiYXJyYXkiLCJBcnJheSIsIml0ZW1TaXplIiwidHJpQ291bnQiLCJsIiwicGxpIiwidmkiLCJ2dCIsIngiLCJ2cCIsInkiLCJ6Iiwibm9ybWFscyIsIm56IiwidXYiLCJueCIsInV2YXR0ciIsImNvbnNvbGUiLCJlcnJvciIsInR5cGUiLCJmcm9tUG9seWdvbnMiLCJ0bXBtMyIsIm5idWYzIiwiZnJvbU1lc2giLCJjc2ciLCJnZW9tZXRyeSIsImdldE5vcm1hbE1hdHJpeCIsInBvbHlnb25zIiwicCIsInYiLCJwb3MiLCJjb3B5IiwiYXBwbHlNYXRyaXg0IiwibWVzaCIsIm1hdHJpeCIsImN0IiwidG9wIiwid3JpdGUiLCJ0aGlzIiwibmJ1ZjIiLCJGbG9hdDMyQXJyYXkiLCJ0b0dlb21ldHJ5IiwicHMiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJidWZmZXJlZCIsImZvckVhY2giLCJncnBzIiwicHZzIiwicHZsZW4iLCJzaGFyZWQiLCJjb2xvcnMiLCJ1dnMiLCJGYWNlMyIsImZ1diIsImZubWwiLCJmYyIsIkJ1ZmZlckF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsImdpIiwiYWRkR3JvdXAiLCJnYmFzZSIsInNldEluZGV4IiwidjAiLCJhcHBseU1hdHJpeDMiLCJmdnV2IiwiYSIsImIiLCJjIiwicGxhbmUiLCJ2ZXJ0aWNlc05lZWRVcGRhdGUiLCJlbGVtZW50c05lZWRVcGRhdGUiLCJub3JtYWxzTmVlZFVwZGF0ZSIsInRvTWVzaCIsInRvTWF0ZXJpYWwiLCJNYXRyaXg0IiwidG9NYXRyaXgiLCJpbnZlcnQiLCJpbnYiLCJNZXNoIiwibSIsInF1YXRlcm5pb24iLCJzY2FsZSIsInJvdGF0aW9uIiwic2V0RnJvbVF1YXRlcm5pb24iLCJ1cGRhdGVNYXRyaXhXb3JsZCIsImNhc3RTaGFkb3ciXSwibWFwcGluZ3MiOiI0VUFBQSxJQUFBQSxPQUFBQyx1QkFBQUMsUUFBQSxVQUNBQyxNQUFBQyx3QkFBQUYsUUFBQSxVQUNBRyxRQUFBSCxRQUFBLGdCLDB0QkFDQUEsUUFBQSxtQkFFQSxJQUFNSSxTQUE4Q0gsTUFBOUNHLFNBQVVDLGVBQW9DSixNQUFwQ0ksZUFBZ0JDLFFBQW9CTCxNQUFwQkssUUFBU0MsUUFBV04sTUFBWE0sUUFtRXJDQyxPQWpFSkMsUUFBQUEsSUFBSUMsYUFBZSxTQUFTQyxFQUFLQyxHQUM3QixJQUFJQyxFQUFRLEdBUmhCLEdBQUFGLEVBQUFHLFdBRUEsSUFRUSxJQUFJQyxFQUFLSixFQUFLSyxNQVR0QkMsRUFBQU4sRUFBQU8sU0FXWUMsRUFBSyxDQUFDLElBQUssSUFBSyxLQVY1QkMsRUFBQSxFQUFBQSxFQUFBTCxFQUFBTSxPQUFBRCxJQUFBLENBY1ksSUFGQSxJQUFJRSxFQUFJUCxFQUFHSyxHQVh2QkYsRUFBQSxHQWFxQkssRUFBSSxFQUFHQSxFQUFJLEVBQUdBLElBQ25CTCxFQUFTTSxLQUFLLElBQUlDLFFBQUFBLE9BQU9SLEVBQUdLLEVBQUVILEVBQUdJLEtBQUtELEVBQUVJLGNBQWNILEdBQUdaLEVBQUtn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LEVBQUM5QixlQUFlQSxFQUM3QjhCLEdBRVM3RyxRQUFBQSIsImZpbGUiOiJ1dGlscy9jc2cvdGhyZWUtY3NnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENTRywgVmVydGV4LCBWZWN0b3IsIFBvbHlnb24gfSBmcm9tICcuL2NzZy1saWIuanMnO1xuaW1wb3J0ICcuL2NzZy13b3JrZXIuanMnO1xuXG5sZXQgeyBHZW9tZXRyeSwgQnVmZmVyR2VvbWV0cnksIFZlY3RvcjMsIFZlY3RvcjJ9ID0gVEhSRUU7XG5cbkNTRy5mcm9tR2VvbWV0cnkgPSBmdW5jdGlvbihnZW9tLG9iamVjdEluZGV4KSB7XG4gICAgbGV0IHBvbHlzID0gW107XG4gICAgaWYgKGdlb20uaXNHZW9tZXRyeSkge1xuICAgICAgICBsZXQgZnMgPSBnZW9tLmZhY2VzO1xuICAgICAgICBsZXQgdnMgPSBnZW9tLnZlcnRpY2VzO1xuICAgICAgICBsZXQgZm0gPSBbJ2EnLCAnYicsICdjJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBmID0gZnNbaV07XG4gICAgICAgICAgICBsZXQgdmVydGljZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMzsgaisrKVxuICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2gobmV3IFZlcnRleCh2c1tmW2ZtW2pdXV0sZi52ZXJ0ZXhOb3JtYWxzW2pdLGdlb20uZmFjZVZlcnRleFV2c1swXVtpXVtqXSkpO1xuICAgICAgICAgICAgcG9seXMucHVzaChuZXcgUG9seWdvbih2ZXJ0aWNlcywgb2JqZWN0SW5kZXgpKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ2VvbS5pc0J1ZmZlckdlb21ldHJ5KSB7XG4gICAgICAgIGxldCB2ZXJ0aWNlcywgbm9ybWFscywgdXZzO1xuICAgICAgICBsZXQgcG9zYXR0ciA9IGdlb20uYXR0cmlidXRlcy5wb3NpdGlvbjtcbiAgICAgICAgbGV0IG5vcm1hbGF0dHIgPSBnZW9tLmF0dHJpYnV0ZXMubm9ybWFsO1xuICAgICAgICBsZXQgdXZhdHRyID0gZ2VvbS5hdHRyaWJ1dGVzLnV2O1xuICAgICAgICBsZXQgY29sb3JhdHRyID0gZ2VvbS5hdHRyaWJ1dGVzLmNvbG9yO1xuICAgICAgICBsZXQgaW5kZXg7XG4gICAgICAgIGlmIChnZW9tLmluZGV4KVxuICAgICAgICAgICAgaW5kZXggPSBnZW9tLmluZGV4LmFycmF5O1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gbmV3IEFycmF5KChwb3NhdHRyLmFycmF5Lmxlbmd0aCAvIHBvc2F0dHIuaXRlbVNpemUpIHwgMCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGluZGV4W2ldID0gaTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdHJpQ291bnQgPSAoaW5kZXgubGVuZ3RoIC8gMykgfCAwO1xuICAgICAgICBwb2x5cyA9IG5ldyBBcnJheSh0cmlDb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBwbGkgPSAwLCBsID0gaW5kZXgubGVuZ3RoOyBpIDwgbDsgaSArPSAzLFxuICAgICAgICBwbGkrKykge1xuICAgICAgICAgICAgbGV0IHZlcnRpY2VzID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgdmkgPSBpbmRleFtpICsgal07XG4gICAgICAgICAgICAgICAgbGV0IHZwID0gdmkgKiAzO1xuICAgICAgICAgICAgICAgIGxldCB2dCA9IHZpICogMjtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHBvc2F0dHIuYXJyYXlbdnBdO1xuICAgICAgICAgICAgICAgIGxldCB5ID0gcG9zYXR0ci5hcnJheVt2cCArIDFdO1xuICAgICAgICAgICAgICAgIGxldCB6ID0gcG9zYXR0ci5hcnJheVt2cCArIDJdO1xuICAgICAgICAgICAgICAgIGxldCBueCA9IG5vcm1hbGF0dHIuYXJyYXlbdnBdO1xuICAgICAgICAgICAgICAgIGxldCBueSA9IG5vcm1hbGF0dHIuYXJyYXlbdnAgKyAxXTtcbiAgICAgICAgICAgICAgICBsZXQgbnogPSBub3JtYWxhdHRyLmFycmF5W3ZwICsgMl07XG4gICAgICAgICAgICAgICAgLy9sZXQgdSA9IHV2YXR0ci5hcnJheVt2dF1cbiAgICAgICAgICAgICAgICAvL2xldCB2ID0gdXZhdHRyLmFycmF5W3Z0ICsgMV1cbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tqXSA9IG5ldyBWZXJ0ZXgoe1xuICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgICAgICB6XG4gICAgICAgICAgICAgICAgfSx7XG4gICAgICAgICAgICAgICAgICAgIHg6IG54LFxuICAgICAgICAgICAgICAgICAgICB5OiBueSxcbiAgICAgICAgICAgICAgICAgICAgejogbnpcbiAgICAgICAgICAgICAgICB9LHV2YXR0ciYme1xuICAgICAgICAgICAgICAgICAgICB4OiB1dmF0dHIuYXJyYXlbdnRdLFxuICAgICAgICAgICAgICAgICAgICB5OiB1dmF0dHIuYXJyYXlbdnQrMV0sXG4gICAgICAgICAgICAgICAgICAgIHo6IDBcbiAgICAgICAgICAgICAgICB9LGNvbG9yYXR0ciYme3g6Y29sb3JhdHRyLmFycmF5W3Z0XSx5OmNvbG9yYXR0ci5hcnJheVt2dCsxXSx6OmNvbG9yYXR0ci5hcnJheVt2dCsyXX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9seXNbcGxpXSA9IG5ldyBQb2x5Z29uKHZlcnRpY2VzLG9iamVjdEluZGV4KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiVW5zdXBwb3J0ZWQgQ1NHIGlucHV0IHR5cGU6XCIgKyBnZW9tLnR5cGUpO1xuICAgIHJldHVybiBDU0cuZnJvbVBvbHlnb25zKHBvbHlzKTtcbn07XG5cbmxldCB0dHZ2MCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5sZXQgdG1wbTMgPSBuZXcgVEhSRUUuTWF0cml4MygpO1xuQ1NHLmZyb21NZXNoID0gZnVuY3Rpb24obWVzaCxvYmplY3RJbmRleCkge1xuICAgIGxldCBjc2cgPSBDU0cuZnJvbUdlb21ldHJ5KG1lc2guZ2VvbWV0cnksb2JqZWN0SW5kZXgpO1xuICAgIHRtcG0zLmdldE5vcm1hbE1hdHJpeChtZXNoLm1hdHJpeCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjc2cucG9seWdvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHAgPSBjc2cucG9seWdvbnNbaV07XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcC52ZXJ0aWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgbGV0IHYgPSBwLnZlcnRpY2VzW2pdO1xuICAgICAgICAgICAgdi5wb3MuY29weSh0dHZ2MC5jb3B5KHYucG9zKS5hcHBseU1hdHJpeDQobWVzaC5tYXRyaXgpKTtcbiAgICAgICAgICAgIHYubm9ybWFsLmNvcHkodHR2djAuY29weSh2Lm5vcm1hbCkuYXBwbHlNYXRyaXgzKHRtcG0zKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNzZztcbn07XG5cbmxldCBuYnVmMz0oY3QpPT57XG4gICAgcmV0dXJue1xuICAgICAgICB0b3A6MCxcbiAgICAgICAgYXJyYXk6bmV3IEZsb2F0MzJBcnJheShjdCksXG4gICAgICAgIHdyaXRlOmZ1bmN0aW9uKHYpeyh0aGlzLmFycmF5W3RoaXMudG9wKytdPXYueCk7KHRoaXMuYXJyYXlbdGhpcy50b3ArK109di55KTsodGhpcy5hcnJheVt0aGlzLnRvcCsrXT12LnopO31cbiAgICB9O1xufTtcbmxldCBuYnVmMj0oY3QpPT57XG4gICAgcmV0dXJue1xuICAgICAgICB0b3A6MCxcbiAgICAgICAgYXJyYXk6bmV3IEZsb2F0MzJBcnJheShjdCksXG4gICAgICAgIHdyaXRlOmZ1bmN0aW9uKHYpeyh0aGlzLmFycmF5W3RoaXMudG9wKytdPXYueCk7KHRoaXMuYXJyYXlbdGhpcy50b3ArK109di55KTt9XG4gICAgfTtcbn07XG5cbkNTRy50b0dlb21ldHJ5ID0gZnVuY3Rpb24oY3NnLCBidWZmZXJlZD10cnVlKSB7XG4gICAgbGV0IHBzID0gY3NnLnBvbHlnb25zO1xuICAgIGxldCBnZW9tO1xuICAgIGxldCBnMjtcbiAgICBpZighYnVmZmVyZWQpIC8vT2xkIGdlb21ldHJ5IHBhdGguLi5cbiAgICB7XG4gICAgICAgIGdlb20gPSBuZXcgR2VvbWV0cnkoKTtcbiAgICAgICAgbGV0IHZzID0gZ2VvbS52ZXJ0aWNlcztcbiAgICAgICAgbGV0IGZ2dXYgPSBnZW9tLmZhY2VWZXJ0ZXhVdnNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBwID0gcHNbaV07XG4gICAgICAgICAgICBsZXQgcHZzID0gcC52ZXJ0aWNlcztcbiAgICAgICAgICAgIGxldCB2MCA9IHZzLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCBwdmxlbiA9IHB2cy5sZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcHZsZW47IGorKylcbiAgICAgICAgICAgICAgICB2cy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKCkuY29weShwdnNbal0ucG9zKSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAzOyBqIDw9IHB2bGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZmMgPSBuZXcgVEhSRUUuRmFjZTMoKTtcbiAgICAgICAgICAgICAgICBsZXQgZnV2ID0gW107XG4gICAgICAgICAgICAgICAgZnZ1di5wdXNoKGZ1dik7XG4gICAgICAgICAgICAgICAgbGV0IGZubWwgPSBmYy52ZXJ0ZXhOb3JtYWxzO1xuICAgICAgICAgICAgICAgIGZjLmEgPSB2MDtcbiAgICAgICAgICAgICAgICBmYy5iID0gdjAgKyBqIC0gMjtcbiAgICAgICAgICAgICAgICBmYy5jID0gdjAgKyBqIC0gMTtcblxuICAgICAgICAgICAgICAgIGZubWwucHVzaChuZXcgVEhSRUUuVmVjdG9yMygpLmNvcHkocHZzWzBdLm5vcm1hbCkpO1xuICAgICAgICAgICAgICAgIGZubWwucHVzaChuZXcgVEhSRUUuVmVjdG9yMygpLmNvcHkocHZzW2ogLSAyXS5ub3JtYWwpKTtcbiAgICAgICAgICAgICAgICBmbm1sLnB1c2gobmV3IFRIUkVFLlZlY3RvcjMoKS5jb3B5KHB2c1tqIC0gMV0ubm9ybWFsKSk7XG4gICAgICAgICAgICAgICAgZnV2LnB1c2gobmV3IFRIUkVFLlZlY3RvcjMoKS5jb3B5KHB2c1swXS51dikpO1xuICAgICAgICAgICAgICAgIGZ1di5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKCkuY29weShwdnNbaiAtIDJdLnV2KSk7XG4gICAgICAgICAgICAgICAgZnV2LnB1c2gobmV3IFRIUkVFLlZlY3RvcjMoKS5jb3B5KHB2c1tqIC0gMV0udXYpKTtcblxuICAgICAgICAgICAgICAgIGZjLm5vcm1hbCA9IG5ldyBUSFJFRS5WZWN0b3IzKCkuY29weShwLnBsYW5lLm5vcm1hbCk7XG4gICAgICAgICAgICAgICAgZ2VvbS5mYWNlcy5wdXNoKGZjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZW9tID0gbmV3IFRIUkVFLkJ1ZmZlckdlb21ldHJ5KCkuZnJvbUdlb21ldHJ5KGdlb20pO1xuICAgICAgICBnZW9tLnZlcnRpY2VzTmVlZFVwZGF0ZSA9IGdlb20uZWxlbWVudHNOZWVkVXBkYXRlID0gZ2VvbS5ub3JtYWxzTmVlZFVwZGF0ZSA9IHRydWU7XG4gICAgfWVsc2UgeyAvL0J1ZmZlckdlb21ldHJ5IHBhdGhcbiAgICAgICAgbGV0IHRyaUNvdW50ID0gMDtcbiAgICAgICAgcHMuZm9yRWFjaChwPT50cmlDb3VudCArPSAocC52ZXJ0aWNlcy5sZW5ndGggLSAyKSk7XG4gICAgICAgICBnZW9tID0gbmV3IFRIUkVFLkJ1ZmZlckdlb21ldHJ5KCk7XG5cbiAgICAgICAgbGV0IHZlcnRpY2VzID0gbmJ1ZjModHJpQ291bnQgKiAzICogMyk7XG4gICAgICAgIGxldCBub3JtYWxzID0gbmJ1ZjModHJpQ291bnQgKiAzICogMyk7XG4gICAgICAgIGxldCB1dnM7IC8vID0gbmJ1ZjIodHJpQ291bnQgKiAyICogMylcbiAgICAgICAgbGV0IGNvbG9ycztcbiAgICAgICAgbGV0IGdycHM9W107XG4gICAgICAgIHBzLmZvckVhY2gocD0+e1xuICAgICAgICAgICAgbGV0IHB2cyA9IHAudmVydGljZXM7XG4gICAgICAgICAgICBsZXQgcHZsZW4gPSBwdnMubGVuZ3RoO1xuICAgICAgICAgICAgaWYocC5zaGFyZWQhPT11bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIGlmKCFncnBzW3Auc2hhcmVkXSlncnBzW3Auc2hhcmVkXT1bXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHB2bGVuKXtcbiAgICAgICAgICAgICAgICBpZihwdnNbMF0uY29sb3IhPT11bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICBpZighY29sb3JzKWNvbG9ycyA9IG5idWYzKHRyaUNvdW50KjMqMyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHB2c1swXS51diE9PXVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgIGlmKCF1dnMpdXZzID0gbmJ1ZjIodHJpQ291bnQgKiAyICogMyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDM7IGogPD0gcHZsZW47IGorKykge1xuICAgICAgICAgICAgICAgIChwLnNoYXJlZCE9PXVuZGVmaW5lZCkgJiYgKGdycHNbcC5zaGFyZWRdLnB1c2godmVydGljZXMudG9wLzMsKHZlcnRpY2VzLnRvcC8zKSsxLCh2ZXJ0aWNlcy50b3AvMykrMikpO1xuICAgICAgICAgICAgICAgIHZlcnRpY2VzLndyaXRlKHB2c1swXS5wb3MpO1xuICAgICAgICAgICAgICAgIHZlcnRpY2VzLndyaXRlKHB2c1tqLTJdLnBvcyk7XG4gICAgICAgICAgICAgICAgdmVydGljZXMud3JpdGUocHZzW2otMV0ucG9zKTtcbiAgICAgICAgICAgICAgICBub3JtYWxzLndyaXRlKHB2c1swXS5ub3JtYWwpO1xuICAgICAgICAgICAgICAgIG5vcm1hbHMud3JpdGUocHZzW2otMl0ubm9ybWFsKTtcbiAgICAgICAgICAgICAgICBub3JtYWxzLndyaXRlKHB2c1tqLTFdLm5vcm1hbCk7XG4gICAgICAgICAgICAgICAgdXZzJiYocHZzWzBdLnV2KSYmKHV2cy53cml0ZShwdnNbMF0udXYpfHx1dnMud3JpdGUocHZzW2otMl0udXYpfHx1dnMud3JpdGUocHZzW2otMV0udXYpKTtcbiAgICAgICAgICAgICAgICBjb2xvcnMmJihjb2xvcnMud3JpdGUocHZzWzBdLmNvbG9yKXx8Y29sb3JzLndyaXRlKHB2c1tqLTJdLmNvbG9yKXx8Y29sb3JzLndyaXRlKHB2c1tqLTFdLmNvbG9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgZ2VvbS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcy5hcnJheSwzKSk7XG4gICAgICAgIGdlb20uc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKG5vcm1hbHMuYXJyYXksMykpO1xuICAgICAgICB1dnMgJiYgZ2VvbS5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh1dnMuYXJyYXksMikpO1xuICAgICAgICBjb2xvcnMgJiYgZ2VvbS5zZXRBdHRyaWJ1dGUoJ2NvbG9yJywgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZShjb2xvcnMuYXJyYXksMykpO1xuICAgICAgICBpZihncnBzLmxlbmd0aCl7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBbXTtcbiAgICAgICAgICAgIGxldCBnYmFzZT0wO1xuICAgICAgICAgICAgZm9yKGxldCBnaT0wO2dpPGdycHMubGVuZ3RoO2dpKyspe1xuICAgICAgICAgICAgICAgIGdlb20uYWRkR3JvdXAoZ2Jhc2UsZ3Jwc1tnaV0ubGVuZ3RoLGdpKTtcbiAgICAgICAgICAgICAgICBnYmFzZSs9Z3Jwc1tnaV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGluZGV4PWluZGV4LmNvbmNhdChncnBzW2dpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW9tLnNldEluZGV4KGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBnMiA9IGdlb207XG4gICAgfVxuICAgIHJldHVybiBnZW9tO1xufTtcblxuQ1NHLnRvTWVzaCA9IGZ1bmN0aW9uKGNzZywgdG9NYXRyaXgsIHRvTWF0ZXJpYWwpIHtcbiAgICBsZXQgZ2VvbSA9IENTRy50b0dlb21ldHJ5KGNzZyk7XG4gICAgbGV0IGludiA9IG5ldyBUSFJFRS5NYXRyaXg0KCkuY29weSh0b01hdHJpeCkuaW52ZXJ0KCk7XG4gICAgZ2VvbS5hcHBseU1hdHJpeDQoaW52KTtcbiAgICBnZW9tLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuICAgIGdlb20uY29tcHV0ZUJvdW5kaW5nQm94KCk7XG4gICAgbGV0IG0gPSBuZXcgVEhSRUUuTWVzaChnZW9tLHRvTWF0ZXJpYWwpO1xuICAgIG0ubWF0cml4LmNvcHkodG9NYXRyaXgpO1xuICAgIG0ubWF0cml4LmRlY29tcG9zZShtLnBvc2l0aW9uLCBtLnF1YXRlcm5pb24sIG0uc2NhbGUpO1xuICAgIG0ucm90YXRpb24uc2V0RnJvbVF1YXRlcm5pb24obS5xdWF0ZXJuaW9uKTtcbiAgICBtLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG4gICAgbS5jYXN0U2hhZG93ID0gbS5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcbiAgICByZXR1cm4gbTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENTRztcbiJdfQ==
@@ -1,12 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.preventRightClick = void 0;
7
-
8
- var preventRightClick = function preventRightClick(event) {
9
- event.preventDefault();
10
- };
11
-
12
- exports.preventRightClick = preventRightClick;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.preventRightClick=void 0;var preventRightClick=function(e){e.preventDefault()};exports.preventRightClick=preventRightClick;
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWxzL2hlbHBlcnMuanMiXSwibmFtZXMiOlsicHJldmVudFJpZ2h0Q2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0Il0sIm1hcHBpbmdzIjoicUdBQU8sSUFBTUEsa0JBQW9CLFNBQUNDLEdBQ2hDQSxFQUFNQyIsImZpbGUiOiJ1dGlscy9oZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHByZXZlbnRSaWdodENsaWNrID0gKGV2ZW50KSA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuIl19
@@ -1,161 +1,2 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.getMinMaxCoordinates = exports.getKeyEvents = exports.getFloorParams = exports.getDirectionsFromDegrees = void 0;
9
-
10
- var _react = _interopRequireDefault(require("react"));
11
-
12
- var holdEvent = _interopRequireWildcard(require("hold-event"));
13
-
14
- var _floor = _interopRequireDefault(require("../assets/img/floor.jpg"));
15
-
16
- var _floorDark = _interopRequireDefault(require("../assets/img/floor-dark.png"));
17
-
18
- var _floorWhite = _interopRequireDefault(require("../assets/img/floor-white.png"));
19
-
20
- var _floorBathroom = _interopRequireDefault(require("../assets/img/floor-bathroom.jpg"));
21
-
22
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
-
24
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
-
26
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
-
28
- var FloorParams = {
29
- 'default': {
30
- texture: _floorDark.default,
31
- roughnessMap: null,
32
- color: '#FFFFFF'
33
- },
34
- 'Kitchen': {
35
- texture: _floorWhite.default,
36
- roughnessMap: null,
37
- color: '#FFFFFF'
38
- },
39
- 'Balcony': {
40
- texture: _floor.default,
41
- roughnessMap: null,
42
- color: '#DADADA'
43
- },
44
- 'Bathroom': {
45
- texture: _floorBathroom.default,
46
- roughnessMap: null,
47
- color: '#FFFFFF'
48
- }
49
- };
50
-
51
- var getKeyEvents = function getKeyEvents(controls) {
52
- var KEYCODE = {
53
- W: 87,
54
- A: 65,
55
- S: 83,
56
- D: 68,
57
- ARROW_LEFT: 37,
58
- ARROW_UP: 38,
59
- ARROW_RIGHT: 39,
60
- ARROW_DOWN: 40
61
- };
62
- var wKey = new holdEvent.KeyboardKeyHold(KEYCODE.W, 100);
63
- var upKey = new holdEvent.KeyboardKeyHold(KEYCODE.ARROW_UP, 100);
64
- var upArr = [wKey, upKey];
65
- var aKey = new holdEvent.KeyboardKeyHold(KEYCODE.A, 100);
66
- var leftKey = new holdEvent.KeyboardKeyHold(KEYCODE.ARROW_LEFT, 100);
67
- var leftArr = [aKey, leftKey];
68
- var sKey = new holdEvent.KeyboardKeyHold(KEYCODE.S, 100);
69
- var downKey = new holdEvent.KeyboardKeyHold(KEYCODE.ARROW_DOWN, 100);
70
- var downArr = [sKey, downKey];
71
- var dKey = new holdEvent.KeyboardKeyHold(KEYCODE.D, 100);
72
- var rightKey = new holdEvent.KeyboardKeyHold(KEYCODE.ARROW_RIGHT, 100);
73
- var rightArr = [dKey, rightKey];
74
- var keyEvents = [{
75
- keys: upArr,
76
- callback: function callback() {
77
- return controls.forward(1, true);
78
- }
79
- }, {
80
- keys: leftArr,
81
- callback: function callback() {
82
- return controls.truck(-1, 0, true);
83
- }
84
- }, {
85
- keys: downArr,
86
- callback: function callback() {
87
- return controls.forward(-1, true);
88
- }
89
- }, {
90
- keys: rightArr,
91
- callback: function callback() {
92
- return controls.truck(1, 0, true);
93
- }
94
- }];
95
- return keyEvents;
96
- };
97
-
98
- exports.getKeyEvents = getKeyEvents;
99
-
100
- var getFloorParams = function getFloorParams(type) {
101
- var params = FloorParams[type];
102
- if (!params) return FloorParams['default'];
103
- return params;
104
- };
105
-
106
- exports.getFloorParams = getFloorParams;
107
-
108
- var getMinMaxCoordinates = function getMinMaxCoordinates(walls) {
109
- var maxX = 0;
110
- var minX = Infinity;
111
- var maxY = 0;
112
- var minY = Infinity;
113
- walls.forEach(function (_ref) {
114
- var start = _ref.start,
115
- end = _ref.end;
116
- // CALCULATE MAX COORDS
117
- if (start.x > maxX) maxX = start.x;
118
- if (start.x > maxX) maxX = start.x;
119
- if (end.y > maxY) maxY = end.y;
120
- if (end.y > maxY) maxY = end.y; // CALCULATE MIN COORDS
121
-
122
- if (start.x < minX) minX = start.x;
123
- if (start.x < minX) minX = start.x;
124
- if (end.y < minY) minY = end.y;
125
- if (end.y < minY) minY = end.y;
126
- });
127
- return {
128
- maxX: maxX,
129
- minX: minX,
130
- maxY: maxY,
131
- minY: minY
132
- };
133
- };
134
-
135
- exports.getMinMaxCoordinates = getMinMaxCoordinates;
136
-
137
- var getDirectionsFromDegrees = function getDirectionsFromDegrees(deg) {
138
- var directions = [];
139
-
140
- if (deg > 80 && deg < 100) {
141
- directions = ['forward'];
142
- } else if (deg > 10 && deg < 80) {
143
- directions = ['forward', 'right'];
144
- } else if (deg > 100 && deg < 170) {
145
- directions = ['forward', 'left'];
146
- } else if (deg > 260 && deg < 280) {
147
- directions = ['backward'];
148
- } else if (deg > 190 && deg < 260) {
149
- directions = ['backward', 'left'];
150
- } else if (deg > 280 && deg < 350) {
151
- directions = ['backward', 'right'];
152
- } else if (deg > 350 || deg < 10) {
153
- directions = ['right'];
154
- } else if (deg > 170 && deg < 190) {
155
- directions = ['left'];
156
- }
157
-
158
- return directions;
159
- };
160
-
161
- exports.getDirectionsFromDegrees = getDirectionsFromDegrees;
1
+ "use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMinMaxCoordinates=exports.getKeyEvents=exports.getFloorParams=exports.getDirectionsFromDegrees=void 0;var _react=_interopRequireDefault(require("react")),holdEvent=_interopRequireWildcard(require("hold-event")),_floor=_interopRequireDefault(require("../assets/img/floor.jpg")),_floorDark=_interopRequireDefault(require("../assets/img/floor-dark.jpg")),_floorWhite=_interopRequireDefault(require("../assets/img/floor-white.jpg")),_floorBathroom=_interopRequireDefault(require("../assets/img/floor-bathroom.jpg"));function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function(e){return e?t:r})(e)}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};r=_getRequireWildcardCache(r);if(r&&r.has(e))return r.get(e);var t,o,n={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&((o=a?Object.getOwnPropertyDescriptor(e,t):null)&&(o.get||o.set)?Object.defineProperty(n,t,o):n[t]=e[t]);return n.default=e,r&&r.set(e,n),n}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var FloorParams={default:{texture:_floorDark.default,roughnessMap:null,color:"#FFFFFF"},Kitchen:{texture:_floorWhite.default,roughnessMap:null,color:"#FFFFFF"},Balcony:{texture:_floor.default,roughnessMap:null,color:"#DADADA"},Bathroom:{texture:_floorBathroom.default,roughnessMap:null,color:"#FFFFFF"}},getKeyEvents=function(e){var r=87,t=65,o=83,n=68,a=37,l=38,u=39,i=40;return[{keys:[new holdEvent.KeyboardKeyHold(r,100),new holdEvent.KeyboardKeyHold(l,100)],callback:function(){return e.forward(1,!0)}},{keys:[new holdEvent.KeyboardKeyHold(t,100),new holdEvent.KeyboardKeyHold(a,100)],callback:function(){return e.truck(-1,0,!0)}},{keys:[new holdEvent.KeyboardKeyHold(o,100),new holdEvent.KeyboardKeyHold(i,100)],callback:function(){return e.forward(-1,!0)}},{keys:[new holdEvent.KeyboardKeyHold(n,100),new holdEvent.KeyboardKeyHold(u,100)],callback:function(){return e.truck(1,0,!0)}}]},getFloorParams=(exports.getKeyEvents=getKeyEvents,function(e){e=FloorParams[e];return e||FloorParams.default}),getMinMaxCoordinates=(exports.getFloorParams=getFloorParams,function(e){var t=0,o=1/0,n=0,a=1/0;return e.forEach(function(e){var r=e.start,e=e.end;r.x>t&&(t=r.x),r.x>t&&(t=r.x),e.y>n&&(n=e.y),e.y>n&&(n=e.y),r.x<o&&(o=r.x),r.x<o&&(o=r.x),e.y<a&&(a=e.y),e.y<a&&(a=e.y)}),{maxX:t,minX:o,maxY:n,minY:a}}),getDirectionsFromDegrees=(exports.getMinMaxCoordinates=getMinMaxCoordinates,function(e){var r=[];return 80<e&&e<100?r=["forward"]:10<e&&e<80?r=["forward","right"]:100<e&&e<170?r=["forward","left"]:260<e&&e<280?r=["backward"]:190<e&&e<260?r=["backward","left"]:280<e&&e<350?r=["backward","right"]:350<e||e<10?r=["right"]:170<e&&e<190&&(r=["left"]),r});exports.getDirectionsFromDegrees=getDirectionsFromDegrees;
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWxzL21vZGVsSGVscGVycy5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImhvbGRFdmVudCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2Zsb29yIiwiX2Zsb29yRGFyayIsIl9mbG9vcldoaXRlIiwiX2Zsb29yQmF0aHJvb20iLCJGbG9vclBhcmFtcyIsImRlZmF1bHQiLCJ0ZXh0dXJlIiwiRmxvb3JEYXJrIiwicm91Z2huZXNzTWFwIiwiY29sb3IiLCJLaXRjaGVuIiwiRmxvb3JXaGl0ZSIsIkJhbGNvbnkiLCJGbG9vciIsIkJhdGhyb29tIiwiRmxvb3JCYXRocm9vbSIsImNvbnRyb2xzIiwiS0VZQ09ERSIsIkFSUk9XX0xFRlQiLCJBUlJPV19VUCIsIktleWJvYXJkS2V5SG9sZCIsIkFSUk9XX1JJR0hUIiwiZm9yd2FyZCIsIndLZXkiLCJ1cEtleSIsImxlZnRLZXkiLCJsZWZ0QXJyIiwiZG93bkFyciIsImRLZXkiLCJnZXRGbG9vclBhcmFtcyIsInR5cGUiLCJwYXJhbXMiLCJrZXlzIiwiZ2V0TWluTWF4Q29vcmRpbmF0ZXMiLCJ3YWxscyIsImNhbGxiYWNrIiwiSW5maW5pdHkiLCJtYXhZIiwibWluWSIsImZvckVhY2giLCJyaWdodEFyciIsInN0YXJ0IiwiX3JlZiIsImVuZCIsInRydWNrIiwieCIsIm1heFgiLCJ5Iiwia2V5RXZlbnRzIiwibWluWCIsImdldERpcmVjdGlvbnNGcm9tRGVncmVlcyIsImRlZyIsImRpcmVjdGlvbnMiXSwibWFwcGluZ3MiOiJzYUFBQSxJQUFBQSxPQUFBQyx1QkFBQUMsUUFBQSxVQUNBQyxVQUFBQyx3QkFBQUYsUUFBQSxlQUVBRyxPQUFBSix1QkFBQUMsUUFBQSw0QkFDQUksV0FBQUwsdUJBQUFDLFFBQUEsaUNBQ0FLLFlBQUFOLHVCQUFBQyxRQUFBLGtDQUNBTSxlQUFBUCx1QkFBQUMsUUFBQSxxQywwdEJBRUEsSUFBTU8sWUFBYyxDQVJwQkMs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QlcsRUFBWWQsQ0FBQUEsU0FWZGMiLCJmaWxlIjoidXRpbHMvbW9kZWxIZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIGhvbGRFdmVudCBmcm9tICdob2xkLWV2ZW50JztcblxuaW1wb3J0IEZsb29yIGZyb20gJy4uL2Fzc2V0cy9pbWcvZmxvb3IuanBnJztcbmltcG9ydCBGbG9vckRhcmsgZnJvbSAnLi4vYXNzZXRzL2ltZy9mbG9vci1kYXJrLmpwZyc7XG5pbXBvcnQgRmxvb3JXaGl0ZSBmcm9tICcuLi9hc3NldHMvaW1nL2Zsb29yLXdoaXRlLmpwZyc7XG5pbXBvcnQgRmxvb3JCYXRocm9vbSBmcm9tICcuLi9hc3NldHMvaW1nL2Zsb29yLWJhdGhyb29tLmpwZyc7XG5cbmNvbnN0IEZsb29yUGFyYW1zID0ge1xuICAnZGVmYXVsdCc6IHtcbiAgICB0ZXh0dXJlOiBGbG9vckRhcmssXG4gICAgcm91Z2huZXNzTWFwOiBudWxsLFxuICAgIGNvbG9yOiAnI0ZGRkZGRicsXG4gIH0sXG4gICdLaXRjaGVuJzoge1xuICAgIHRleHR1cmU6IEZsb29yV2hpdGUsXG4gICAgcm91Z2huZXNzTWFwOiBudWxsLFxuICAgIGNvbG9yOiAnI0ZGRkZGRicsXG4gIH0sXG4gICdCYWxjb255Jzoge1xuICAgIHRleHR1cmU6IEZsb29yLFxuICAgIHJvdWdobmVzc01hcDogbnVsbCxcbiAgICBjb2xvcjogJyNEQURBREEnLFxuICB9LFxuICAnQmF0aHJvb20nOiB7XG4gICAgdGV4dHVyZTogRmxvb3JCYXRocm9vbSxcbiAgICByb3VnaG5lc3NNYXA6IG51bGwsXG4gICAgY29sb3I6ICcjRkZGRkZGJyxcbiAgfSxcbn07XG5cbmNvbnN0IGdldEtleUV2ZW50cyA9IChjb250cm9scykgPT4ge1xuICBjb25zdCBLRVlDT0RFID0ge1xuICAgIFc6IDg3LCBBOiA2NSxcbiAgICBTOiA4MywgRDogNjgsXG4gICAgQVJST1dfTEVGVDogMzcsIEFSUk9XX1VQOiAzOCxcbiAgICBBUlJPV19SSUdIVDogMzksIEFSUk9XX0RPV046IDQwXG4gIH07XG5cbiAgY29uc3Qgd0tleSA9IG5ldyBob2xkRXZlbnQuS2V5Ym9hcmRLZXlIb2xkKEtFWUNPREUuVywgMTAwKTtcbiAgY29uc3QgdXBLZXkgPSBuZXcgaG9sZEV2ZW50LktleWJvYXJkS2V5SG9sZChLRVlDT0RFLkFSUk9XX1VQLCAxMDApO1xuICBjb25zdCB1cEFyciA9IFt3S2V5LCB1cEtleV07XG5cbiAgY29uc3QgYUtleSA9IG5ldyBob2xkRXZlbnQuS2V5Ym9hcmRLZXlIb2xkKEtFWUNPREUuQSwgMTAwKTtcbiAgY29uc3QgbGVmdEtleSA9IG5ldyBob2xkRXZlbnQuS2V5Ym9hcmRLZXlIb2xkKEtFWUNPREUuQVJST1dfTEVGVCwgMTAwKTtcbiAgY29uc3QgbGVmdEFyciA9IFthS2V5LCBsZWZ0S2V5XTtcblxuICBjb25zdCBzS2V5ID0gbmV3IGhvbGRFdmVudC5LZXlib2FyZEtleUhvbGQoS0VZQ09ERS5TLCAxMDApO1xuICBjb25zdCBkb3duS2V5ID0gbmV3IGhvbGRFdmVudC5LZXlib2FyZEtleUhvbGQoS0VZQ09ERS5BUlJPV19ET1dOLCAxMDApO1xuICBjb25zdCBkb3duQXJyID0gW3NLZXksIGRvd25LZXldO1xuXG4gIGNvbnN0IGRLZXkgPSBuZXcgaG9sZEV2ZW50LktleWJvYXJkS2V5SG9sZChLRVlDT0RFLkQsIDEwMCk7XG4gIGNvbnN0IHJpZ2h0S2V5ID0gbmV3IGhvbGRFdmVudC5LZXlib2FyZEtleUhvbGQoS0VZQ09ERS5BUlJPV19SSUdIVCwgMTAwKTtcbiAgY29uc3QgcmlnaHRBcnIgPSBbZEtleSwgcmlnaHRLZXldO1xuXG4gIGNvbnN0IGtleUV2ZW50cyA9IFtcbiAgICB7XG4gICAgICBrZXlzOiB1cEFycixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBjb250cm9scy5mb3J3YXJkKDEsIHRydWUpLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5czogbGVmdEFycixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBjb250cm9scy50cnVjaygtMSwgMCwgdHJ1ZSksXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXlzOiBkb3duQXJyLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IGNvbnRyb2xzLmZvcndhcmQoLTEsIHRydWUpLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5czogcmlnaHRBcnIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gY29udHJvbHMudHJ1Y2soMSwgMCwgdHJ1ZSksXG4gICAgfSxcbiAgXTtcblxuICByZXR1cm4ga2V5RXZlbnRzO1xufTtcblxuY29uc3QgZ2V0Rmxvb3JQYXJhbXMgPSAodHlwZSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBGbG9vclBhcmFtc1t0eXBlXTtcbiAgaWYgKCFwYXJhbXMpIHJldHVybiBGbG9vclBhcmFtc1snZGVmYXVsdCddO1xuICByZXR1cm4gcGFyYW1zO1xufTtcblxuY29uc3QgZ2V0TWluTWF4Q29vcmRpbmF0ZXMgPSAod2FsbHMpID0+IHtcbiAgbGV0IG1heFggPSAwO1xuICBsZXQgbWluWCA9IEluZmluaXR5O1xuICBsZXQgbWF4WSA9IDA7XG4gIGxldCBtaW5ZID0gSW5maW5pdHk7XG5cbiAgd2FsbHMuZm9yRWFjaCgoeyBzdGFydCwgZW5kIH0pID0+IHtcbiAgICAvLyBDQUxDVUxBVEUgTUFYIENPT1JEU1xuICAgIGlmIChzdGFydC54ID4gbWF4WCkgbWF4WCA9IHN0YXJ0Lng7XG4gICAgaWYgKHN0YXJ0LnggPiBtYXhYKSBtYXhYID0gc3RhcnQueDtcbiAgICBpZiAoZW5kLnkgPiBtYXhZKSBtYXhZID0gZW5kLnk7XG4gICAgaWYgKGVuZC55ID4gbWF4WSkgbWF4WSA9IGVuZC55O1xuXG4gICAgLy8gQ0FMQ1VMQVRFIE1JTiBDT09SRFNcbiAgICBpZiAoc3RhcnQueCA8IG1pblgpIG1pblggPSBzdGFydC54O1xuICAgIGlmIChzdGFydC54IDwgbWluWCkgbWluWCA9IHN0YXJ0Lng7XG4gICAgaWYgKGVuZC55IDwgbWluWSkgbWluWSA9IGVuZC55O1xuICAgIGlmIChlbmQueSA8IG1pblkpIG1pblkgPSBlbmQueTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgbWF4WCwgbWluWCwgbWF4WSwgbWluWSB9O1xufTtcblxuY29uc3QgZ2V0RGlyZWN0aW9uc0Zyb21EZWdyZWVzID0gKGRlZykgPT4ge1xuICBsZXQgZGlyZWN0aW9ucyA9IFtdO1xuICBpZiAoZGVnID4gODAgJiYgZGVnIDwgMTAwKSB7XG4gICAgZGlyZWN0aW9ucyA9IFsnZm9yd2FyZCddO1xuICB9IGVsc2UgaWYgKGRlZyA+IDEwICYmIGRlZyA8IDgwKSB7XG4gICAgZGlyZWN0aW9ucyA9IFsnZm9yd2FyZCcsICdyaWdodCddO1xuICB9IGVsc2UgaWYgKGRlZyA+IDEwMCAmJiBkZWcgPCAxNzApIHtcbiAgICBkaXJlY3Rpb25zID0gWydmb3J3YXJkJywgJ2xlZnQnXTtcbiAgfSBlbHNlIGlmIChkZWcgPiAyNjAgJiYgZGVnIDwgMjgwKSB7XG4gICAgZGlyZWN0aW9ucyA9IFsnYmFja3dhcmQnXTtcbiAgfSBlbHNlIGlmIChkZWcgPiAxOTAgJiYgZGVnIDwgMjYwKSB7XG4gICAgZGlyZWN0aW9ucyA9IFsnYmFja3dhcmQnLCAnbGVmdCddO1xuICB9IGVsc2UgaWYgKGRlZyA+IDI4MCAmJiBkZWcgPCAzNTApIHtcbiAgICBkaXJlY3Rpb25zID0gWydiYWNrd2FyZCcsICdyaWdodCddO1xuICB9IGVsc2UgaWYgKGRlZyA+IDM1MCB8fCBkZWcgPCAxMCkge1xuICAgIGRpcmVjdGlvbnMgPSBbJ3JpZ2h0J107XG4gIH0gZWxzZSBpZiAoZGVnID4gMTcwICYmIGRlZyA8IDE5MCkge1xuICAgIGRpcmVjdGlvbnMgPSBbJ2xlZnQnXTtcbiAgfVxuICByZXR1cm4gZGlyZWN0aW9ucztcbn07XG5cbmV4cG9ydCB7XG4gIGdldEtleUV2ZW50cyxcbiAgZ2V0Rmxvb3JQYXJhbXMsXG4gIGdldE1pbk1heENvb3JkaW5hdGVzLFxuICBnZXREaXJlY3Rpb25zRnJvbURlZ3JlZXMsXG59O1xuIl19