@datagrok/eda 1.1.7 → 1.1.8
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.
- package/dist/100.js +2 -0
- package/dist/111.js +2 -2
- package/dist/118.js +2 -0
- package/dist/146.js +2 -2
- package/dist/155.js +2 -2
- package/dist/221.js +2 -2
- package/dist/313.js +2 -0
- package/dist/355.js +2 -2
- package/dist/356.js +2 -2
- package/dist/44.js +2 -0
- package/dist/471.js +2 -0
- package/dist/489.js +3 -0
- package/dist/489.js.LICENSE.txt +51 -0
- package/dist/584.js +2 -2
- package/dist/604.js +2 -2
- package/dist/632.js +2 -2
- package/dist/645.js +2 -2
- package/dist/656.js +2 -0
- package/dist/664.js +2 -0
- package/dist/694.js +2 -2
- package/dist/727.js +2 -0
- package/dist/729.js +2 -2
- package/dist/796.js +2 -2
- package/dist/861.js +2 -0
- package/dist/93.js +2 -2
- package/dist/972.js +2 -0
- package/dist/package-test.js +2 -2
- package/dist/package.js +2 -2
- package/package.json +34 -4
- package/src/package.ts +45 -45
- package/dist/80.js +0 -2
package/dist/972.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[972],{7531:(t,e,r)=>{r.d(e,{Z:()=>s});const o=Object.prototype.toString;function s(t){return o.call(t).endsWith("Array]")}},5111:(t,e,r)=>{r.d(e,{Z:()=>s});var o=r(6044);function s(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,o.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var r=e.fromIndex,s=void 0===r?0:r,n=e.toIndex,i=void 0===n?t.length:n;if(s<0||s>=t.length||!Number.isInteger(s))throw new Error("fromIndex must be a positive integer smaller than length");if(i<=s||i>t.length||!Number.isInteger(i))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var h=t[s],l=s+1;l<i;l++)t[l]>h&&(h=t[l]);return h}},6044:(t,e,r)=>{r.d(e,{N:()=>s});const o=Object.prototype.toString;function s(t){const e=o.call(t);return e.endsWith("Array]")&&!e.includes("Big")}},1772:(t,e,r)=>{r.d(e,{Z:()=>s});var o=r(994);function s(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,o.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var r=e.fromIndex,s=void 0===r?0:r,n=e.toIndex,i=void 0===n?t.length:n;if(s<0||s>=t.length||!Number.isInteger(s))throw new Error("fromIndex must be a positive integer smaller than length");if(i<=s||i>t.length||!Number.isInteger(i))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var h=t[s],l=s+1;l<i;l++)t[l]<h&&(h=t[l]);return h}},994:(t,e,r)=>{r.d(e,{N:()=>s});const o=Object.prototype.toString;function s(t){const e=o.call(t);return e.endsWith("Array]")&&!e.includes("Big")}},5408:(t,e,r)=>{r.d(e,{Z:()=>i});var o=r(6241),s=r(5111),n=r(1772);function i(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,o.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==r.output){if(!(0,o.N)(r.output))throw new TypeError("output option must be an array if specified");e=r.output}else e=new Array(t.length);var i=(0,n.Z)(t),h=(0,s.Z)(t);if(i===h)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var l=r.min,u=void 0===l?r.autoMinMax?i:0:l,a=r.max,f=void 0===a?r.autoMinMax?h:1:a;if(u>=f)throw new RangeError("min option must be smaller than max option");for(var c=(f-u)/(h-i),m=0;m<t.length;m++)e[m]=(t[m]-i)*c+u;return e}},6241:(t,e,r)=>{r.d(e,{N:()=>s});const o=Object.prototype.toString;function s(t){const e=o.call(t);return e.endsWith("Array]")&&!e.includes("Big")}},1353:(t,e,r)=>{function o(t,e,r){let o=0;const s=r(e);for(let e=0;e<t.x.length;e++)o+=Math.abs(t.y[e]-s(t.x[e]));return o}r.d(e,{Z:()=>o})},8188:(t,e,r)=>{r.d(e,{Z:()=>n});var o=r(1174),s=r(8345);function n(t,e,r,n,i){let h=r*n*n,l=o.Z.eye(e.length,e.length,h);const u=i(e);let a=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)a[e]=u(t.x[e]);let f=function(t,e,r,s,n){const i=r.length,h=t.x.length;let l=new Array(i);for(let o=0;o<i;o++){l[o]=new Array(h);let i=r.slice();i[o]+=s;let u=n(i);for(let r=0;r<h;r++)l[o][r]=e[r]-u(t.x[r])}return new o.Z(l)}(t,a,e,n,i),c=function(t,e){const r=t.x.length;let s=new Array(r);for(let o=0;o<r;o++)s[o]=[t.y[o]-e[o]];return new o.Z(s)}(t,a),m=(0,s.S)(l.add(f.mmul(f.transpose())));return(e=(e=new o.Z([e])).sub(m.mmul(f).mmul(c).mul(n).transpose())).to1DArray()}},5776:(t,e,r)=>{r.d(e,{N:()=>s});const o=Object.prototype.toString;function s(t){const e=o.call(t);return e.endsWith("Array]")&&!e.includes("Big")}},2313:(t,e,r)=>{r.d(e,{Z:()=>n});var o=r(1174),s=r(8353);class n{constructor(t){let e,r,o,n,i,h,l,u,a,f=(t=s.Z.checkMatrix(t)).clone(),c=f.rows,m=f.columns,w=new Float64Array(c),g=1;for(e=0;e<c;e++)w[e]=e;for(u=new Float64Array(c),r=0;r<m;r++){for(e=0;e<c;e++)u[e]=f.get(e,r);for(e=0;e<c;e++){for(a=Math.min(e,r),i=0,o=0;o<a;o++)i+=f.get(e,o)*u[o];u[e]-=i,f.set(e,r,u[e])}for(n=r,e=r+1;e<c;e++)Math.abs(u[e])>Math.abs(u[n])&&(n=e);if(n!==r){for(o=0;o<m;o++)h=f.get(n,o),f.set(n,o,f.get(r,o)),f.set(r,o,h);l=w[n],w[n]=w[r],w[r]=l,g=-g}if(r<c&&0!==f.get(r,r))for(e=r+1;e<c;e++)f.set(e,r,f.get(e,r)/f.get(r,r))}this.LU=f,this.pivotVector=w,this.pivotSign=g}isSingular(){let t=this.LU,e=t.columns;for(let r=0;r<e;r++)if(0===t.get(r,r))return!0;return!1}solve(t){t=o.Z.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let r,s,n,i=t.columns,h=t.subMatrixRow(this.pivotVector,0,i-1),l=e.columns;for(n=0;n<l;n++)for(r=n+1;r<l;r++)for(s=0;s<i;s++)h.set(r,s,h.get(r,s)-h.get(n,s)*e.get(r,n));for(n=l-1;n>=0;n--){for(s=0;s<i;s++)h.set(n,s,h.get(n,s)/e.get(n,n));for(r=0;r<n;r++)for(s=0;s<i;s++)h.set(r,s,h.get(r,s)-h.get(n,s)*e.get(r,n))}return h}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,r=t.columns;for(let o=0;o<r;o++)e*=t.get(o,o);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,s=new o.Z(e,r);for(let o=0;o<e;o++)for(let e=0;e<r;e++)o>e?s.set(o,e,t.get(o,e)):o===e?s.set(o,e,1):s.set(o,e,0);return s}get upperTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,s=new o.Z(e,r);for(let o=0;o<e;o++)for(let e=0;e<r;e++)o<=e?s.set(o,e,t.get(o,e)):s.set(o,e,0);return s}get pivotPermutationVector(){return Array.from(this.pivotVector)}}},7072:(t,e,r)=>{r.d(e,{Z:()=>i});var o=r(1174),s=r(8353),n=r(6310);class i{constructor(t){let e,r,o,i,h=(t=s.Z.checkMatrix(t)).clone(),l=t.rows,u=t.columns,a=new Float64Array(u);for(o=0;o<u;o++){let t=0;for(e=o;e<l;e++)t=(0,n.G)(t,h.get(e,o));if(0!==t){for(h.get(o,o)<0&&(t=-t),e=o;e<l;e++)h.set(e,o,h.get(e,o)/t);for(h.set(o,o,h.get(o,o)+1),r=o+1;r<u;r++){for(i=0,e=o;e<l;e++)i+=h.get(e,o)*h.get(e,r);for(i=-i/h.get(o,o),e=o;e<l;e++)h.set(e,r,h.get(e,r)+i*h.get(e,o))}}a[o]=-t}this.QR=h,this.Rdiag=a}solve(t){t=o.Z.checkMatrix(t);let e=this.QR,r=e.rows;if(t.rows!==r)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let s,n,i,h,l=t.columns,u=t.clone(),a=e.columns;for(i=0;i<a;i++)for(n=0;n<l;n++){for(h=0,s=i;s<r;s++)h+=e.get(s,i)*u.get(s,n);for(h=-h/e.get(i,i),s=i;s<r;s++)u.set(s,n,u.get(s,n)+h*e.get(s,i))}for(i=a-1;i>=0;i--){for(n=0;n<l;n++)u.set(i,n,u.get(i,n)/this.Rdiag[i]);for(s=0;s<i;s++)for(n=0;n<l;n++)u.set(s,n,u.get(s,n)-u.get(i,n)*e.get(s,i))}return u.subMatrix(0,a-1,0,l-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(0===this.Rdiag[e])return!1;return!0}get upperTriangularMatrix(){let t,e,r=this.QR,s=r.columns,n=new o.Z(s,s);for(t=0;t<s;t++)for(e=0;e<s;e++)t<e?n.set(t,e,r.get(t,e)):t===e?n.set(t,e,this.Rdiag[t]):n.set(t,e,0);return n}get orthogonalMatrix(){let t,e,r,s,n=this.QR,i=n.rows,h=n.columns,l=new o.Z(i,h);for(r=h-1;r>=0;r--){for(t=0;t<i;t++)l.set(t,r,0);for(l.set(r,r,1),e=r;e<h;e++)if(0!==n.get(r,r)){for(s=0,t=r;t<i;t++)s+=n.get(t,r)*l.get(t,e);for(s=-s/n.get(r,r),t=r;t<i;t++)l.set(t,e,l.get(t,e)+s*n.get(t,r))}}return l}}},6943:(t,e,r)=>{r.d(e,{Z:()=>i});var o=r(1174),s=r(8353),n=r(6310);class i{constructor(t,e={}){if((t=s.Z.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let r=t.rows,i=t.columns;const{computeLeftSingularVectors:h=!0,computeRightSingularVectors:l=!0,autoTranspose:u=!1}=e;let a,f=Boolean(h),c=Boolean(l),m=!1;if(r<i)if(u){a=t.transpose(),r=a.rows,i=a.columns,m=!0;let e=f;f=c,c=e}else a=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else a=t.clone();let w=Math.min(r,i),g=Math.min(r+1,i),p=new Float64Array(g),d=new o.Z(r,w),y=new o.Z(i,i),b=new Float64Array(i),M=new Float64Array(r),x=new Float64Array(g);for(let t=0;t<g;t++)x[t]=t;let E=Math.min(r-1,i),v=Math.max(0,Math.min(i-2,r)),S=Math.max(E,v);for(let t=0;t<S;t++){if(t<E){p[t]=0;for(let e=t;e<r;e++)p[t]=(0,n.G)(p[t],a.get(e,t));if(0!==p[t]){a.get(t,t)<0&&(p[t]=-p[t]);for(let e=t;e<r;e++)a.set(e,t,a.get(e,t)/p[t]);a.set(t,t,a.get(t,t)+1)}p[t]=-p[t]}for(let e=t+1;e<i;e++){if(t<E&&0!==p[t]){let o=0;for(let s=t;s<r;s++)o+=a.get(s,t)*a.get(s,e);o=-o/a.get(t,t);for(let s=t;s<r;s++)a.set(s,e,a.get(s,e)+o*a.get(s,t))}b[e]=a.get(t,e)}if(f&&t<E)for(let e=t;e<r;e++)d.set(e,t,a.get(e,t));if(t<v){b[t]=0;for(let e=t+1;e<i;e++)b[t]=(0,n.G)(b[t],b[e]);if(0!==b[t]){b[t+1]<0&&(b[t]=0-b[t]);for(let e=t+1;e<i;e++)b[e]/=b[t];b[t+1]+=1}if(b[t]=-b[t],t+1<r&&0!==b[t]){for(let e=t+1;e<r;e++)M[e]=0;for(let e=t+1;e<r;e++)for(let r=t+1;r<i;r++)M[e]+=b[r]*a.get(e,r);for(let e=t+1;e<i;e++){let o=-b[e]/b[t+1];for(let s=t+1;s<r;s++)a.set(s,e,a.get(s,e)+o*M[s])}}if(c)for(let e=t+1;e<i;e++)y.set(e,t,b[e])}}let R=Math.min(i,r+1);if(E<i&&(p[E]=a.get(E,E)),r<R&&(p[R-1]=0),v+1<R&&(b[v]=a.get(v,R-1)),b[R-1]=0,f){for(let t=E;t<w;t++){for(let e=0;e<r;e++)d.set(e,t,0);d.set(t,t,1)}for(let t=E-1;t>=0;t--)if(0!==p[t]){for(let e=t+1;e<w;e++){let o=0;for(let s=t;s<r;s++)o+=d.get(s,t)*d.get(s,e);o=-o/d.get(t,t);for(let s=t;s<r;s++)d.set(s,e,d.get(s,e)+o*d.get(s,t))}for(let e=t;e<r;e++)d.set(e,t,-d.get(e,t));d.set(t,t,1+d.get(t,t));for(let e=0;e<t-1;e++)d.set(e,t,0)}else{for(let e=0;e<r;e++)d.set(e,t,0);d.set(t,t,1)}}if(c)for(let t=i-1;t>=0;t--){if(t<v&&0!==b[t])for(let e=t+1;e<i;e++){let r=0;for(let o=t+1;o<i;o++)r+=y.get(o,t)*y.get(o,e);r=-r/y.get(t+1,t);for(let o=t+1;o<i;o++)y.set(o,e,y.get(o,e)+r*y.get(o,t))}for(let e=0;e<i;e++)y.set(e,t,0);y.set(t,t,1)}let N=R-1,k=0,T=Number.EPSILON;for(;R>0;){let t,e;for(t=R-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+T*Math.abs(p[t]+Math.abs(p[t+1]));if(Math.abs(b[t])<=e||Number.isNaN(b[t])){b[t]=0;break}}if(t===R-2)e=4;else{let r;for(r=R-1;r>=t&&r!==t;r--){let e=(r!==R?Math.abs(b[r]):0)+(r!==t+1?Math.abs(b[r-1]):0);if(Math.abs(p[r])<=T*e){p[r]=0;break}}r===t?e=3:r===R-1?e=1:(e=2,t=r)}switch(t++,e){case 1:{let e=b[R-2];b[R-2]=0;for(let r=R-2;r>=t;r--){let o=(0,n.G)(p[r],e),s=p[r]/o,h=e/o;if(p[r]=o,r!==t&&(e=-h*b[r-1],b[r-1]=s*b[r-1]),c)for(let t=0;t<i;t++)o=s*y.get(t,r)+h*y.get(t,R-1),y.set(t,R-1,-h*y.get(t,r)+s*y.get(t,R-1)),y.set(t,r,o)}break}case 2:{let e=b[t-1];b[t-1]=0;for(let o=t;o<R;o++){let s=(0,n.G)(p[o],e),i=p[o]/s,h=e/s;if(p[o]=s,e=-h*b[o],b[o]=i*b[o],f)for(let e=0;e<r;e++)s=i*d.get(e,o)+h*d.get(e,t-1),d.set(e,t-1,-h*d.get(e,o)+i*d.get(e,t-1)),d.set(e,o,s)}break}case 3:{const e=Math.max(Math.abs(p[R-1]),Math.abs(p[R-2]),Math.abs(b[R-2]),Math.abs(p[t]),Math.abs(b[t])),o=p[R-1]/e,s=p[R-2]/e,h=b[R-2]/e,l=p[t]/e,u=b[t]/e,a=((s+o)*(s-o)+h*h)/2,m=o*h*(o*h);let w=0;0===a&&0===m||(w=a<0?0-Math.sqrt(a*a+m):Math.sqrt(a*a+m),w=m/(a+w));let g=(l+o)*(l-o)+w,M=l*u;for(let e=t;e<R-1;e++){let o=(0,n.G)(g,M);0===o&&(o=Number.MIN_VALUE);let s=g/o,h=M/o;if(e!==t&&(b[e-1]=o),g=s*p[e]+h*b[e],b[e]=s*b[e]-h*p[e],M=h*p[e+1],p[e+1]=s*p[e+1],c)for(let t=0;t<i;t++)o=s*y.get(t,e)+h*y.get(t,e+1),y.set(t,e+1,-h*y.get(t,e)+s*y.get(t,e+1)),y.set(t,e,o);if(o=(0,n.G)(g,M),0===o&&(o=Number.MIN_VALUE),s=g/o,h=M/o,p[e]=o,g=s*b[e]+h*p[e+1],p[e+1]=-h*b[e]+s*p[e+1],M=h*b[e+1],b[e+1]=s*b[e+1],f&&e<r-1)for(let t=0;t<r;t++)o=s*d.get(t,e)+h*d.get(t,e+1),d.set(t,e+1,-h*d.get(t,e)+s*d.get(t,e+1)),d.set(t,e,o)}b[R-2]=g,k+=1;break}case 4:if(p[t]<=0&&(p[t]=p[t]<0?-p[t]:0,c))for(let e=0;e<=N;e++)y.set(e,t,-y.get(e,t));for(;t<N&&!(p[t]>=p[t+1]);){let e=p[t];if(p[t]=p[t+1],p[t+1]=e,c&&t<i-1)for(let r=0;r<i;r++)e=y.get(r,t+1),y.set(r,t+1,y.get(r,t)),y.set(r,t,e);if(f&&t<r-1)for(let o=0;o<r;o++)e=d.get(o,t+1),d.set(o,t+1,d.get(o,t)),d.set(o,t,e);t++}k=0,R--}}if(m){let t=y;y=d,d=t}this.m=r,this.n=i,this.s=p,this.U=d,this.V=y}solve(t){let e=t,r=this.threshold,s=this.s.length,n=o.Z.zeros(s,s);for(let t=0;t<s;t++)Math.abs(this.s[t])<=r?n.set(t,t,0):n.set(t,t,1/this.s[t]);let i=this.U,h=this.rightSingularVectors,l=h.mmul(n),u=h.rows,a=i.rows,f=o.Z.zeros(u,a);for(let t=0;t<u;t++)for(let e=0;e<a;e++){let r=0;for(let o=0;o<s;o++)r+=l.get(t,o)*i.get(e,o);f.set(t,e,r)}return f.mmul(e)}solveForDiagonal(t){return this.solve(o.Z.diag(t))}inverse(){let t=this.V,e=this.threshold,r=t.rows,s=t.columns,n=new o.Z(r,this.s.length);for(let o=0;o<r;o++)for(let r=0;r<s;r++)Math.abs(this.s[r])>e&&n.set(o,r,t.get(o,r)/this.s[r]);let i=this.U,h=i.rows,l=i.columns,u=new o.Z(r,h);for(let t=0;t<r;t++)for(let e=0;e<h;e++){let r=0;for(let o=0;o<l;o++)r+=n.get(t,o)*i.get(e,o);u.set(t,e,r)}return u}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,r=this.s;for(let o=0,s=r.length;o<s;o++)r[o]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return o.Z.diag(this.s)}}},6310:(t,e,r)=>{function o(t,e){let r=0;return Math.abs(t)>Math.abs(e)?(r=e/t,Math.abs(t)*Math.sqrt(1+r*r)):0!==e?(r=t/e,Math.abs(e)*Math.sqrt(1+r*r)):0}r.d(e,{G:()=>o})},8345:(t,e,r)=>{r.d(e,{S:()=>l});var o=r(2313),s=r(7072),n=r(6943),i=r(1174),h=r(8353);function l(t,e=!1){return t=h.Z.checkMatrix(t),e?new n.Z(t).inverse():function(t,e,r=!1){return t=h.Z.checkMatrix(t),e=h.Z.checkMatrix(e),r?new n.Z(t).solve(e):t.isSquare()?new o.Z(t).solve(e):new s.Z(t).solve(e)}(t,i.Z.eye(t.rows))}},3559:(t,e,r)=>{r.d(e,{M:()=>i,V:()=>n});const o=" ".repeat(2),s=" ".repeat(4);function n(){return i(this)}function i(t,e={}){const{maxRows:r=15,maxColumns:n=10,maxNumSize:i=8,padMinus:l="auto"}=e;return`${t.constructor.name} {\n${o}[\n${s}${function(t,e,r,o,n){const{rows:i,columns:l}=t,u=Math.min(i,e),a=Math.min(l,r),f=[];if("auto"===n){n=!1;t:for(let e=0;e<u;e++)for(let r=0;r<a;r++)if(t.get(e,r)<0){n=!0;break t}}for(let e=0;e<u;e++){let r=[];for(let s=0;s<a;s++)r.push(h(t.get(e,s),o,n));f.push(`${r.join(" ")}`)}return a!==l&&(f[f.length-1]+=` ... ${l-r} more columns`),u!==i&&f.push(`... ${i-e} more rows`),f.join(`\n${s}`)}(t,r,n,i,l)}\n${o}]\n${o}rows: ${t.rows}\n${o}columns: ${t.columns}\n}`}function h(t,e,r){return(t>=0&&r?` ${l(t,e-1)}`:l(t,e)).padEnd(e)}function l(t,e){let r=t.toString();if(r.length<=e)return r;let o=t.toFixed(e);if(o.length>e&&(o=t.toFixed(Math.max(0,e-(o.length-e)))),o.length<=e&&!o.startsWith("0.000")&&!o.startsWith("-0.000"))return o;let s=t.toExponential(e);return s.length>e&&(s=t.toExponential(Math.max(0,e-(s.length-e)))),s.slice(0)}},5401:(t,e,r)=>{function o(t,e){t.prototype.add=function(t){return"number"==typeof t?this.addS(t):this.addM(t)},t.prototype.addS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t);return this},t.prototype.addM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t.get(e,r));return this},t.add=function(t,r){return new e(t).add(r)},t.prototype.sub=function(t){return"number"==typeof t?this.subS(t):this.subM(t)},t.prototype.subS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t);return this},t.prototype.subM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t.get(e,r));return this},t.sub=function(t,r){return new e(t).sub(r)},t.prototype.subtract=t.prototype.sub,t.prototype.subtractS=t.prototype.subS,t.prototype.subtractM=t.prototype.subM,t.subtract=t.sub,t.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):this.mulM(t)},t.prototype.mulS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t);return this},t.prototype.mulM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t.get(e,r));return this},t.mul=function(t,r){return new e(t).mul(r)},t.prototype.multiply=t.prototype.mul,t.prototype.multiplyS=t.prototype.mulS,t.prototype.multiplyM=t.prototype.mulM,t.multiply=t.mul,t.prototype.div=function(t){return"number"==typeof t?this.divS(t):this.divM(t)},t.prototype.divS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t);return this},t.prototype.divM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t.get(e,r));return this},t.div=function(t,r){return new e(t).div(r)},t.prototype.divide=t.prototype.div,t.prototype.divideS=t.prototype.divS,t.prototype.divideM=t.prototype.divM,t.divide=t.div,t.prototype.mod=function(t){return"number"==typeof t?this.modS(t):this.modM(t)},t.prototype.modS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)%t);return this},t.prototype.modM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)%t.get(e,r));return this},t.mod=function(t,r){return new e(t).mod(r)},t.prototype.modulus=t.prototype.mod,t.prototype.modulusS=t.prototype.modS,t.prototype.modulusM=t.prototype.modM,t.modulus=t.mod,t.prototype.and=function(t){return"number"==typeof t?this.andS(t):this.andM(t)},t.prototype.andS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)&t);return this},t.prototype.andM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)&t.get(e,r));return this},t.and=function(t,r){return new e(t).and(r)},t.prototype.or=function(t){return"number"==typeof t?this.orS(t):this.orM(t)},t.prototype.orS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)|t);return this},t.prototype.orM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)|t.get(e,r));return this},t.or=function(t,r){return new e(t).or(r)},t.prototype.xor=function(t){return"number"==typeof t?this.xorS(t):this.xorM(t)},t.prototype.xorS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)^t);return this},t.prototype.xorM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)^t.get(e,r));return this},t.xor=function(t,r){return new e(t).xor(r)},t.prototype.leftShift=function(t){return"number"==typeof t?this.leftShiftS(t):this.leftShiftM(t)},t.prototype.leftShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)<<t);return this},t.prototype.leftShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)<<t.get(e,r));return this},t.leftShift=function(t,r){return new e(t).leftShift(r)},t.prototype.signPropagatingRightShift=function(t){return"number"==typeof t?this.signPropagatingRightShiftS(t):this.signPropagatingRightShiftM(t)},t.prototype.signPropagatingRightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>t.get(e,r));return this},t.signPropagatingRightShift=function(t,r){return new e(t).signPropagatingRightShift(r)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>>t.get(e,r));return this},t.rightShift=function(t,r){return new e(t).rightShift(r)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,~this.get(t,e));return this},t.not=function(t){return new e(t).not()},t.prototype.abs=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.abs(this.get(t,e)));return this},t.abs=function(t){return new e(t).abs()},t.prototype.acos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acos(this.get(t,e)));return this},t.acos=function(t){return new e(t).acos()},t.prototype.acosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acosh(this.get(t,e)));return this},t.acosh=function(t){return new e(t).acosh()},t.prototype.asin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asin(this.get(t,e)));return this},t.asin=function(t){return new e(t).asin()},t.prototype.asinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asinh(this.get(t,e)));return this},t.asinh=function(t){return new e(t).asinh()},t.prototype.atan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atan(this.get(t,e)));return this},t.atan=function(t){return new e(t).atan()},t.prototype.atanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atanh(this.get(t,e)));return this},t.atanh=function(t){return new e(t).atanh()},t.prototype.cbrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cbrt(this.get(t,e)));return this},t.cbrt=function(t){return new e(t).cbrt()},t.prototype.ceil=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.ceil(this.get(t,e)));return this},t.ceil=function(t){return new e(t).ceil()},t.prototype.clz32=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.clz32(this.get(t,e)));return this},t.clz32=function(t){return new e(t).clz32()},t.prototype.cos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cos(this.get(t,e)));return this},t.cos=function(t){return new e(t).cos()},t.prototype.cosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cosh(this.get(t,e)));return this},t.cosh=function(t){return new e(t).cosh()},t.prototype.exp=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.exp(this.get(t,e)));return this},t.exp=function(t){return new e(t).exp()},t.prototype.expm1=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.expm1(this.get(t,e)));return this},t.expm1=function(t){return new e(t).expm1()},t.prototype.floor=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.floor(this.get(t,e)));return this},t.floor=function(t){return new e(t).floor()},t.prototype.fround=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.fround(this.get(t,e)));return this},t.fround=function(t){return new e(t).fround()},t.prototype.log=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log(this.get(t,e)));return this},t.log=function(t){return new e(t).log()},t.prototype.log1p=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log1p(this.get(t,e)));return this},t.log1p=function(t){return new e(t).log1p()},t.prototype.log10=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log10(this.get(t,e)));return this},t.log10=function(t){return new e(t).log10()},t.prototype.log2=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log2(this.get(t,e)));return this},t.log2=function(t){return new e(t).log2()},t.prototype.round=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.round(this.get(t,e)));return this},t.round=function(t){return new e(t).round()},t.prototype.sign=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sign(this.get(t,e)));return this},t.sign=function(t){return new e(t).sign()},t.prototype.sin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sin(this.get(t,e)));return this},t.sin=function(t){return new e(t).sin()},t.prototype.sinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sinh(this.get(t,e)));return this},t.sinh=function(t){return new e(t).sinh()},t.prototype.sqrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sqrt(this.get(t,e)));return this},t.sqrt=function(t){return new e(t).sqrt()},t.prototype.tan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tan(this.get(t,e)));return this},t.tan=function(t){return new e(t).tan()},t.prototype.tanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tanh(this.get(t,e)));return this},t.tanh=function(t){return new e(t).tanh()},t.prototype.trunc=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.trunc(this.get(t,e)));return this},t.trunc=function(t){return new e(t).trunc()},t.pow=function(t,r){return new e(t).pow(r)},t.prototype.pow=function(t){return"number"==typeof t?this.powS(t):this.powM(t)},t.prototype.powS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,Math.pow(this.get(e,r),t));return this},t.prototype.powM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,Math.pow(this.get(e,r),t.get(e,r)));return this}}r.d(e,{z:()=>o})},1174:(t,e,r)=>{r.d(e,{X:()=>u,Z:()=>f});var o=r(5776),s=r(5408),n=r(3559),i=r(5401),h=r(9515),l=r(3018);class u{static from1DArray(t,e,r){if(t*e!==r.length)throw new RangeError("data length does not match given dimensions");let o=new f(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++)o.set(s,t,r[s*e+t]);return o}static rowVector(t){let e=new f(1,t.length);for(let r=0;r<t.length;r++)e.set(0,r,t[r]);return e}static columnVector(t){let e=new f(t.length,1);for(let r=0;r<t.length;r++)e.set(r,0,t[r]);return e}static zeros(t,e){return new f(t,e)}static ones(t,e){return new f(t,e).fill(1)}static rand(t,e,r={}){if("object"!=typeof r)throw new TypeError("options must be an object");const{random:o=Math.random}=r;let s=new f(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++)s.set(r,t,o());return s}static randInt(t,e,r={}){if("object"!=typeof r)throw new TypeError("options must be an object");const{min:o=0,max:s=1e3,random:n=Math.random}=r;if(!Number.isInteger(o))throw new TypeError("min must be an integer");if(!Number.isInteger(s))throw new TypeError("max must be an integer");if(o>=s)throw new RangeError("min must be smaller than max");let i=s-o,h=new f(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++){let e=o+Math.round(n()*i);h.set(r,t,e)}return h}static eye(t,e,r){void 0===e&&(e=t),void 0===r&&(r=1);let o=Math.min(t,e),s=this.zeros(t,e);for(let t=0;t<o;t++)s.set(t,t,r);return s}static diag(t,e,r){let o=t.length;void 0===e&&(e=o),void 0===r&&(r=e);let s=Math.min(o,e,r),n=this.zeros(e,r);for(let e=0;e<s;e++)n.set(e,e,t[e]);return n}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let r=t.rows,o=t.columns,s=new f(r,o);for(let n=0;n<r;n++)for(let r=0;r<o;r++)s.set(n,r,Math.min(t.get(n,r),e.get(n,r)));return s}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let r=t.rows,o=t.columns,s=new this(r,o);for(let n=0;n<r;n++)for(let r=0;r<o;r++)s.set(n,r,Math.max(t.get(n,r),e.get(n,r)));return s}static checkMatrix(t){return u.isMatrix(t)?t:new f(t)}static isMatrix(t){return null!=t&&"Matrix"===t.klass}get size(){return this.rows*this.columns}apply(t){if("function"!=typeof t)throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.call(this,e,r);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.push(this.get(e,r));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let r=0;r<this.columns;r++)t[e].push(this.get(e,r))}return t}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,r=-1,o=!0,s=!1;for(;t<this.rows&&o;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>r?(s=!0,r=e):(o=!1,s=!0);t++}return o}isReducedEchelonForm(){let t=0,e=0,r=-1,o=!0,s=!1;for(;t<this.rows&&o;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>r?(s=!0,r=e):(o=!1,s=!0);for(let r=e+1;r<this.rows;r++)0!==this.get(t,r)&&(o=!1);t++}return o}echelonForm(){let t=this.clone(),e=0,r=0;for(;e<t.rows&&r<t.columns;){let o=e;for(let s=e;s<t.rows;s++)t.get(s,r)>t.get(o,r)&&(o=s);if(0===t.get(o,r))r++;else{t.swapRows(e,o);let s=t.get(e,r);for(let o=r;o<t.columns;o++)t.set(e,o,t.get(e,o)/s);for(let o=e+1;o<t.rows;o++){let s=t.get(o,r)/t.get(e,r);t.set(o,r,0);for(let n=r+1;n<t.columns;n++)t.set(o,n,t.get(o,n)-t.get(e,n)*s)}e++,r++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,r=t.rows,o=r-1;for(;o>=0;)if(0===t.maxRow(o))o--;else{let s=0,n=!1;for(;s<r&&!1===n;)1===t.get(o,s)?n=!0:s++;for(let r=0;r<o;r++){let n=t.get(r,s);for(let i=s;i<e;i++){let e=t.get(r,i)-n*t.get(o,i);t.set(r,i,e)}}o--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:r=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(r)||r<=0)throw new TypeError("columns must be a positive integer");let o=new f(this.rows*e,this.columns*r);for(let t=0;t<e;t++)for(let e=0;e<r;e++)o.setSubMatrix(this,this.rows*t,this.columns*e);return o}fill(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,t);return this}neg(){return this.mulS(-1)}getRow(t){(0,l.zb)(this,t);let e=[];for(let r=0;r<this.columns;r++)e.push(this.get(t,r));return e}getRowVector(t){return f.rowVector(this.getRow(t))}setRow(t,e){(0,l.zb)(this,t),e=(0,l.on)(this,e);for(let r=0;r<this.columns;r++)this.set(t,r,e[r]);return this}swapRows(t,e){(0,l.zb)(this,t),(0,l.zb)(this,e);for(let r=0;r<this.columns;r++){let o=this.get(t,r);this.set(t,r,this.get(e,r)),this.set(e,r,o)}return this}getColumn(t){(0,l.bp)(this,t);let e=[];for(let r=0;r<this.rows;r++)e.push(this.get(r,t));return e}getColumnVector(t){return f.columnVector(this.getColumn(t))}setColumn(t,e){(0,l.bp)(this,t),e=(0,l.Um)(this,e);for(let r=0;r<this.rows;r++)this.set(r,t,e[r]);return this}swapColumns(t,e){(0,l.bp)(this,t),(0,l.bp)(this,e);for(let r=0;r<this.rows;r++){let o=this.get(r,t);this.set(r,t,this.get(r,e)),this.set(r,e,o)}return this}addRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t[r]);return this}subRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t[r]);return this}mulRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t[r]);return this}divRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t[r]);return this}addColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t[e]);return this}subColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t[e]);return this}mulColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t[e]);return this}divColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t[e]);return this}mulRow(t,e){(0,l.zb)(this,t);for(let r=0;r<this.columns;r++)this.set(t,r,this.get(t,r)*e);return this}mulColumn(t,e){(0,l.bp)(this,t);for(let r=0;r<this.rows;r++)this.set(r,t,this.get(r,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t[e]&&(t[e]=this.get(e,r));return t}case"column":{const t=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t[r]&&(t[r]=this.get(e,r));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t&&(t=this.get(e,r));return t}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){(0,l.cT)(this);let t=this.get(0,0),e=[0,0];for(let r=0;r<this.rows;r++)for(let o=0;o<this.columns;o++)this.get(r,o)>t&&(t=this.get(r,o),e[0]=r,e[1]=o);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t[e]&&(t[e]=this.get(e,r));return t}case"column":{const t=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t[r]&&(t[r]=this.get(e,r));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t&&(t=this.get(e,r));return t}default:throw new Error(`invalid option: ${t}`)}}minIndex(){(0,l.cT)(this);let t=this.get(0,0),e=[0,0];for(let r=0;r<this.rows;r++)for(let o=0;o<this.columns;o++)this.get(r,o)<t&&(t=this.get(r,o),e[0]=r,e[1]=o);return e}maxRow(t){if((0,l.zb)(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let r=1;r<this.columns;r++)this.get(t,r)>e&&(e=this.get(t,r));return e}maxRowIndex(t){(0,l.zb)(this,t),(0,l.cT)(this);let e=this.get(t,0),r=[t,0];for(let o=1;o<this.columns;o++)this.get(t,o)>e&&(e=this.get(t,o),r[1]=o);return r}minRow(t){if((0,l.zb)(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let r=1;r<this.columns;r++)this.get(t,r)<e&&(e=this.get(t,r));return e}minRowIndex(t){(0,l.zb)(this,t),(0,l.cT)(this);let e=this.get(t,0),r=[t,0];for(let o=1;o<this.columns;o++)this.get(t,o)<e&&(e=this.get(t,o),r[1]=o);return r}maxColumn(t){if((0,l.bp)(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let r=1;r<this.rows;r++)this.get(r,t)>e&&(e=this.get(r,t));return e}maxColumnIndex(t){(0,l.bp)(this,t),(0,l.cT)(this);let e=this.get(0,t),r=[0,t];for(let o=1;o<this.rows;o++)this.get(o,t)>e&&(e=this.get(o,t),r[0]=o);return r}minColumn(t){if((0,l.bp)(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let r=1;r<this.rows;r++)this.get(r,t)<e&&(e=this.get(r,t));return e}minColumnIndex(t){(0,l.bp)(this,t),(0,l.cT)(this);let e=this.get(0,t),r=[0,t];for(let o=1;o<this.rows;o++)this.get(o,t)<e&&(e=this.get(o,t),r[0]=o);return r}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let r=0;r<t;r++)e.push(this.get(r,r));return e}norm(t="frobenius"){let e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t<this.rows;t++)for(let r=0;r<this.columns;r++)e+=this.get(t,r)*this.get(t,r);return Math.sqrt(e)}throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t+=this.get(e,r),this.set(e,r,t);return this}dot(t){u.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let r=0;for(let o=0;o<e.length;o++)r+=e[o]*t[o];return r}mmul(t){t=f.checkMatrix(t);let e=this.rows,r=this.columns,o=t.columns,s=new f(e,o),n=new Float64Array(r);for(let i=0;i<o;i++){for(let e=0;e<r;e++)n[e]=t.get(e,i);for(let t=0;t<e;t++){let e=0;for(let o=0;o<r;o++)e+=this.get(t,o)*n[o];s.set(t,i,e)}}return s}strassen2x2(t){t=f.checkMatrix(t);let e=new f(2,2);const r=this.get(0,0),o=t.get(0,0),s=this.get(0,1),n=t.get(0,1),i=this.get(1,0),h=t.get(1,0),l=this.get(1,1),u=t.get(1,1),a=(r+l)*(o+u),c=(i+l)*o,m=r*(n-u),w=l*(h-o),g=(r+s)*u,p=a+w-g+(s-l)*(h+u),d=m+g,y=c+w,b=a-c+m+(i-r)*(o+n);return e.set(0,0,p),e.set(0,1,d),e.set(1,0,y),e.set(1,1,b),e}strassen3x3(t){t=f.checkMatrix(t);let e=new f(3,3);const r=this.get(0,0),o=this.get(0,1),s=this.get(0,2),n=this.get(1,0),i=this.get(1,1),h=this.get(1,2),l=this.get(2,0),u=this.get(2,1),a=this.get(2,2),c=t.get(0,0),m=t.get(0,1),w=t.get(0,2),g=t.get(1,0),p=t.get(1,1),d=t.get(1,2),y=t.get(2,0),b=t.get(2,1),M=t.get(2,2),x=(r-n)*(-m+p),E=(-r+n+i)*(c-m+p),v=(n+i)*(-c+m),S=r*c,R=(-r+l+u)*(c-w+d),N=(-r+l)*(w-d),k=(l+u)*(-c+w),T=(-s+u+a)*(p+y-b),I=(s-a)*(p-b),A=s*y,Z=(u+a)*(-y+b),V=(-s+i+h)*(d+y-M),C=(s-h)*(d-M),q=(i+h)*(-y+M),F=S+A+o*g,z=(r+o+s-n-i-u-a)*p+E+v+S+T+A+Z,j=S+R+k+(r+o+s-i-h-l-u)*d+A+V+q,$=x+i*(-c+m+g-p-d-y+M)+E+S+A+V+C,U=x+E+v+S+h*b,P=A+V+C+q+n*w,D=S+R+N+u*(-c+w+g-p-d-y+b)+T+I+A,L=T+I+A+Z+l*m,G=S+R+N+k+a*M;return e.set(0,0,F),e.set(0,1,z),e.set(0,2,j),e.set(1,0,$),e.set(1,1,U),e.set(1,2,P),e.set(2,0,D),e.set(2,1,L),e.set(2,2,G),e}mmulStrassen(t){t=f.checkMatrix(t);let e=this.clone(),r=e.rows,o=e.columns,s=t.rows,n=t.columns;function i(t,e,r){let o=t.rows,s=t.columns;if(o===e&&s===r)return t;{let o=u.zeros(e,r);return o=o.setSubMatrix(t,0,0),o}}o!==s&&console.warn(`Multiplying ${r} x ${o} and ${s} x ${n} matrix: dimensions do not match.`);let h=Math.max(r,s),l=Math.max(o,n);return e=i(e,h,l),function t(e,r,o,s){if(o<=512||s<=512)return e.mmul(r);o%2==1&&s%2==1?(e=i(e,o+1,s+1),r=i(r,o+1,s+1)):o%2==1?(e=i(e,o+1,s),r=i(r,o+1,s)):s%2==1&&(e=i(e,o,s+1),r=i(r,o,s+1));let n=parseInt(e.rows/2,10),h=parseInt(e.columns/2,10),l=e.subMatrix(0,n-1,0,h-1),a=r.subMatrix(0,n-1,0,h-1),f=e.subMatrix(0,n-1,h,e.columns-1),c=r.subMatrix(0,n-1,h,r.columns-1),m=e.subMatrix(n,e.rows-1,0,h-1),w=r.subMatrix(n,r.rows-1,0,h-1),g=e.subMatrix(n,e.rows-1,h,e.columns-1),p=r.subMatrix(n,r.rows-1,h,r.columns-1),d=t(u.add(l,g),u.add(a,p),n,h),y=t(u.add(m,g),a,n,h),b=t(l,u.sub(c,p),n,h),M=t(g,u.sub(w,a),n,h),x=t(u.add(l,f),p,n,h),E=t(u.sub(m,l),u.add(a,c),n,h),v=t(u.sub(f,g),u.add(w,p),n,h),S=u.add(d,M);S.sub(x),S.add(v);let R=u.add(b,x),N=u.add(y,M),k=u.sub(d,y);k.add(b),k.add(E);let T=u.zeros(2*S.rows,2*S.columns);return T=T.setSubMatrix(S,0,0),T=T.setSubMatrix(R,S.rows,0),T=T.setSubMatrix(N,0,S.columns),T=T.setSubMatrix(k,S.rows,S.columns),T.subMatrix(0,o-1,0,s-1)}(e,t=i(t,h,l),h,l)}scaleRows(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");let o=new f(this.rows,this.columns);for(let t=0;t<this.rows;t++){const n=this.getRow(t);n.length>0&&(0,s.Z)(n,{min:e,max:r,output:n}),o.setRow(t,n)}return o}scaleColumns(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");let o=new f(this.rows,this.columns);for(let t=0;t<this.columns;t++){const n=this.getColumn(t);n.length&&(0,s.Z)(n,{min:e,max:r,output:n}),o.setColumn(t,n)}return o}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let r=0;r<t;r++){let t=this.get(e,r),o=this.get(e,this.columns-1-r);this.set(e,r,o),this.set(e,this.columns-1-r,t)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let r=0;r<t;r++){let t=this.get(r,e),o=this.get(this.rows-1-r,e);this.set(r,e,o),this.set(this.rows-1-r,e,t)}return this}kroneckerProduct(t){t=f.checkMatrix(t);let e=this.rows,r=this.columns,o=t.rows,s=t.columns,n=new f(e*o,r*s);for(let i=0;i<e;i++)for(let e=0;e<r;e++)for(let r=0;r<o;r++)for(let h=0;h<s;h++)n.set(o*i+r,s*e+h,this.get(i,e)*t.get(r,h));return n}kroneckerSum(t){if(t=f.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,r=t.rows,o=this.kroneckerProduct(f.eye(r,r)),s=f.eye(e,e).kroneckerProduct(t);return o.add(s)}transpose(){let t=new f(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.set(r,e,this.get(e,r));return t}sortRows(t=a){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=a){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,r,o){(0,l.J5)(this,t,e,r,o);let s=new f(e-t+1,o-r+1);for(let n=t;n<=e;n++)for(let e=r;e<=o;e++)s.set(n-t,e-r,this.get(n,e));return s}subMatrixRow(t,e,r){if(void 0===e&&(e=0),void 0===r&&(r=this.columns-1),e>r||e<0||e>=this.columns||r<0||r>=this.columns)throw new RangeError("Argument out of range");let o=new f(t.length,r-e+1);for(let s=0;s<t.length;s++)for(let n=e;n<=r;n++){if(t[s]<0||t[s]>=this.rows)throw new RangeError(`Row index out of range: ${t[s]}`);o.set(s,n-e,this.get(t[s],n))}return o}subMatrixColumn(t,e,r){if(void 0===e&&(e=0),void 0===r&&(r=this.rows-1),e>r||e<0||e>=this.rows||r<0||r>=this.rows)throw new RangeError("Argument out of range");let o=new f(r-e+1,t.length);for(let s=0;s<t.length;s++)for(let n=e;n<=r;n++){if(t[s]<0||t[s]>=this.columns)throw new RangeError(`Column index out of range: ${t[s]}`);o.set(n-e,s,this.get(n,t[s]))}return o}setSubMatrix(t,e,r){if((t=f.checkMatrix(t)).isEmpty())return this;let o=e+t.rows-1,s=r+t.columns-1;(0,l.J5)(this,e,o,r,s);for(let o=0;o<t.rows;o++)for(let s=0;s<t.columns;s++)this.set(e+o,r+s,t.get(o,s));return this}selection(t,e){(0,l.ZR)(this,t),(0,l.g)(this,e);let r=new f(t.length,e.length);for(let o=0;o<t.length;o++){let s=t[o];for(let t=0;t<e.length;t++){let n=e[t];r.set(o,t,this.get(s,n))}}return r}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let r=0;r<t;r++)e+=this.get(r,r);return e}clone(){let t=new f(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.set(e,r,this.get(e,r));return t}sum(t){switch(t){case"row":return(0,h.bQ)(this);case"column":return(0,h.Dm)(this);case void 0:return(0,h.xo)(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return(0,h.Pw)(this);case"column":return(0,h.PI)(this);case void 0:return(0,h.tT)(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":for(let t=0;t<this.rows;t++)e[t]/=this.columns;return e;case"column":for(let t=0;t<this.columns;t++)e[t]/=this.rows;return e;case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:r=!0,mean:s=this.mean(t)}=e;if("boolean"!=typeof r)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!(0,o.N)(s))throw new TypeError("mean must be an array");return(0,h.we)(this,r,s);case"column":if(!(0,o.N)(s))throw new TypeError("mean must be an array");return(0,h._G)(this,r,s);case void 0:if("number"!=typeof s)throw new TypeError("mean must be a number");return(0,h.C)(this,r,s);default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const r=this.variance(t,e);if(void 0===t)return Math.sqrt(r);for(let t=0;t<r.length;t++)r[t]=Math.sqrt(r[t]);return r}center(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:r=this.mean(t)}=e;switch(t){case"row":if(!(0,o.N)(r))throw new TypeError("center must be an array");return(0,h.rU)(this,r),this;case"column":if(!(0,o.N)(r))throw new TypeError("center must be an array");return(0,h._f)(this,r),this;case void 0:if("number"!=typeof r)throw new TypeError("center must be a number");return(0,h.mm)(this,r),this;default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let r=e.scale;switch(t){case"row":if(void 0===r)r=(0,h.kn)(this);else if(!(0,o.N)(r))throw new TypeError("scale must be an array");return(0,h.DU)(this,r),this;case"column":if(void 0===r)r=(0,h.Pr)(this);else if(!(0,o.N)(r))throw new TypeError("scale must be an array");return(0,h.Mj)(this,r),this;case void 0:if(void 0===r)r=(0,h.Y2)(this);else if("number"!=typeof r)throw new TypeError("scale must be a number");return(0,h.td)(this,r),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return(0,n.M)(this,t)}}function a(t,e){return t-e}u.prototype.klass="Matrix","undefined"!=typeof Symbol&&(u.prototype[Symbol.for("nodejs.util.inspect.custom")]=n.V),u.random=u.rand,u.randomInt=u.randInt,u.diagonal=u.diag,u.prototype.diagonal=u.prototype.diag,u.identity=u.eye,u.prototype.negate=u.prototype.neg,u.prototype.tensorProduct=u.prototype.kroneckerProduct;class f extends u{constructor(t,e){if(super(),f.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0){if(this.data=[],!(Number.isInteger(e)&&e>=0))throw new TypeError("nColumns must be a positive integer");for(let r=0;r<t;r++)this.data.push(new Float64Array(e))}else{if(!(0,o.N)(t))throw new TypeError("First argument must be a positive number or an array");{const r=t;if("number"!=typeof(e=(t=r.length)?r[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let o=0;o<t;o++){if(r[o].length!==e)throw new RangeError("Inconsistent array dimensions");if(!r[o].every((t=>"number"==typeof t)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(r[o]))}}}this.rows=t,this.columns=e}set(t,e,r){return this.data[t][e]=r,this}get(t,e){return this.data[t][e]}removeRow(t){return(0,l.zb)(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),(0,l.zb)(this,t,!0),e=Float64Array.from((0,l.on)(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){(0,l.bp)(this,t);for(let e=0;e<this.rows;e++){const r=new Float64Array(this.columns-1);for(let o=0;o<t;o++)r[o]=this.data[e][o];for(let o=t+1;o<this.columns;o++)r[o-1]=this.data[e][o];this.data[e]=r}return this.columns-=1,this}addColumn(t,e){void 0===e&&(e=t,t=this.columns),(0,l.bp)(this,t,!0),e=(0,l.Um)(this,e);for(let r=0;r<this.rows;r++){const o=new Float64Array(this.columns+1);let s=0;for(;s<t;s++)o[s]=this.data[r][s];for(o[s++]=e[r];s<this.columns+1;s++)o[s]=this.data[r][s-1];this.data[r]=o}return this.columns+=1,this}}(0,i.z)(u,f)},9515:(t,e,r)=>{r.d(e,{C:()=>c,DU:()=>d,Dm:()=>n,Mj:()=>b,PI:()=>l,Pr:()=>y,Pw:()=>h,Y2:()=>M,_G:()=>f,_f:()=>w,bQ:()=>s,kn:()=>p,mm:()=>g,rU:()=>m,tT:()=>u,td:()=>x,we:()=>a,xo:()=>i});var o=r(3018);function s(t){let e=(0,o.B4)(t.rows);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[r]+=t.get(r,o);return e}function n(t){let e=(0,o.B4)(t.columns);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[o]+=t.get(r,o);return e}function i(t){let e=0;for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)e+=t.get(r,o);return e}function h(t){let e=(0,o.B4)(t.rows,1);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[r]*=t.get(r,o);return e}function l(t){let e=(0,o.B4)(t.columns,1);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[o]*=t.get(r,o);return e}function u(t){let e=1;for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)e*=t.get(r,o);return e}function a(t,e,r){const o=t.rows,s=t.columns,n=[];for(let i=0;i<o;i++){let o=0,h=0,l=0;for(let e=0;e<s;e++)l=t.get(i,e)-r[i],o+=l,h+=l*l;e?n.push((h-o*o/s)/(s-1)):n.push((h-o*o/s)/s)}return n}function f(t,e,r){const o=t.rows,s=t.columns,n=[];for(let i=0;i<s;i++){let s=0,h=0,l=0;for(let e=0;e<o;e++)l=t.get(e,i)-r[i],s+=l,h+=l*l;e?n.push((h-s*s/o)/(o-1)):n.push((h-s*s/o)/o)}return n}function c(t,e,r){const o=t.rows,s=t.columns,n=o*s;let i=0,h=0,l=0;for(let e=0;e<o;e++)for(let o=0;o<s;o++)l=t.get(e,o)-r,i+=l,h+=l*l;return e?(h-i*i/n)/(n-1):(h-i*i/n)/n}function m(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e[r])}function w(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e[o])}function g(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e)}function p(t){const e=[];for(let r=0;r<t.rows;r++){let o=0;for(let e=0;e<t.columns;e++)o+=Math.pow(t.get(r,e),2)/(t.columns-1);e.push(Math.sqrt(o))}return e}function d(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e[r])}function y(t){const e=[];for(let r=0;r<t.columns;r++){let o=0;for(let e=0;e<t.rows;e++)o+=Math.pow(t.get(e,r),2)/(t.rows-1);e.push(Math.sqrt(o))}return e}function b(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e[o])}function M(t){const e=t.size-1;let r=0;for(let o=0;o<t.columns;o++)for(let s=0;s<t.rows;s++)r+=Math.pow(t.get(s,o),2)/e;return Math.sqrt(r)}function x(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e)}},3018:(t,e,r)=>{r.d(e,{B4:()=>f,J5:()=>a,Um:()=>h,ZR:()=>l,bp:()=>n,cT:()=>m,g:()=>u,on:()=>i,zb:()=>s});var o=r(5776);function s(t,e,r){let o=r?t.rows:t.rows-1;if(e<0||e>o)throw new RangeError("Row index out of range")}function n(t,e,r){let o=r?t.columns:t.columns-1;if(e<0||e>o)throw new RangeError("Column index out of range")}function i(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function h(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function l(t,e){if(!(0,o.N)(e))throw new TypeError("row indices must be an array");for(let r=0;r<e.length;r++)if(e[r]<0||e[r]>=t.rows)throw new RangeError("row indices are out of range")}function u(t,e){if(!(0,o.N)(e))throw new TypeError("column indices must be an array");for(let r=0;r<e.length;r++)if(e[r]<0||e[r]>=t.columns)throw new RangeError("column indices are out of range")}function a(t,e,r,o,s){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(c("startRow",e),c("endRow",r),c("startColumn",o),c("endColumn",s),e>r||o>s||e<0||e>=t.rows||r<0||r>=t.rows||o<0||o>=t.columns||s<0||s>=t.columns)throw new RangeError("Submatrix indices are out of range")}function f(t,e=0){let r=[];for(let o=0;o<t;o++)r.push(e);return r}function c(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function m(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}},8353:(t,e,r)=>{r.d(e,{Z:()=>s});var o=r(1174);class s extends o.X{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,r){return this.data[t][e]=r,this}get(t,e){return this.data[t][e]}}}}]);
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RSxFQUFZLFlBQWEvRCxHQUV2QkgsRUFBV0MsR0FDWEMsRUFBY0MsR0FDZEgsRUFBVyxHQUNYQSxHQUFZcFksRUFBT1csTUFDbkIwWCxFQUFTLEdBQ1RBLEdBQVVyWSxFQUFPVyxNQUNqQjJYLEVBQWMsR0FDZEEsR0FBZXRZLEVBQU9ZLFNBQ3RCMlgsRUFBWSxHQUNaQSxHQUFhdlksRUFBT1ksUUFFcEIsTUFBTSxJQUFJeEQsV0FBVyxxQ0FFekIsQ0FFTyxTQUFTbWYsRUFBU3pnQixFQUFRWSxFQUFRLEdBQ3ZDLElBQUl3UyxFQUFRLEdBQ1osSUFBSyxJQUFJelMsRUFBSSxFQUFHQSxFQUFJWCxFQUFRVyxJQUMxQnlTLEVBQU1qSCxLQUFLdkwsR0FFYixPQUFPd1MsQ0FDVCxDQUVBLFNBQVNvTixFQUFZM1UsRUFBTWpMLEdBQ3pCLEdBQXFCLGlCQUFWQSxFQUNULE1BQU0sSUFBSVYsVUFBVSxHQUFHMkwscUJBRTNCLENBRU8sU0FBUzZVLEVBQWN4YyxHQUM1QixHQUFJQSxFQUFPeUMsVUFDVCxNQUFNLElBQUlsRyxNQUFNLHdDQUVwQixDLGdEQ3BJZSxNQUFNa2dCLFVBQXdCLElBQzNDMWMsWUFBWXJDLEdBQ1ZxYyxRQUNBOVksS0FBS3ZELEtBQU9BLEVBQ1p1RCxLQUFLTixLQUFPakQsRUFBSzVCLE9BQ2pCbUYsS0FBS0wsUUFBVWxELEVBQUssR0FBRzVCLE1BQ3pCLENBRUFrRixJQUFJNlgsRUFBVUMsRUFBYXBjLEdBRXpCLE9BREF1RSxLQUFLdkQsS0FBS21iLEdBQVVDLEdBQWVwYyxFQUM1QnVFLElBQ1QsQ0FFQUYsSUFBSThYLEVBQVVDLEdBQ1osT0FBTzdYLEtBQUt2RCxLQUFLbWIsR0FBVUMsRUFDN0IsRSIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvc3JjL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1tYXgvbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWluL2xpYi1lczYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWFycmF5LW1pbi9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L2xpYi1lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWFycmF5LXJlc2NhbGUvbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktcmVzY2FsZS9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L2xpYi1lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvc3JjL2Vycm9yQ2FsY3VsYXRpb24uanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvc3JjL3N0ZXAuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L2xpYi1lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvbHUuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvcXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvc3ZkLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL3V0aWwuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGVjb21wb3NpdGlvbnMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvaW5zcGVjdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9tYXRoT3BlcmF0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9tYXRyaXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvc3RhdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy91dGlsLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL3dyYXAvV3JhcHBlck1hdHJpeDJELmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBbnlBcnJheShvYmplY3QpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqZWN0KS5lbmRzV2l0aCgnQXJyYXldJyk7XG59XG4iLCJpbXBvcnQgeyBpc0FueUFycmF5IH0gZnJvbSAnaXMtYW55LWFycmF5JztcblxuZnVuY3Rpb24gbWF4KGlucHV0KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICBpZiAoIWlzQW55QXJyYXkoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkZnJvbUluZGV4ID0gb3B0aW9ucy5mcm9tSW5kZXgsXG4gICAgICBmcm9tSW5kZXggPSBfb3B0aW9ucyRmcm9tSW5kZXggPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRmcm9tSW5kZXgsXG4gICAgICBfb3B0aW9ucyR0b0luZGV4ID0gb3B0aW9ucy50b0luZGV4LFxuICAgICAgdG9JbmRleCA9IF9vcHRpb25zJHRvSW5kZXggPT09IHZvaWQgMCA/IGlucHV0Lmxlbmd0aCA6IF9vcHRpb25zJHRvSW5kZXg7XG5cbiAgaWYgKGZyb21JbmRleCA8IDAgfHwgZnJvbUluZGV4ID49IGlucHV0Lmxlbmd0aCB8fCAhTnVtYmVyLmlzSW50ZWdlcihmcm9tSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmcm9tSW5kZXggbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgc21hbGxlciB0aGFuIGxlbmd0aCcpO1xuICB9XG5cbiAgaWYgKHRvSW5kZXggPD0gZnJvbUluZGV4IHx8IHRvSW5kZXggPiBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIodG9JbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvSW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBmcm9tSW5kZXggYW5kIGF0IG1vc3QgZXF1YWwgdG8gbGVuZ3RoJyk7XG4gIH1cblxuICB2YXIgbWF4VmFsdWUgPSBpbnB1dFtmcm9tSW5kZXhdO1xuXG4gIGZvciAodmFyIGkgPSBmcm9tSW5kZXggKyAxOyBpIDwgdG9JbmRleDsgaSsrKSB7XG4gICAgaWYgKGlucHV0W2ldID4gbWF4VmFsdWUpIG1heFZhbHVlID0gaW5wdXRbaV07XG4gIH1cblxuICByZXR1cm4gbWF4VmFsdWU7XG59XG5cbmV4cG9ydCB7IG1heCBhcyBkZWZhdWx0IH07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gQXJyYXkgKGFycmF5IG9yIHR5cGVkIGFycmF5LCBleGNlcHQgdGhvc2UgdGhhdCBjb250YWluIGJpZ2ludCB2YWx1ZXMpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIHR5cGVkIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IHRhZyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIHJldHVybiB0YWcuZW5kc1dpdGgoJ0FycmF5XScpICYmICF0YWcuaW5jbHVkZXMoJ0JpZycpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1pbihpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1pblZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA8IG1pblZhbHVlKSBtaW5WYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1pblZhbHVlO1xufVxuXG5leHBvcnQgeyBtaW4gYXMgZGVmYXVsdCB9O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuaW1wb3J0IG1heCBmcm9tICdtbC1hcnJheS1tYXgnO1xuaW1wb3J0IG1pbiBmcm9tICdtbC1hcnJheS1taW4nO1xuXG5mdW5jdGlvbiByZXNjYWxlKGlucHV0KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICBpZiAoIWlzQW55QXJyYXkoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICB2YXIgb3V0cHV0O1xuXG4gIGlmIChvcHRpb25zLm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpc0FueUFycmF5KG9wdGlvbnMub3V0cHV0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3V0cHV0IG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IGlmIHNwZWNpZmllZCcpO1xuICAgIH1cblxuICAgIG91dHB1dCA9IG9wdGlvbnMub3V0cHV0O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IG5ldyBBcnJheShpbnB1dC5sZW5ndGgpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRNaW4gPSBtaW4oaW5wdXQpO1xuICB2YXIgY3VycmVudE1heCA9IG1heChpbnB1dCk7XG5cbiAgaWYgKGN1cnJlbnRNaW4gPT09IGN1cnJlbnRNYXgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluaW11bSBhbmQgbWF4aW11bSBpbnB1dCB2YWx1ZXMgYXJlIGVxdWFsLiBDYW5ub3QgcmVzY2FsZSBhIGNvbnN0YW50IGFycmF5Jyk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWluID0gb3B0aW9ucy5taW4sXG4gICAgICBtaW5WYWx1ZSA9IF9vcHRpb25zJG1pbiA9PT0gdm9pZCAwID8gb3B0aW9ucy5hdXRvTWluTWF4ID8gY3VycmVudE1pbiA6IDAgOiBfb3B0aW9ucyRtaW4sXG4gICAgICBfb3B0aW9ucyRtYXggPSBvcHRpb25zLm1heCxcbiAgICAgIG1heFZhbHVlID0gX29wdGlvbnMkbWF4ID09PSB2b2lkIDAgPyBvcHRpb25zLmF1dG9NaW5NYXggPyBjdXJyZW50TWF4IDogMSA6IF9vcHRpb25zJG1heDtcblxuICBpZiAobWluVmFsdWUgPj0gbWF4VmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG9wdGlvbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXggb3B0aW9uJyk7XG4gIH1cblxuICB2YXIgZmFjdG9yID0gKG1heFZhbHVlIC0gbWluVmFsdWUpIC8gKGN1cnJlbnRNYXggLSBjdXJyZW50TWluKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIC0gY3VycmVudE1pbikgKiBmYWN0b3IgKyBtaW5WYWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmV4cG9ydCB7IHJlc2NhbGUgYXMgZGVmYXVsdCB9O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogQ2FsY3VsYXRlIGN1cnJlbnQgZXJyb3JcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7e3g6QXJyYXk8bnVtYmVyPiwgeTpBcnJheTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gcGFyYW1ldGVycyAtIEFycmF5IG9mIGN1cnJlbnQgcGFyYW1ldGVyIHZhbHVlc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlcnJvckNhbGN1bGF0aW9uKFxuICBkYXRhLFxuICBwYXJhbWV0ZXJzLFxuICBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sXG4pIHtcbiAgbGV0IGVycm9yID0gMDtcbiAgY29uc3QgZnVuYyA9IHBhcmFtZXRlcml6ZWRGdW5jdGlvbihwYXJhbWV0ZXJzKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIGVycm9yICs9IE1hdGguYWJzKGRhdGEueVtpXSAtIGZ1bmMoZGF0YS54W2ldKSk7XG4gIH1cblxuICByZXR1cm4gZXJyb3I7XG59XG4iLCJpbXBvcnQgeyBpbnZlcnNlLCBNYXRyaXggfSBmcm9tICdtbC1tYXRyaXgnO1xuXG4vKipcbiAqIERpZmZlcmVuY2Ugb2YgdGhlIG1hdHJpeCBmdW5jdGlvbiBvdmVyIHRoZSBwYXJhbWV0ZXJzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGV2YWx1YXRlZERhdGEgLSBBcnJheSBvZiBwcmV2aW91cyBldmFsdWF0ZWQgZnVuY3Rpb24gdmFsdWVzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtcyAtIEFycmF5IG9mIHByZXZpb3VzIHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmFkaWVudERpZmZlcmVuY2UgLSBBZGp1c3RtZW50IGZvciBkZWNyZWFzZSB0aGUgZGFtcGluZyBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtNYXRyaXh9XG4gKi9cbmZ1bmN0aW9uIGdyYWRpZW50RnVuY3Rpb24oXG4gIGRhdGEsXG4gIGV2YWx1YXRlZERhdGEsXG4gIHBhcmFtcyxcbiAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICBwYXJhbUZ1bmN0aW9uLFxuKSB7XG4gIGNvbnN0IG4gPSBwYXJhbXMubGVuZ3RoO1xuICBjb25zdCBtID0gZGF0YS54Lmxlbmd0aDtcblxuICBsZXQgYW5zID0gbmV3IEFycmF5KG4pO1xuXG4gIGZvciAobGV0IHBhcmFtID0gMDsgcGFyYW0gPCBuOyBwYXJhbSsrKSB7XG4gICAgYW5zW3BhcmFtXSA9IG5ldyBBcnJheShtKTtcbiAgICBsZXQgYXV4UGFyYW1zID0gcGFyYW1zLnNsaWNlKCk7XG4gICAgYXV4UGFyYW1zW3BhcmFtXSArPSBncmFkaWVudERpZmZlcmVuY2U7XG4gICAgbGV0IGZ1bmNQYXJhbSA9IHBhcmFtRnVuY3Rpb24oYXV4UGFyYW1zKTtcblxuICAgIGZvciAobGV0IHBvaW50ID0gMDsgcG9pbnQgPCBtOyBwb2ludCsrKSB7XG4gICAgICBhbnNbcGFyYW1dW3BvaW50XSA9IGV2YWx1YXRlZERhdGFbcG9pbnRdIC0gZnVuY1BhcmFtKGRhdGEueFtwb2ludF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IE1hdHJpeChhbnMpO1xufVxuXG4vKipcbiAqIE1hdHJpeCBmdW5jdGlvbiBvdmVyIHRoZSBzYW1wbGVzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGV2YWx1YXRlZERhdGEgLSBBcnJheSBvZiBwcmV2aW91cyBldmFsdWF0ZWQgZnVuY3Rpb24gdmFsdWVzXG4gKiBAcmV0dXJuIHtNYXRyaXh9XG4gKi9cbmZ1bmN0aW9uIG1hdHJpeEZ1bmN0aW9uKGRhdGEsIGV2YWx1YXRlZERhdGEpIHtcbiAgY29uc3QgbSA9IGRhdGEueC5sZW5ndGg7XG5cbiAgbGV0IGFucyA9IG5ldyBBcnJheShtKTtcblxuICBmb3IgKGxldCBwb2ludCA9IDA7IHBvaW50IDwgbTsgcG9pbnQrKykge1xuICAgIGFuc1twb2ludF0gPSBbZGF0YS55W3BvaW50XSAtIGV2YWx1YXRlZERhdGFbcG9pbnRdXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgTWF0cml4KGFucyk7XG59XG5cbi8qKlxuICogSXRlcmF0aW9uIGZvciBMZXZlbmJlcmctTWFycXVhcmR0XG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtcyAtIEFycmF5IG9mIHByZXZpb3VzIHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYW1waW5nIC0gTGV2ZW5iZXJnLU1hcnF1YXJkdCBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmFkaWVudERpZmZlcmVuY2UgLSBBZGp1c3RtZW50IGZvciBkZWNyZWFzZSB0aGUgZGFtcGluZyBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEByZXR1cm4ge0FycmF5PG51bWJlcj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0ZXAoXG4gIGRhdGEsXG4gIHBhcmFtcyxcbiAgZGFtcGluZyxcbiAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sXG4pIHtcbiAgbGV0IHZhbHVlID0gZGFtcGluZyAqIGdyYWRpZW50RGlmZmVyZW5jZSAqIGdyYWRpZW50RGlmZmVyZW5jZTtcbiAgbGV0IGlkZW50aXR5ID0gTWF0cml4LmV5ZShwYXJhbXMubGVuZ3RoLCBwYXJhbXMubGVuZ3RoLCB2YWx1ZSk7XG5cbiAgY29uc3QgZnVuYyA9IHBhcmFtZXRlcml6ZWRGdW5jdGlvbihwYXJhbXMpO1xuXG4gIGxldCBldmFsdWF0ZWREYXRhID0gbmV3IEZsb2F0NjRBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBldmFsdWF0ZWREYXRhW2ldID0gZnVuYyhkYXRhLnhbaV0pO1xuICB9XG5cbiAgbGV0IGdyYWRpZW50RnVuYyA9IGdyYWRpZW50RnVuY3Rpb24oXG4gICAgZGF0YSxcbiAgICBldmFsdWF0ZWREYXRhLFxuICAgIHBhcmFtcyxcbiAgICBncmFkaWVudERpZmZlcmVuY2UsXG4gICAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuICApO1xuICBsZXQgbWF0cml4RnVuYyA9IG1hdHJpeEZ1bmN0aW9uKGRhdGEsIGV2YWx1YXRlZERhdGEpO1xuICBsZXQgaW52ZXJzZU1hdHJpeCA9IGludmVyc2UoXG4gICAgaWRlbnRpdHkuYWRkKGdyYWRpZW50RnVuYy5tbXVsKGdyYWRpZW50RnVuYy50cmFuc3Bvc2UoKSkpLFxuICApO1xuXG4gIHBhcmFtcyA9IG5ldyBNYXRyaXgoW3BhcmFtc10pO1xuICBwYXJhbXMgPSBwYXJhbXMuc3ViKFxuICAgIGludmVyc2VNYXRyaXhcbiAgICAgIC5tbXVsKGdyYWRpZW50RnVuYylcbiAgICAgIC5tbXVsKG1hdHJpeEZ1bmMpXG4gICAgICAubXVsKGdyYWRpZW50RGlmZmVyZW5jZSlcbiAgICAgIC50cmFuc3Bvc2UoKSxcbiAgKTtcblxuICByZXR1cm4gcGFyYW1zLnRvMURBcnJheSgpO1xufVxuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCBNYXRyaXggZnJvbSAnLi4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMdURlY29tcG9zaXRpb24ge1xuICBjb25zdHJ1Y3RvcihtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgobWF0cml4KTtcblxuICAgIGxldCBsdSA9IG1hdHJpeC5jbG9uZSgpO1xuICAgIGxldCByb3dzID0gbHUucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGx1LmNvbHVtbnM7XG4gICAgbGV0IHBpdm90VmVjdG9yID0gbmV3IEZsb2F0NjRBcnJheShyb3dzKTtcbiAgICBsZXQgcGl2b3RTaWduID0gMTtcbiAgICBsZXQgaSwgaiwgaywgcCwgcywgdCwgdjtcbiAgICBsZXQgTFVjb2xqLCBrbWF4O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcGl2b3RWZWN0b3JbaV0gPSBpO1xuICAgIH1cblxuICAgIExVY29saiA9IG5ldyBGbG9hdDY0QXJyYXkocm93cyk7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIExVY29saltpXSA9IGx1LmdldChpLCBqKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBrbWF4ID0gTWF0aC5taW4oaSwgaik7XG4gICAgICAgIHMgPSAwO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwga21heDsgaysrKSB7XG4gICAgICAgICAgcyArPSBsdS5nZXQoaSwgaykgKiBMVWNvbGpba107XG4gICAgICAgIH1cbiAgICAgICAgTFVjb2xqW2ldIC09IHM7XG4gICAgICAgIGx1LnNldChpLCBqLCBMVWNvbGpbaV0pO1xuICAgICAgfVxuXG4gICAgICBwID0gajtcbiAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhMVWNvbGpbaV0pID4gTWF0aC5hYnMoTFVjb2xqW3BdKSkge1xuICAgICAgICAgIHAgPSBpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwICE9PSBqKSB7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBjb2x1bW5zOyBrKyspIHtcbiAgICAgICAgICB0ID0gbHUuZ2V0KHAsIGspO1xuICAgICAgICAgIGx1LnNldChwLCBrLCBsdS5nZXQoaiwgaykpO1xuICAgICAgICAgIGx1LnNldChqLCBrLCB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHYgPSBwaXZvdFZlY3RvcltwXTtcbiAgICAgICAgcGl2b3RWZWN0b3JbcF0gPSBwaXZvdFZlY3RvcltqXTtcbiAgICAgICAgcGl2b3RWZWN0b3Jbal0gPSB2O1xuXG4gICAgICAgIHBpdm90U2lnbiA9IC1waXZvdFNpZ247XG4gICAgICB9XG5cbiAgICAgIGlmIChqIDwgcm93cyAmJiBsdS5nZXQoaiwgaikgIT09IDApIHtcbiAgICAgICAgZm9yIChpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICBsdS5zZXQoaSwgaiwgbHUuZ2V0KGksIGopIC8gbHUuZ2V0KGosIGopKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuTFUgPSBsdTtcbiAgICB0aGlzLnBpdm90VmVjdG9yID0gcGl2b3RWZWN0b3I7XG4gICAgdGhpcy5waXZvdFNpZ24gPSBwaXZvdFNpZ247XG4gIH1cblxuICBpc1Npbmd1bGFyKCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgY29sID0gZGF0YS5jb2x1bW5zO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sOyBqKyspIHtcbiAgICAgIGlmIChkYXRhLmdldChqLCBqKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc29sdmUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IE1hdHJpeC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgbHUgPSB0aGlzLkxVO1xuICAgIGxldCByb3dzID0gbHUucm93cztcblxuICAgIGlmIChyb3dzICE9PSB2YWx1ZS5yb3dzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWF0cml4IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaW5ndWxhcigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xVIG1hdHJpeCBpcyBzaW5ndWxhcicpO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IFggPSB2YWx1ZS5zdWJNYXRyaXhSb3codGhpcy5waXZvdFZlY3RvciwgMCwgY291bnQgLSAxKTtcbiAgICBsZXQgY29sdW1ucyA9IGx1LmNvbHVtbnM7XG4gICAgbGV0IGksIGosIGs7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgY29sdW1uczsgaysrKSB7XG4gICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IGNvbHVtbnM7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBsdS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IGNvbHVtbnMgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgWC5zZXQoaywgaiwgWC5nZXQoaywgaikgLyBsdS5nZXQoaywgaykpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBsdS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IGRldGVybWluYW50KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBpZiAoIWRhdGEuaXNTcXVhcmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUnKTtcbiAgICB9XG4gICAgbGV0IGRldGVybWluYW50ID0gdGhpcy5waXZvdFNpZ247XG4gICAgbGV0IGNvbCA9IGRhdGEuY29sdW1ucztcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbDsgaisrKSB7XG4gICAgICBkZXRlcm1pbmFudCAqPSBkYXRhLmdldChqLCBqKTtcbiAgICB9XG4gICAgcmV0dXJuIGRldGVybWluYW50O1xuICB9XG5cbiAgZ2V0IGxvd2VyVHJpYW5ndWxhck1hdHJpeCgpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBkYXRhLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBkYXRhLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBkYXRhLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IHVwcGVyVHJpYW5ndWxhck1hdHJpeCgpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBkYXRhLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBkYXRhLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAoaSA8PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgZGF0YS5nZXQoaSwgaikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IHBpdm90UGVybXV0YXRpb25WZWN0b3IoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5waXZvdFZlY3Rvcik7XG4gIH1cbn1cbiIsImltcG9ydCBNYXRyaXggZnJvbSAnLi4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5pbXBvcnQgeyBoeXBvdGVudXNlIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXJEZWNvbXBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICB2YWx1ZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgcXIgPSB2YWx1ZS5jbG9uZSgpO1xuICAgIGxldCBtID0gdmFsdWUucm93cztcbiAgICBsZXQgbiA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IHJkaWFnID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGxldCBucm0gPSAwO1xuICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICBucm0gPSBoeXBvdGVudXNlKG5ybSwgcXIuZ2V0KGksIGspKTtcbiAgICAgIH1cbiAgICAgIGlmIChucm0gIT09IDApIHtcbiAgICAgICAgaWYgKHFyLmdldChrLCBrKSA8IDApIHtcbiAgICAgICAgICBucm0gPSAtbnJtO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBxci5zZXQoaSwgaywgcXIuZ2V0KGksIGspIC8gbnJtKTtcbiAgICAgICAgfVxuICAgICAgICBxci5zZXQoaywgaywgcXIuZ2V0KGssIGspICsgMSk7XG4gICAgICAgIGZvciAoaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBxci5nZXQoaSwgaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBxci5zZXQoaSwgaiwgcXIuZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZGlhZ1trXSA9IC1ucm07XG4gICAgfVxuXG4gICAgdGhpcy5RUiA9IHFyO1xuICAgIHRoaXMuUmRpYWcgPSByZGlhZztcbiAgfVxuXG4gIHNvbHZlKHZhbHVlKSB7XG4gICAgdmFsdWUgPSBNYXRyaXguY2hlY2tNYXRyaXgodmFsdWUpO1xuXG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgbSA9IHFyLnJvd3M7XG5cbiAgICBpZiAodmFsdWUucm93cyAhPT0gbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggcm93IGRpbWVuc2lvbnMgbXVzdCBhZ3JlZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNGdWxsUmFuaygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBpcyByYW5rIGRlZmljaWVudCcpO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IFggPSB2YWx1ZS5jbG9uZSgpO1xuICAgIGxldCBuID0gcXIuY29sdW1ucztcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIHMgPSAwO1xuICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBYLmdldChpLCBqKTtcbiAgICAgICAgfVxuICAgICAgICBzID0gLXMgLyBxci5nZXQoaywgayk7XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSArIHMgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IG4gLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgWC5zZXQoaywgaiwgWC5nZXQoaywgaikgLyB0aGlzLlJkaWFnW2tdKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSAtIFguZ2V0KGssIGopICogcXIuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBYLnN1Yk1hdHJpeCgwLCBuIC0gMSwgMCwgY291bnQgLSAxKTtcbiAgfVxuXG4gIGlzRnVsbFJhbmsoKSB7XG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLlFSLmNvbHVtbnM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLlJkaWFnW2ldID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBxciA9IHRoaXMuUVI7XG4gICAgbGV0IG4gPSBxci5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeChuLCBuKTtcbiAgICBsZXQgaSwgajtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGlmIChpIDwgaikge1xuICAgICAgICAgIFguc2V0KGksIGosIHFyLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIHRoaXMuUmRpYWdbaV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IG9ydGhvZ29uYWxNYXRyaXgoKSB7XG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgcm93cyA9IHFyLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBxci5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IGNvbHVtbnMgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBYLnNldChpLCBrLCAwKTtcbiAgICAgIH1cbiAgICAgIFguc2V0KGssIGssIDEpO1xuICAgICAgZm9yIChqID0gazsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAocXIuZ2V0KGssIGspICE9PSAwKSB7XG4gICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBYLmdldChpLCBqKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzID0gLXMgLyBxci5nZXQoaywgayk7XG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSArIHMgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWDtcbiAgfVxufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmltcG9ydCB7IGh5cG90ZW51c2UgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICB2YWx1ZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBtdXN0IGJlIG5vbi1lbXB0eScpO1xuICAgIH1cblxuICAgIGxldCBtID0gdmFsdWUucm93cztcbiAgICBsZXQgbiA9IHZhbHVlLmNvbHVtbnM7XG5cbiAgICBjb25zdCB7XG4gICAgICBjb21wdXRlTGVmdFNpbmd1bGFyVmVjdG9ycyA9IHRydWUsXG4gICAgICBjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMgPSB0cnVlLFxuICAgICAgYXV0b1RyYW5zcG9zZSA9IGZhbHNlLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgbGV0IHdhbnR1ID0gQm9vbGVhbihjb21wdXRlTGVmdFNpbmd1bGFyVmVjdG9ycyk7XG4gICAgbGV0IHdhbnR2ID0gQm9vbGVhbihjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMpO1xuXG4gICAgbGV0IHN3YXBwZWQgPSBmYWxzZTtcbiAgICBsZXQgYTtcbiAgICBpZiAobSA8IG4pIHtcbiAgICAgIGlmICghYXV0b1RyYW5zcG9zZSkge1xuICAgICAgICBhID0gdmFsdWUuY2xvbmUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdDb21wdXRpbmcgU1ZEIG9uIGEgbWF0cml4IHdpdGggbW9yZSBjb2x1bW5zIHRoYW4gcm93cy4gQ29uc2lkZXIgZW5hYmxpbmcgYXV0b1RyYW5zcG9zZScsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhID0gdmFsdWUudHJhbnNwb3NlKCk7XG4gICAgICAgIG0gPSBhLnJvd3M7XG4gICAgICAgIG4gPSBhLmNvbHVtbnM7XG4gICAgICAgIHN3YXBwZWQgPSB0cnVlO1xuICAgICAgICBsZXQgYXV4ID0gd2FudHU7XG4gICAgICAgIHdhbnR1ID0gd2FudHY7XG4gICAgICAgIHdhbnR2ID0gYXV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhID0gdmFsdWUuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBsZXQgbnUgPSBNYXRoLm1pbihtLCBuKTtcbiAgICBsZXQgbmkgPSBNYXRoLm1pbihtICsgMSwgbik7XG4gICAgbGV0IHMgPSBuZXcgRmxvYXQ2NEFycmF5KG5pKTtcbiAgICBsZXQgVSA9IG5ldyBNYXRyaXgobSwgbnUpO1xuICAgIGxldCBWID0gbmV3IE1hdHJpeChuLCBuKTtcblxuICAgIGxldCBlID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBsZXQgd29yayA9IG5ldyBGbG9hdDY0QXJyYXkobSk7XG5cbiAgICBsZXQgc2kgPSBuZXcgRmxvYXQ2NEFycmF5KG5pKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5pOyBpKyspIHNpW2ldID0gaTtcblxuICAgIGxldCBuY3QgPSBNYXRoLm1pbihtIC0gMSwgbik7XG4gICAgbGV0IG5ydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG4gLSAyLCBtKSk7XG4gICAgbGV0IG1yYyA9IE1hdGgubWF4KG5jdCwgbnJ0KTtcblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbXJjOyBrKyspIHtcbiAgICAgIGlmIChrIDwgbmN0KSB7XG4gICAgICAgIHNba10gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIHNba10gPSBoeXBvdGVudXNlKHNba10sIGEuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc1trXSAhPT0gMCkge1xuICAgICAgICAgIGlmIChhLmdldChrLCBrKSA8IDApIHtcbiAgICAgICAgICAgIHNba10gPSAtc1trXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIGEuc2V0KGksIGssIGEuZ2V0KGksIGspIC8gc1trXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGEuc2V0KGssIGssIGEuZ2V0KGssIGspICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgc1trXSA9IC1zW2tdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGsgPCBuY3QgJiYgc1trXSAhPT0gMCkge1xuICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgdCArPSBhLmdldChpLCBrKSAqIGEuZ2V0KGksIGopO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ID0gLXQgLyBhLmdldChrLCBrKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgYS5zZXQoaSwgaiwgYS5nZXQoaSwgaikgKyB0ICogYS5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlW2pdID0gYS5nZXQoaywgaik7XG4gICAgICB9XG5cbiAgICAgIGlmICh3YW50dSAmJiBrIDwgbmN0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgVS5zZXQoaSwgaywgYS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChrIDwgbnJ0KSB7XG4gICAgICAgIGVba10gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBlW2tdID0gaHlwb3RlbnVzZShlW2tdLCBlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGlmIChlW2sgKyAxXSA8IDApIHtcbiAgICAgICAgICAgIGVba10gPSAwIC0gZVtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBlW2ldIC89IGVba107XG4gICAgICAgICAgfVxuICAgICAgICAgIGVbayArIDFdICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZVtrXSA9IC1lW2tdO1xuICAgICAgICBpZiAoayArIDEgPCBtICYmIGVba10gIT09IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIHdvcmtbaV0gPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICB3b3JrW2ldICs9IGVbal0gKiBhLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdCA9IC1lW2pdIC8gZVtrICsgMV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgYS5zZXQoaSwgaiwgYS5nZXQoaSwgaikgKyB0ICogd29ya1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3YW50dikge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgVi5zZXQoaSwgaywgZVtpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHAgPSBNYXRoLm1pbihuLCBtICsgMSk7XG4gICAgaWYgKG5jdCA8IG4pIHtcbiAgICAgIHNbbmN0XSA9IGEuZ2V0KG5jdCwgbmN0KTtcbiAgICB9XG4gICAgaWYgKG0gPCBwKSB7XG4gICAgICBzW3AgLSAxXSA9IDA7XG4gICAgfVxuICAgIGlmIChucnQgKyAxIDwgcCkge1xuICAgICAgZVtucnRdID0gYS5nZXQobnJ0LCBwIC0gMSk7XG4gICAgfVxuICAgIGVbcCAtIDFdID0gMDtcblxuICAgIGlmICh3YW50dSkge1xuICAgICAgZm9yIChsZXQgaiA9IG5jdDsgaiA8IG51OyBqKyspIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBVLnNldChpLCBqLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBVLnNldChqLCBqLCAxKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGsgPSBuY3QgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgICBpZiAoc1trXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG51OyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgIHQgKz0gVS5nZXQoaSwgaykgKiBVLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSAtdCAvIFUuZ2V0KGssIGspO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgVS5nZXQoaSwgaikgKyB0ICogVS5nZXQoaSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgLVUuZ2V0KGksIGspKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVS5zZXQoaywgaywgMSArIFUuZ2V0KGssIGspKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGsgLSAxOyBpKyspIHtcbiAgICAgICAgICAgIFUuc2V0KGksIGssIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFUuc2V0KGssIGssIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdhbnR2KSB7XG4gICAgICBmb3IgKGxldCBrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAgIGlmIChrIDwgbnJ0ICYmIGVba10gIT09IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICB0ICs9IFYuZ2V0KGksIGspICogVi5nZXQoaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ID0gLXQgLyBWLmdldChrICsgMSwgayk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgVi5nZXQoaSwgaikgKyB0ICogVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIFYuc2V0KGksIGssIDApO1xuICAgICAgICB9XG4gICAgICAgIFYuc2V0KGssIGssIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwcCA9IHAgLSAxO1xuICAgIGxldCBpdGVyID0gMDtcbiAgICBsZXQgZXBzID0gTnVtYmVyLkVQU0lMT047XG4gICAgd2hpbGUgKHAgPiAwKSB7XG4gICAgICBsZXQgaywga2FzZTtcbiAgICAgIGZvciAoayA9IHAgLSAyOyBrID49IC0xOyBrLS0pIHtcbiAgICAgICAgaWYgKGsgPT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxwaGEgPVxuICAgICAgICAgIE51bWJlci5NSU5fVkFMVUUgKyBlcHMgKiBNYXRoLmFicyhzW2tdICsgTWF0aC5hYnMoc1trICsgMV0pKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGVba10pIDw9IGFscGhhIHx8IE51bWJlci5pc05hTihlW2tdKSkge1xuICAgICAgICAgIGVba10gPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoayA9PT0gcCAtIDIpIHtcbiAgICAgICAga2FzZSA9IDQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQga3M7XG4gICAgICAgIGZvciAoa3MgPSBwIC0gMTsga3MgPj0gazsga3MtLSkge1xuICAgICAgICAgIGlmIChrcyA9PT0gaykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB0ID1cbiAgICAgICAgICAgIChrcyAhPT0gcCA/IE1hdGguYWJzKGVba3NdKSA6IDApICtcbiAgICAgICAgICAgIChrcyAhPT0gayArIDEgPyBNYXRoLmFicyhlW2tzIC0gMV0pIDogMCk7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKHNba3NdKSA8PSBlcHMgKiB0KSB7XG4gICAgICAgICAgICBzW2tzXSA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtzID09PSBrKSB7XG4gICAgICAgICAga2FzZSA9IDM7XG4gICAgICAgIH0gZWxzZSBpZiAoa3MgPT09IHAgLSAxKSB7XG4gICAgICAgICAga2FzZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2FzZSA9IDI7XG4gICAgICAgICAgayA9IGtzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGsrKztcblxuICAgICAgc3dpdGNoIChrYXNlKSB7XG4gICAgICAgIGNhc2UgMToge1xuICAgICAgICAgIGxldCBmID0gZVtwIC0gMl07XG4gICAgICAgICAgZVtwIC0gMl0gPSAwO1xuICAgICAgICAgIGZvciAobGV0IGogPSBwIC0gMjsgaiA+PSBrOyBqLS0pIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShzW2pdLCBmKTtcbiAgICAgICAgICAgIGxldCBjcyA9IHNbal0gLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZiAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGlmIChqICE9PSBrKSB7XG4gICAgICAgICAgICAgIGYgPSAtc24gKiBlW2ogLSAxXTtcbiAgICAgICAgICAgICAgZVtqIC0gMV0gPSBjcyAqIGVbaiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVi5nZXQoaSwgaikgKyBzbiAqIFYuZ2V0KGksIHAgLSAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBwIC0gMSwgLXNuICogVi5nZXQoaSwgaikgKyBjcyAqIFYuZ2V0KGksIHAgLSAxKSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgbGV0IGYgPSBlW2sgLSAxXTtcbiAgICAgICAgICBlW2sgLSAxXSA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGs7IGogPCBwOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShzW2pdLCBmKTtcbiAgICAgICAgICAgIGxldCBjcyA9IHNbal0gLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZiAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGYgPSAtc24gKiBlW2pdO1xuICAgICAgICAgICAgZVtqXSA9IGNzICogZVtqXTtcbiAgICAgICAgICAgIGlmICh3YW50dSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBjcyAqIFUuZ2V0KGksIGopICsgc24gKiBVLmdldChpLCBrIC0gMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgayAtIDEsIC1zbiAqIFUuZ2V0KGksIGopICsgY3MgKiBVLmdldChpLCBrIC0gMSkpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGosIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBNYXRoLmFicyhzW3AgLSAxXSksXG4gICAgICAgICAgICBNYXRoLmFicyhzW3AgLSAyXSksXG4gICAgICAgICAgICBNYXRoLmFicyhlW3AgLSAyXSksXG4gICAgICAgICAgICBNYXRoLmFicyhzW2tdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKGVba10pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgc3AgPSBzW3AgLSAxXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IHNwbTEgPSBzW3AgLSAyXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGVwbTEgPSBlW3AgLSAyXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IHNrID0gc1trXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGVrID0gZVtrXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGIgPSAoKHNwbTEgKyBzcCkgKiAoc3BtMSAtIHNwKSArIGVwbTEgKiBlcG0xKSAvIDI7XG4gICAgICAgICAgY29uc3QgYyA9IHNwICogZXBtMSAqIChzcCAqIGVwbTEpO1xuICAgICAgICAgIGxldCBzaGlmdCA9IDA7XG4gICAgICAgICAgaWYgKGIgIT09IDAgfHwgYyAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgICAgIHNoaWZ0ID0gMCAtIE1hdGguc3FydChiICogYiArIGMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hpZnQgPSBNYXRoLnNxcnQoYiAqIGIgKyBjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoaWZ0ID0gYyAvIChiICsgc2hpZnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZiA9IChzayArIHNwKSAqIChzayAtIHNwKSArIHNoaWZ0O1xuICAgICAgICAgIGxldCBnID0gc2sgKiBlaztcbiAgICAgICAgICBmb3IgKGxldCBqID0gazsgaiA8IHAgLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShmLCBnKTtcbiAgICAgICAgICAgIGlmICh0ID09PSAwKSB0ID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICAgICAgICAgIGxldCBjcyA9IGYgLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZyAvIHQ7XG4gICAgICAgICAgICBpZiAoaiAhPT0gaykge1xuICAgICAgICAgICAgICBlW2ogLSAxXSA9IHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmID0gY3MgKiBzW2pdICsgc24gKiBlW2pdO1xuICAgICAgICAgICAgZVtqXSA9IGNzICogZVtqXSAtIHNuICogc1tqXTtcbiAgICAgICAgICAgIGcgPSBzbiAqIHNbaiArIDFdO1xuICAgICAgICAgICAgc1tqICsgMV0gPSBjcyAqIHNbaiArIDFdO1xuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVi5nZXQoaSwgaikgKyBzbiAqIFYuZ2V0KGksIGogKyAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqICsgMSwgLXNuICogVi5nZXQoaSwgaikgKyBjcyAqIFYuZ2V0KGksIGogKyAxKSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSBoeXBvdGVudXNlKGYsIGcpO1xuICAgICAgICAgICAgaWYgKHQgPT09IDApIHQgPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgICAgICAgY3MgPSBmIC8gdDtcbiAgICAgICAgICAgIHNuID0gZyAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGYgPSBjcyAqIGVbal0gKyBzbiAqIHNbaiArIDFdO1xuICAgICAgICAgICAgc1tqICsgMV0gPSAtc24gKiBlW2pdICsgY3MgKiBzW2ogKyAxXTtcbiAgICAgICAgICAgIGcgPSBzbiAqIGVbaiArIDFdO1xuICAgICAgICAgICAgZVtqICsgMV0gPSBjcyAqIGVbaiArIDFdO1xuICAgICAgICAgICAgaWYgKHdhbnR1ICYmIGogPCBtIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBjcyAqIFUuZ2V0KGksIGopICsgc24gKiBVLmdldChpLCBqICsgMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiArIDEsIC1zbiAqIFUuZ2V0KGksIGopICsgY3MgKiBVLmdldChpLCBqICsgMSkpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGosIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVbcCAtIDJdID0gZjtcbiAgICAgICAgICBpdGVyID0gaXRlciArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgaWYgKHNba10gPD0gMCkge1xuICAgICAgICAgICAgc1trXSA9IHNba10gPCAwID8gLXNba10gOiAwO1xuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHBwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrLCAtVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChrIDwgcHApIHtcbiAgICAgICAgICAgIGlmIChzW2tdID49IHNbayArIDFdKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHQgPSBzW2tdO1xuICAgICAgICAgICAgc1trXSA9IHNbayArIDFdO1xuICAgICAgICAgICAgc1trICsgMV0gPSB0O1xuICAgICAgICAgICAgaWYgKHdhbnR2ICYmIGsgPCBuIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBWLmdldChpLCBrICsgMSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgayArIDEsIFYuZ2V0KGksIGspKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR1ICYmIGsgPCBtIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBVLmdldChpLCBrICsgMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgayArIDEsIFUuZ2V0KGksIGspKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpdGVyID0gMDtcbiAgICAgICAgICBwLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzd2FwcGVkKSB7XG4gICAgICBsZXQgdG1wID0gVjtcbiAgICAgIFYgPSBVO1xuICAgICAgVSA9IHRtcDtcbiAgICB9XG5cbiAgICB0aGlzLm0gPSBtO1xuICAgIHRoaXMubiA9IG47XG4gICAgdGhpcy5zID0gcztcbiAgICB0aGlzLlUgPSBVO1xuICAgIHRoaXMuViA9IFY7XG4gIH1cblxuICBzb2x2ZSh2YWx1ZSkge1xuICAgIGxldCBZID0gdmFsdWU7XG4gICAgbGV0IGUgPSB0aGlzLnRocmVzaG9sZDtcbiAgICBsZXQgc2NvbHMgPSB0aGlzLnMubGVuZ3RoO1xuICAgIGxldCBMcyA9IE1hdHJpeC56ZXJvcyhzY29scywgc2NvbHMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY29sczsgaSsrKSB7XG4gICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2ldKSA8PSBlKSB7XG4gICAgICAgIExzLnNldChpLCBpLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExzLnNldChpLCBpLCAxIC8gdGhpcy5zW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgVSA9IHRoaXMuVTtcbiAgICBsZXQgViA9IHRoaXMucmlnaHRTaW5ndWxhclZlY3RvcnM7XG5cbiAgICBsZXQgVkwgPSBWLm1tdWwoTHMpO1xuICAgIGxldCB2cm93cyA9IFYucm93cztcbiAgICBsZXQgdXJvd3MgPSBVLnJvd3M7XG4gICAgbGV0IFZMVSA9IE1hdHJpeC56ZXJvcyh2cm93cywgdXJvd3MpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVyb3dzOyBqKyspIHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgc2NvbHM7IGsrKykge1xuICAgICAgICAgIHN1bSArPSBWTC5nZXQoaSwgaykgKiBVLmdldChqLCBrKTtcbiAgICAgICAgfVxuICAgICAgICBWTFUuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFZMVS5tbXVsKFkpO1xuICB9XG5cbiAgc29sdmVGb3JEaWFnb25hbCh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNvbHZlKE1hdHJpeC5kaWFnKHZhbHVlKSk7XG4gIH1cblxuICBpbnZlcnNlKCkge1xuICAgIGxldCBWID0gdGhpcy5WO1xuICAgIGxldCBlID0gdGhpcy50aHJlc2hvbGQ7XG4gICAgbGV0IHZyb3dzID0gVi5yb3dzO1xuICAgIGxldCB2Y29scyA9IFYuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgodnJvd3MsIHRoaXMucy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZjb2xzOyBqKyspIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuc1tqXSkgPiBlKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgVi5nZXQoaSwgaikgLyB0aGlzLnNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IFUgPSB0aGlzLlU7XG5cbiAgICBsZXQgdXJvd3MgPSBVLnJvd3M7XG4gICAgbGV0IHVjb2xzID0gVS5jb2x1bW5zO1xuICAgIGxldCBZID0gbmV3IE1hdHJpeCh2cm93cywgdXJvd3MpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVyb3dzOyBqKyspIHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdWNvbHM7IGsrKykge1xuICAgICAgICAgIHN1bSArPSBYLmdldChpLCBrKSAqIFUuZ2V0KGosIGspO1xuICAgICAgICB9XG4gICAgICAgIFkuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNbMF0gLyB0aGlzLnNbTWF0aC5taW4odGhpcy5tLCB0aGlzLm4pIC0gMV07XG4gIH1cblxuICBnZXQgbm9ybTIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc1swXTtcbiAgfVxuXG4gIGdldCByYW5rKCkge1xuICAgIGxldCB0b2wgPSBNYXRoLm1heCh0aGlzLm0sIHRoaXMubikgKiB0aGlzLnNbMF0gKiBOdW1iZXIuRVBTSUxPTjtcbiAgICBsZXQgciA9IDA7XG4gICAgbGV0IHMgPSB0aGlzLnM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBpZiAoc1tpXSA+IHRvbCkge1xuICAgICAgICByKys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgZ2V0IGRpYWdvbmFsKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucyk7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCkge1xuICAgIHJldHVybiAoTnVtYmVyLkVQU0lMT04gLyAyKSAqIE1hdGgubWF4KHRoaXMubSwgdGhpcy5uKSAqIHRoaXMuc1swXTtcbiAgfVxuXG4gIGdldCBsZWZ0U2luZ3VsYXJWZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLlU7XG4gIH1cblxuICBnZXQgcmlnaHRTaW5ndWxhclZlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuVjtcbiAgfVxuXG4gIGdldCBkaWFnb25hbE1hdHJpeCgpIHtcbiAgICByZXR1cm4gTWF0cml4LmRpYWcodGhpcy5zKTtcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGh5cG90ZW51c2UoYSwgYikge1xuICBsZXQgciA9IDA7XG4gIGlmIChNYXRoLmFicyhhKSA+IE1hdGguYWJzKGIpKSB7XG4gICAgciA9IGIgLyBhO1xuICAgIHJldHVybiBNYXRoLmFicyhhKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIGlmIChiICE9PSAwKSB7XG4gICAgciA9IGEgLyBiO1xuICAgIHJldHVybiBNYXRoLmFicyhiKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIHJldHVybiAwO1xufVxuIiwiaW1wb3J0IEx1RGVjb21wb3NpdGlvbiBmcm9tICcuL2RjL2x1JztcbmltcG9ydCBRckRlY29tcG9zaXRpb24gZnJvbSAnLi9kYy9xcic7XG5pbXBvcnQgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24gZnJvbSAnLi9kYy9zdmQnO1xuaW1wb3J0IE1hdHJpeCBmcm9tICcuL21hdHJpeCc7XG5pbXBvcnQgV3JhcHBlck1hdHJpeDJEIGZyb20gJy4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShtYXRyaXgsIHVzZVNWRCA9IGZhbHNlKSB7XG4gIG1hdHJpeCA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChtYXRyaXgpO1xuICBpZiAodXNlU1ZEKSB7XG4gICAgcmV0dXJuIG5ldyBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbihtYXRyaXgpLmludmVyc2UoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc29sdmUobWF0cml4LCBNYXRyaXguZXllKG1hdHJpeC5yb3dzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbHZlKGxlZnRIYW5kU2lkZSwgcmlnaHRIYW5kU2lkZSwgdXNlU1ZEID0gZmFsc2UpIHtcbiAgbGVmdEhhbmRTaWRlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KGxlZnRIYW5kU2lkZSk7XG4gIHJpZ2h0SGFuZFNpZGUgPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgocmlnaHRIYW5kU2lkZSk7XG4gIGlmICh1c2VTVkQpIHtcbiAgICByZXR1cm4gbmV3IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uKGxlZnRIYW5kU2lkZSkuc29sdmUocmlnaHRIYW5kU2lkZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxlZnRIYW5kU2lkZS5pc1NxdWFyZSgpXG4gICAgICA/IG5ldyBMdURlY29tcG9zaXRpb24obGVmdEhhbmRTaWRlKS5zb2x2ZShyaWdodEhhbmRTaWRlKVxuICAgICAgOiBuZXcgUXJEZWNvbXBvc2l0aW9uKGxlZnRIYW5kU2lkZSkuc29sdmUocmlnaHRIYW5kU2lkZSk7XG4gIH1cbn1cbiIsImNvbnN0IGluZGVudCA9ICcgJy5yZXBlYXQoMik7XG5jb25zdCBpbmRlbnREYXRhID0gJyAnLnJlcGVhdCg0KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RNYXRyaXgoKSB7XG4gIHJldHVybiBpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnModGhpcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnMobWF0cml4LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG1heFJvd3MgPSAxNSxcbiAgICBtYXhDb2x1bW5zID0gMTAsXG4gICAgbWF4TnVtU2l6ZSA9IDgsXG4gICAgcGFkTWludXMgPSAnYXV0bycsXG4gIH0gPSBvcHRpb25zO1xuICByZXR1cm4gYCR7bWF0cml4LmNvbnN0cnVjdG9yLm5hbWV9IHtcbiR7aW5kZW50fVtcbiR7aW5kZW50RGF0YX0ke2luc3BlY3REYXRhKG1hdHJpeCwgbWF4Um93cywgbWF4Q29sdW1ucywgbWF4TnVtU2l6ZSwgcGFkTWludXMpfVxuJHtpbmRlbnR9XVxuJHtpbmRlbnR9cm93czogJHttYXRyaXgucm93c31cbiR7aW5kZW50fWNvbHVtbnM6ICR7bWF0cml4LmNvbHVtbnN9XG59YDtcbn1cblxuZnVuY3Rpb24gaW5zcGVjdERhdGEobWF0cml4LCBtYXhSb3dzLCBtYXhDb2x1bW5zLCBtYXhOdW1TaXplLCBwYWRNaW51cykge1xuICBjb25zdCB7IHJvd3MsIGNvbHVtbnMgfSA9IG1hdHJpeDtcbiAgY29uc3QgbWF4SSA9IE1hdGgubWluKHJvd3MsIG1heFJvd3MpO1xuICBjb25zdCBtYXhKID0gTWF0aC5taW4oY29sdW1ucywgbWF4Q29sdW1ucyk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGlmIChwYWRNaW51cyA9PT0gJ2F1dG8nKSB7XG4gICAgcGFkTWludXMgPSBmYWxzZTtcbiAgICBsb29wOiBmb3IgKGxldCBpID0gMDsgaSA8IG1heEk7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXhKOyBqKyspIHtcbiAgICAgICAgaWYgKG1hdHJpeC5nZXQoaSwgaikgPCAwKSB7XG4gICAgICAgICAgcGFkTWludXMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEk7IGkrKykge1xuICAgIGxldCBsaW5lID0gW107XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXhKOyBqKyspIHtcbiAgICAgIGxpbmUucHVzaChmb3JtYXROdW1iZXIobWF0cml4LmdldChpLCBqKSwgbWF4TnVtU2l6ZSwgcGFkTWludXMpKTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goYCR7bGluZS5qb2luKCcgJyl9YCk7XG4gIH1cbiAgaWYgKG1heEogIT09IGNvbHVtbnMpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdICs9IGAgLi4uICR7Y29sdW1ucyAtIG1heENvbHVtbnN9IG1vcmUgY29sdW1uc2A7XG4gIH1cbiAgaWYgKG1heEkgIT09IHJvd3MpIHtcbiAgICByZXN1bHQucHVzaChgLi4uICR7cm93cyAtIG1heFJvd3N9IG1vcmUgcm93c2ApO1xuICB9XG4gIHJldHVybiByZXN1bHQuam9pbihgXFxuJHtpbmRlbnREYXRhfWApO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROdW1iZXIobnVtLCBtYXhOdW1TaXplLCBwYWRNaW51cykge1xuICByZXR1cm4gKFxuICAgIG51bSA+PSAwICYmIHBhZE1pbnVzXG4gICAgICA/IGAgJHtmb3JtYXROdW1iZXIyKG51bSwgbWF4TnVtU2l6ZSAtIDEpfWBcbiAgICAgIDogZm9ybWF0TnVtYmVyMihudW0sIG1heE51bVNpemUpXG4gICkucGFkRW5kKG1heE51bVNpemUpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROdW1iZXIyKG51bSwgbGVuKSB7XG4gIC8vIHNtYWxsLmxlbmd0aCBudW1iZXJzIHNob3VsZCBiZSBhcyBpc1xuICBsZXQgc3RyID0gbnVtLnRvU3RyaW5nKCk7XG4gIGlmIChzdHIubGVuZ3RoIDw9IGxlbikgcmV0dXJuIHN0cjtcblxuICAvLyAoNyknMC4wMDEyMycgaXMgYmV0dGVyIHRoZW4gKDcpJzEuMjNlLTInXG4gIC8vICg4KScwLjAwMDEyMycgaXMgd29yc2UgdGhlbiAoNyknMS4yM2UtMycsXG4gIGxldCBmaXggPSBudW0udG9GaXhlZChsZW4pO1xuICBpZiAoZml4Lmxlbmd0aCA+IGxlbikge1xuICAgIGZpeCA9IG51bS50b0ZpeGVkKE1hdGgubWF4KDAsIGxlbiAtIChmaXgubGVuZ3RoIC0gbGVuKSkpO1xuICB9XG4gIGlmIChcbiAgICBmaXgubGVuZ3RoIDw9IGxlbiAmJlxuICAgICFmaXguc3RhcnRzV2l0aCgnMC4wMDAnKSAmJlxuICAgICFmaXguc3RhcnRzV2l0aCgnLTAuMDAwJylcbiAgKSB7XG4gICAgcmV0dXJuIGZpeDtcbiAgfVxuXG4gIC8vIHdlbGwsIGlmIGl0J3Mgc3RpbGwgdG9vIGxvbmcgdGhlIHVzZXIgc2hvdWxkJ3ZlIHVzZWQgbG9uZ2VyIG51bWJlcnNcbiAgbGV0IGV4cCA9IG51bS50b0V4cG9uZW50aWFsKGxlbik7XG4gIGlmIChleHAubGVuZ3RoID4gbGVuKSB7XG4gICAgZXhwID0gbnVtLnRvRXhwb25lbnRpYWwoTWF0aC5tYXgoMCwgbGVuIC0gKGV4cC5sZW5ndGggLSBsZW4pKSk7XG4gIH1cbiAgcmV0dXJuIGV4cC5zbGljZSgwKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsTWF0aE9wZXJhdGlvbnMoQWJzdHJhY3RNYXRyaXgsIE1hdHJpeCkge1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLmFkZFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmFkZE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hZGRTID0gZnVuY3Rpb24gYWRkUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hZGRNID0gZnVuY3Rpb24gYWRkTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFkZCA9IGZ1bmN0aW9uIGFkZChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYWRkKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnN1YlModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnN1Yk0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJTID0gZnVuY3Rpb24gc3ViUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLSB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJNID0gZnVuY3Rpb24gc3ViTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnN1YiA9IGZ1bmN0aW9uIHN1YihtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc3ViKHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YnRyYWN0ID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YjtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YnRyYWN0UyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3VidHJhY3RNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1Yk07XG4gIEFic3RyYWN0TWF0cml4LnN1YnRyYWN0ID0gQWJzdHJhY3RNYXRyaXguc3ViO1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMubXVsUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMubXVsTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bFMgPSBmdW5jdGlvbiBtdWxTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAqIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bE0gPSBmdW5jdGlvbiBtdWxNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgKiBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubXVsID0gZnVuY3Rpb24gbXVsKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5tdWwodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsdGlwbHkgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsdGlwbHlTID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bFM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWx0aXBseU0gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsTTtcbiAgQWJzdHJhY3RNYXRyaXgubXVsdGlwbHkgPSBBYnN0cmFjdE1hdHJpeC5tdWw7XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uIGRpdih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5kaXZTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5kaXZNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2UyA9IGZ1bmN0aW9uIGRpdlModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2TSA9IGZ1bmN0aW9uIGRpdk0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5kaXYgPSBmdW5jdGlvbiBkaXYobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmRpdih2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZpZGUgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2aWRlUyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2aWRlTSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZNO1xuICBBYnN0cmFjdE1hdHJpeC5kaXZpZGUgPSBBYnN0cmFjdE1hdHJpeC5kaXY7XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZCA9IGZ1bmN0aW9uIG1vZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5tb2RTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5tb2RNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kUyA9IGZ1bmN0aW9uIG1vZFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICUgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kTSA9IGZ1bmN0aW9uIG1vZE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAlIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5tb2QgPSBmdW5jdGlvbiBtb2QobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lm1vZCh2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2R1bHVzID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZHVsdXNTID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZFM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2R1bHVzTSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RNO1xuICBBYnN0cmFjdE1hdHJpeC5tb2R1bHVzID0gQWJzdHJhY3RNYXRyaXgubW9kO1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuYW5kUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuYW5kTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFuZFMgPSBmdW5jdGlvbiBhbmRTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAmIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFuZE0gPSBmdW5jdGlvbiBhbmRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJiBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYW5kID0gZnVuY3Rpb24gYW5kKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hbmQodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLm9yUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMub3JNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUub3JTID0gZnVuY3Rpb24gb3JTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSB8IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm9yTSA9IGZ1bmN0aW9uIG9yTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIHwgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm9yID0gZnVuY3Rpb24gb3IobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lm9yKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24geG9yKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnhvclModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnhvck0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS54b3JTID0gZnVuY3Rpb24geG9yUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgXiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS54b3JNID0gZnVuY3Rpb24geG9yTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIF4gbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnhvciA9IGZ1bmN0aW9uIHhvcihtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgueG9yKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubGVmdFNoaWZ0ID0gZnVuY3Rpb24gbGVmdFNoaWZ0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLmxlZnRTaGlmdFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmxlZnRTaGlmdE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sZWZ0U2hpZnRTID0gZnVuY3Rpb24gbGVmdFNoaWZ0Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPDwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubGVmdFNoaWZ0TSA9IGZ1bmN0aW9uIGxlZnRTaGlmdE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA8PCBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubGVmdFNoaWZ0ID0gZnVuY3Rpb24gbGVmdFNoaWZ0KG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sZWZ0U2hpZnQodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0ID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0UyA9IGZ1bmN0aW9uIHNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA+PiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TSA9IGZ1bmN0aW9uIHNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4gbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQgPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0KG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0KHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMucmlnaHRTaGlmdFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnJpZ2h0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdFMgPSBmdW5jdGlvbiByaWdodFNoaWZ0Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4+IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRNID0gZnVuY3Rpb24gcmlnaHRTaGlmdE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA+Pj4gbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnJpZ2h0U2hpZnQgPSBmdW5jdGlvbiByaWdodFNoaWZ0KG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5yaWdodFNoaWZ0KHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnplcm9GaWxsUmlnaHRTaGlmdCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0UyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0UztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnplcm9GaWxsUmlnaHRTaGlmdE0gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdE07XG4gIEFic3RyYWN0TWF0cml4Lnplcm9GaWxsUmlnaHRTaGlmdCA9IEFic3RyYWN0TWF0cml4LnJpZ2h0U2hpZnQ7XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm5vdCA9IGZ1bmN0aW9uIG5vdCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIH4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubm90ID0gZnVuY3Rpb24gbm90KG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lm5vdCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hYnMgPSBmdW5jdGlvbiBhYnMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFicyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hYnMgPSBmdW5jdGlvbiBhYnMobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYWJzKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFjb3MgPSBmdW5jdGlvbiBhY29zKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hY29zKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFjb3MgPSBmdW5jdGlvbiBhY29zKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFjb3MoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWNvc2ggPSBmdW5jdGlvbiBhY29zaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYWNvc2godGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWNvc2ggPSBmdW5jdGlvbiBhY29zaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hY29zaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hc2luID0gZnVuY3Rpb24gYXNpbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXNpbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hc2luID0gZnVuY3Rpb24gYXNpbihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hc2luKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFzaW5oID0gZnVuY3Rpb24gYXNpbmgoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFzaW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFzaW5oID0gZnVuY3Rpb24gYXNpbmgobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYXNpbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXRhbiA9IGZ1bmN0aW9uIGF0YW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmF0YW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXRhbiA9IGZ1bmN0aW9uIGF0YW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYXRhbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hdGFuaCA9IGZ1bmN0aW9uIGF0YW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hdGFuaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hdGFuaCA9IGZ1bmN0aW9uIGF0YW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmF0YW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNicnQgPSBmdW5jdGlvbiBjYnJ0KCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jYnJ0KHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNicnQgPSBmdW5jdGlvbiBjYnJ0KG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNicnQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY2VpbCA9IGZ1bmN0aW9uIGNlaWwoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNlaWwodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY2VpbCA9IGZ1bmN0aW9uIGNlaWwobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY2VpbCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jbHozMiA9IGZ1bmN0aW9uIGNsejMyKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jbHozMih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jbHozMiA9IGZ1bmN0aW9uIGNsejMyKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNsejMyKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNvcyA9IGZ1bmN0aW9uIGNvcygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY29zKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNvcyA9IGZ1bmN0aW9uIGNvcyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jb3MoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY29zaCA9IGZ1bmN0aW9uIGNvc2goKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNvc2godGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY29zaCA9IGZ1bmN0aW9uIGNvc2gobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY29zaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbiBleHAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmV4cCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5leHAgPSBmdW5jdGlvbiBleHAobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZXhwKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmV4cG0xID0gZnVuY3Rpb24gZXhwbTEoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmV4cG0xKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmV4cG0xID0gZnVuY3Rpb24gZXhwbTEobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZXhwbTEoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZmxvb3IgPSBmdW5jdGlvbiBmbG9vcigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguZmxvb3IodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZmxvb3IgPSBmdW5jdGlvbiBmbG9vcihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5mbG9vcigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5mcm91bmQgPSBmdW5jdGlvbiBmcm91bmQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmZyb3VuZCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5mcm91bmQgPSBmdW5jdGlvbiBmcm91bmQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZnJvdW5kKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxvZyA9IGZ1bmN0aW9uIGxvZygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxvZyA9IGZ1bmN0aW9uIGxvZyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2coKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nMXAgPSBmdW5jdGlvbiBsb2cxcCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMXAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nMXAgPSBmdW5jdGlvbiBsb2cxcChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cxcCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cxMCA9IGZ1bmN0aW9uIGxvZzEwKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5sb2cxMCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cxMCA9IGZ1bmN0aW9uIGxvZzEwKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmxvZzEwKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxvZzIgPSBmdW5jdGlvbiBsb2cyKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5sb2cyKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxvZzIgPSBmdW5jdGlvbiBsb2cyKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmxvZzIoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucm91bmQgPSBmdW5jdGlvbiByb3VuZCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgucm91bmQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucm91bmQgPSBmdW5jdGlvbiByb3VuZChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5yb3VuZCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguc2lnbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaWduID0gZnVuY3Rpb24gc2lnbihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5zaWduKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpbiA9IGZ1bmN0aW9uIHNpbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguc2luKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNpbiA9IGZ1bmN0aW9uIHNpbihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5zaW4oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2luaCA9IGZ1bmN0aW9uIHNpbmgoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpbmgodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2luaCA9IGZ1bmN0aW9uIHNpbmgobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2luaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zcXJ0ID0gZnVuY3Rpb24gc3FydCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguc3FydCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zcXJ0ID0gZnVuY3Rpb24gc3FydChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5zcXJ0KCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnRhbiA9IGZ1bmN0aW9uIHRhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgudGFuKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnRhbiA9IGZ1bmN0aW9uIHRhbihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC50YW4oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUudGFuaCA9IGZ1bmN0aW9uIHRhbmgoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnRhbmgodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgudGFuaCA9IGZ1bmN0aW9uIHRhbmgobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgudGFuaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50cnVuYyA9IGZ1bmN0aW9uIHRydW5jKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC50cnVuYyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC50cnVuYyA9IGZ1bmN0aW9uIHRydW5jKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnRydW5jKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucG93ID0gZnVuY3Rpb24gcG93KG1hdHJpeCwgYXJnMCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnBvdyhhcmcwKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnBvd1ModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnBvd00odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5wb3dTID0gZnVuY3Rpb24gcG93Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5wb3codGhpcy5nZXQoaSwgaiksIHZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5wb3dNID0gZnVuY3Rpb24gcG93TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgucG93KHRoaXMuZ2V0KGksIGopLCBtYXRyaXguZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufVxuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5pbXBvcnQgcmVzY2FsZSBmcm9tICdtbC1hcnJheS1yZXNjYWxlJztcblxuaW1wb3J0IHsgaW5zcGVjdE1hdHJpeCwgaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zIH0gZnJvbSAnLi9pbnNwZWN0JztcbmltcG9ydCB7IGluc3RhbGxNYXRoT3BlcmF0aW9ucyB9IGZyb20gJy4vbWF0aE9wZXJhdGlvbnMnO1xuaW1wb3J0IHtcbiAgc3VtQnlSb3csXG4gIHN1bUJ5Q29sdW1uLFxuICBzdW1BbGwsXG4gIHByb2R1Y3RCeVJvdyxcbiAgcHJvZHVjdEJ5Q29sdW1uLFxuICBwcm9kdWN0QWxsLFxuICB2YXJpYW5jZUJ5Um93LFxuICB2YXJpYW5jZUJ5Q29sdW1uLFxuICB2YXJpYW5jZUFsbCxcbiAgY2VudGVyQnlSb3csXG4gIGNlbnRlckJ5Q29sdW1uLFxuICBjZW50ZXJBbGwsXG4gIHNjYWxlQnlSb3csXG4gIHNjYWxlQnlDb2x1bW4sXG4gIHNjYWxlQWxsLFxuICBnZXRTY2FsZUJ5Um93LFxuICBnZXRTY2FsZUJ5Q29sdW1uLFxuICBnZXRTY2FsZUFsbCxcbn0gZnJvbSAnLi9zdGF0JztcbmltcG9ydCB7XG4gIGNoZWNrUm93VmVjdG9yLFxuICBjaGVja1Jvd0luZGV4LFxuICBjaGVja0NvbHVtbkluZGV4LFxuICBjaGVja0NvbHVtblZlY3RvcixcbiAgY2hlY2tSYW5nZSxcbiAgY2hlY2tOb25FbXB0eSxcbiAgY2hlY2tSb3dJbmRpY2VzLFxuICBjaGVja0NvbHVtbkluZGljZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdE1hdHJpeCB7XG4gIHN0YXRpYyBmcm9tMURBcnJheShuZXdSb3dzLCBuZXdDb2x1bW5zLCBuZXdEYXRhKSB7XG4gICAgbGV0IGxlbmd0aCA9IG5ld1Jvd3MgKiBuZXdDb2x1bW5zO1xuICAgIGlmIChsZW5ndGggIT09IG5ld0RhdGEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZGF0YSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChuZXdSb3dzLCBuZXdDb2x1bW5zKTtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBuZXdSb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgbmV3Q29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgbmV3TWF0cml4LnNldChyb3csIGNvbHVtbiwgbmV3RGF0YVtyb3cgKiBuZXdDb2x1bW5zICsgY29sdW1uXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcm93VmVjdG9yKG5ld0RhdGEpIHtcbiAgICBsZXQgdmVjdG9yID0gbmV3IE1hdHJpeCgxLCBuZXdEYXRhLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2ZWN0b3Iuc2V0KDAsIGksIG5ld0RhdGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGNvbHVtblZlY3RvcihuZXdEYXRhKSB7XG4gICAgbGV0IHZlY3RvciA9IG5ldyBNYXRyaXgobmV3RGF0YS5sZW5ndGgsIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmVjdG9yLnNldChpLCAwLCBuZXdEYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyB6ZXJvcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgb25lcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucykuZmlsbCgxKTtcbiAgfVxuXG4gIHN0YXRpYyByYW5kKHJvd3MsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyByYW5kb20gPSBNYXRoLnJhbmRvbSB9ID0gb3B0aW9ucztcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCByYW5kb20oKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcmFuZEludChyb3dzLCBjb2x1bW5zLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgbWluID0gMCwgbWF4ID0gMTAwMCwgcmFuZG9tID0gTWF0aC5yYW5kb20gfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBpbnRlcnZhbCA9IG1heCAtIG1pbjtcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbWluICsgTWF0aC5yb3VuZChyYW5kb20oKSAqIGludGVydmFsKTtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZXllKHJvd3MsIGNvbHVtbnMsIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkgY29sdW1ucyA9IHJvd3M7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gMTtcbiAgICBsZXQgbWluID0gTWF0aC5taW4ocm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZGlhZyhkYXRhLCByb3dzLCBjb2x1bW5zKSB7XG4gICAgbGV0IGwgPSBkYXRhLmxlbmd0aDtcbiAgICBpZiAocm93cyA9PT0gdW5kZWZpbmVkKSByb3dzID0gbDtcbiAgICBpZiAoY29sdW1ucyA9PT0gdW5kZWZpbmVkKSBjb2x1bW5zID0gcm93cztcbiAgICBsZXQgbWluID0gTWF0aC5taW4obCwgcm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCBkYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIHN0YXRpYyBtaW4obWF0cml4MSwgbWF0cml4Mikge1xuICAgIG1hdHJpeDEgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDEpO1xuICAgIG1hdHJpeDIgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDIpO1xuICAgIGxldCByb3dzID0gbWF0cml4MS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbWF0cml4MS5jb2x1bW5zO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWluKG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIG1heChtYXRyaXgxLCBtYXRyaXgyKSB7XG4gICAgbWF0cml4MSA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4MSk7XG4gICAgbWF0cml4MiA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4Mik7XG4gICAgbGV0IHJvd3MgPSBtYXRyaXgxLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBtYXRyaXgxLmNvbHVtbnM7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyB0aGlzKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWF4KG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTWF0cml4KHZhbHVlKSB7XG4gICAgcmV0dXJuIEFic3RyYWN0TWF0cml4LmlzTWF0cml4KHZhbHVlKSA/IHZhbHVlIDogbmV3IE1hdHJpeCh2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgaXNNYXRyaXgodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5rbGFzcyA9PT0gJ01hdHJpeCc7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzICogdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgYXBwbHkoY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGksIGopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvMURBcnJheSgpIHtcbiAgICBsZXQgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIGFycmF5LnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB0bzJEQXJyYXkoKSB7XG4gICAgbGV0IGNvcHkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb3B5LnB1c2goW10pO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjb3B5W2ldLnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29weTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50bzJEQXJyYXkoKTtcbiAgfVxuXG4gIGlzUm93VmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDE7XG4gIH1cblxuICBpc0NvbHVtblZlY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zID09PSAxO1xuICB9XG5cbiAgaXNWZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyA9PT0gMSB8fCB0aGlzLmNvbHVtbnMgPT09IDE7XG4gIH1cblxuICBpc1NxdWFyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDAgfHwgdGhpcy5jb2x1bW5zID09PSAwO1xuICB9XG5cbiAgaXNTeW1tZXRyaWMoKSB7XG4gICAgaWYgKHRoaXMuaXNTcXVhcmUoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBpOyBqKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgIT09IHRoaXMuZ2V0KGosIGkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc0VjaGVsb25Gb3JtID0gdHJ1ZTtcbiAgICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICAgIHdoaWxlIChpIDwgdGhpcy5yb3dzICYmIGlzRWNoZWxvbkZvcm0pIHtcbiAgICAgIGogPSAwO1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMgJiYgY2hlY2tlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID09PSAwKSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0KGksIGopID09PSAxICYmIGogPiBwcmV2aW91c0NvbHVtbikge1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgIHByZXZpb3VzQ29sdW1uID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0VjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzRWNoZWxvbkZvcm07XG4gIH1cblxuICBpc1JlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IHRydWU7XG4gICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaSA8IHRoaXMucm93cyAmJiBpc1JlZHVjZWRFY2hlbG9uRm9ybSkge1xuICAgICAgaiA9IDA7XG4gICAgICBjaGVja2VkID0gZmFsc2U7XG4gICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucyAmJiBjaGVja2VkID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPT09IDApIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXQoaSwgaikgPT09IDEgJiYgaiA+IHByZXZpb3VzQ29sdW1uKSB7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgcHJldmlvdXNDb2x1bW4gPSBqO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHRoaXMucm93czsgaysrKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBrKSAhPT0gMCkge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzUmVkdWNlZEVjaGVsb25Gb3JtO1xuICB9XG5cbiAgZWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgaCA9IDA7XG4gICAgbGV0IGsgPSAwO1xuICAgIHdoaWxlIChoIDwgcmVzdWx0LnJvd3MgJiYgayA8IHJlc3VsdC5jb2x1bW5zKSB7XG4gICAgICBsZXQgaU1heCA9IGg7XG4gICAgICBmb3IgKGxldCBpID0gaDsgaSA8IHJlc3VsdC5yb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdC5nZXQoaSwgaykgPiByZXN1bHQuZ2V0KGlNYXgsIGspKSB7XG4gICAgICAgICAgaU1heCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQuZ2V0KGlNYXgsIGspID09PSAwKSB7XG4gICAgICAgIGsrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5zd2FwUm93cyhoLCBpTWF4KTtcbiAgICAgICAgbGV0IHRtcCA9IHJlc3VsdC5nZXQoaCwgayk7XG4gICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcmVzdWx0LmNvbHVtbnM7IGorKykge1xuICAgICAgICAgIHJlc3VsdC5zZXQoaCwgaiwgcmVzdWx0LmdldChoLCBqKSAvIHRtcCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGggKyAxOyBpIDwgcmVzdWx0LnJvd3M7IGkrKykge1xuICAgICAgICAgIGxldCBmYWN0b3IgPSByZXN1bHQuZ2V0KGksIGspIC8gcmVzdWx0LmdldChoLCBrKTtcbiAgICAgICAgICByZXN1bHQuc2V0KGksIGssIDApO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IHJlc3VsdC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgcmVzdWx0LmdldChpLCBqKSAtIHJlc3VsdC5nZXQoaCwgaikgKiBmYWN0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoKys7XG4gICAgICAgIGsrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5lY2hlbG9uRm9ybSgpO1xuICAgIGxldCBtID0gcmVzdWx0LmNvbHVtbnM7XG4gICAgbGV0IG4gPSByZXN1bHQucm93cztcbiAgICBsZXQgaCA9IG4gLSAxO1xuICAgIHdoaWxlIChoID49IDApIHtcbiAgICAgIGlmIChyZXN1bHQubWF4Um93KGgpID09PSAwKSB7XG4gICAgICAgIGgtLTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwID0gMDtcbiAgICAgICAgbGV0IHBpdm90ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlIChwIDwgbiAmJiBwaXZvdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LmdldChoLCBwKSA9PT0gMSkge1xuICAgICAgICAgICAgcGl2b3QgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGZhY3RvciA9IHJlc3VsdC5nZXQoaSwgcCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IHA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0bXAgPSByZXN1bHQuZ2V0KGksIGopIC0gZmFjdG9yICogcmVzdWx0LmdldChoLCBqKTtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgdG1wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHJlcGVhdChvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcm93cyA9IDEsIGNvbHVtbnMgPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihyb3dzKSB8fCByb3dzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jvd3MgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbnMpIHx8IGNvbHVtbnMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgIH1cbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MgKiByb3dzLCB0aGlzLmNvbHVtbnMgKiBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldFN1Yk1hdHJpeCh0aGlzLCB0aGlzLnJvd3MgKiBpLCB0aGlzLmNvbHVtbnMgKiBqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIGZpbGwodmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBuZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsUygtMSk7XG4gIH1cblxuICBnZXRSb3coaW5kZXgpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgcm93ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgcm93LnB1c2godGhpcy5nZXQoaW5kZXgsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIGdldFJvd1ZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXgucm93VmVjdG9yKHRoaXMuZ2V0Um93KGluZGV4KSk7XG4gIH1cblxuICBzZXRSb3coaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja1Jvd1ZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwUm93cyhyb3cxLCByb3cyKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cxKTtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdzIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQocm93MSwgaSk7XG4gICAgICB0aGlzLnNldChyb3cxLCBpLCB0aGlzLmdldChyb3cyLCBpKSk7XG4gICAgICB0aGlzLnNldChyb3cyLCBpLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgY29sdW1uID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29sdW1uLnB1c2godGhpcy5nZXQoaSwgaW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIGdldENvbHVtblZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXguY29sdW1uVmVjdG9yKHRoaXMuZ2V0Q29sdW1uKGluZGV4KSk7XG4gIH1cblxuICBzZXRDb2x1bW4oaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja0NvbHVtblZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwQ29sdW1ucyhjb2x1bW4xLCBjb2x1bW4yKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4xKTtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbjIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQoaSwgY29sdW1uMSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4xLCB0aGlzLmdldChpLCBjb2x1bW4yKSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4yLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3coaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIHRoaXMuZ2V0KGluZGV4LCBpKSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW4oaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIHRoaXMuZ2V0KGksIGluZGV4KSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtYXgoYnkpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgY29uc3QgbWF4ID0gbmV3IEFycmF5KHRoaXMucm93cykuZmlsbChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA+IG1heFtyb3ddKSB7XG4gICAgICAgICAgICAgIG1heFtyb3ddID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBjb25zdCBtYXggPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKS5maWxsKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pID4gbWF4W2NvbHVtbl0pIHtcbiAgICAgICAgICAgICAgbWF4W2NvbHVtbl0gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBsZXQgbWF4ID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pID4gbWF4KSB7XG4gICAgICAgICAgICAgIG1heCA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWF4SW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPiB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluKGJ5KSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgY29uc3QgbWluID0gbmV3IEFycmF5KHRoaXMucm93cykuZmlsbChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA8IG1pbltyb3ddKSB7XG4gICAgICAgICAgICAgIG1pbltyb3ddID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBjb25zdCBtaW4gPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKS5maWxsKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pIDwgbWluW2NvbHVtbl0pIHtcbiAgICAgICAgICAgICAgbWluW2NvbHVtbl0gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBsZXQgbWluID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pIDwgbWluKSB7XG4gICAgICAgICAgICAgIG1pbiA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWluSW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPCB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWF4Um93KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWF4Um93SW5kZXgocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGxldCBpZHggPSBbcm93LCAwXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICAgIGlkeFsxXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBtaW5Sb3cocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICBtaW5Sb3dJbmRleChyb3cpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdyk7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KHJvdywgMCk7XG4gICAgbGV0IGlkeCA9IFtyb3csIDBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgICAgaWR4WzFdID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1heENvbHVtbihjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1heENvbHVtbkluZGV4KGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBsZXQgaWR4ID0gWzAsIGNvbHVtbl07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluQ29sdW1uKGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWluQ29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4pO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCBjb2x1bW4pO1xuICAgIGxldCBpZHggPSBbMCwgY29sdW1uXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICAgIGlkeFswXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBkaWFnKCkge1xuICAgIGxldCBtaW4gPSBNYXRoLm1pbih0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgbGV0IGRpYWcgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbjsgaSsrKSB7XG4gICAgICBkaWFnLnB1c2godGhpcy5nZXQoaSwgaSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGlhZztcbiAgfVxuXG4gIG5vcm0odHlwZSA9ICdmcm9iZW5pdXMnKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKHR5cGUgPT09ICdtYXgnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXgoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdmcm9iZW5pdXMnKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB0aGlzLmdldChpLCBqKSAqIHRoaXMuZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIGN1bXVsYXRpdmVTdW0oKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBzdW0gKz0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZG90KHZlY3RvcjIpIHtcbiAgICBpZiAoQWJzdHJhY3RNYXRyaXguaXNNYXRyaXgodmVjdG9yMikpIHZlY3RvcjIgPSB2ZWN0b3IyLnRvMURBcnJheSgpO1xuICAgIGxldCB2ZWN0b3IxID0gdGhpcy50bzFEQXJyYXkoKTtcbiAgICBpZiAodmVjdG9yMS5sZW5ndGggIT09IHZlY3RvcjIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmVjdG9ycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplJyk7XG4gICAgfVxuICAgIGxldCBkb3QgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVjdG9yMS5sZW5ndGg7IGkrKykge1xuICAgICAgZG90ICs9IHZlY3RvcjFbaV0gKiB2ZWN0b3IyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZG90O1xuICB9XG5cbiAgbW11bChvdGhlcikge1xuICAgIG90aGVyID0gTWF0cml4LmNoZWNrTWF0cml4KG90aGVyKTtcblxuICAgIGxldCBtID0gdGhpcy5yb3dzO1xuICAgIGxldCBuID0gdGhpcy5jb2x1bW5zO1xuICAgIGxldCBwID0gb3RoZXIuY29sdW1ucztcblxuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KG0sIHApO1xuXG4gICAgbGV0IEJjb2xqID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHA7IGorKykge1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgQmNvbGpba10gPSBvdGhlci5nZXQoaywgaik7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIGxldCBzID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzICs9IHRoaXMuZ2V0KGksIGspICogQmNvbGpba107XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc2V0KGksIGosIHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4yeDIob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMiwgMik7XG4gICAgY29uc3QgYTExID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgY29uc3QgYjExID0gb3RoZXIuZ2V0KDAsIDApO1xuICAgIGNvbnN0IGExMiA9IHRoaXMuZ2V0KDAsIDEpO1xuICAgIGNvbnN0IGIxMiA9IG90aGVyLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMSwgMCk7XG4gICAgY29uc3QgYTIyID0gdGhpcy5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDEsIDEpO1xuXG4gICAgLy8gQ29tcHV0ZSBpbnRlcm1lZGlhdGUgdmFsdWVzLlxuICAgIGNvbnN0IG0xID0gKGExMSArIGEyMikgKiAoYjExICsgYjIyKTtcbiAgICBjb25zdCBtMiA9IChhMjEgKyBhMjIpICogYjExO1xuICAgIGNvbnN0IG0zID0gYTExICogKGIxMiAtIGIyMik7XG4gICAgY29uc3QgbTQgPSBhMjIgKiAoYjIxIC0gYjExKTtcbiAgICBjb25zdCBtNSA9IChhMTEgKyBhMTIpICogYjIyO1xuICAgIGNvbnN0IG02ID0gKGEyMSAtIGExMSkgKiAoYjExICsgYjEyKTtcbiAgICBjb25zdCBtNyA9IChhMTIgLSBhMjIpICogKGIyMSArIGIyMik7XG5cbiAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgIGNvbnN0IGMwMCA9IG0xICsgbTQgLSBtNSArIG03O1xuICAgIGNvbnN0IGMwMSA9IG0zICsgbTU7XG4gICAgY29uc3QgYzEwID0gbTIgKyBtNDtcbiAgICBjb25zdCBjMTEgPSBtMSAtIG0yICsgbTMgKyBtNjtcblxuICAgIHJlc3VsdC5zZXQoMCwgMCwgYzAwKTtcbiAgICByZXN1bHQuc2V0KDAsIDEsIGMwMSk7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4zeDMob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMywgMyk7XG5cbiAgICBjb25zdCBhMDAgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBjb25zdCBhMDEgPSB0aGlzLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMDIgPSB0aGlzLmdldCgwLCAyKTtcbiAgICBjb25zdCBhMTAgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBhMTEgPSB0aGlzLmdldCgxLCAxKTtcbiAgICBjb25zdCBhMTIgPSB0aGlzLmdldCgxLCAyKTtcbiAgICBjb25zdCBhMjAgPSB0aGlzLmdldCgyLCAwKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgyLCAxKTtcbiAgICBjb25zdCBhMjIgPSB0aGlzLmdldCgyLCAyKTtcblxuICAgIGNvbnN0IGIwMCA9IG90aGVyLmdldCgwLCAwKTtcbiAgICBjb25zdCBiMDEgPSBvdGhlci5nZXQoMCwgMSk7XG4gICAgY29uc3QgYjAyID0gb3RoZXIuZ2V0KDAsIDIpO1xuICAgIGNvbnN0IGIxMCA9IG90aGVyLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMTEgPSBvdGhlci5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjEyID0gb3RoZXIuZ2V0KDEsIDIpO1xuICAgIGNvbnN0IGIyMCA9IG90aGVyLmdldCgyLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMiwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDIsIDIpO1xuXG4gICAgY29uc3QgbTEgPSAoYTAwICsgYTAxICsgYTAyIC0gYTEwIC0gYTExIC0gYTIxIC0gYTIyKSAqIGIxMTtcbiAgICBjb25zdCBtMiA9IChhMDAgLSBhMTApICogKC1iMDEgKyBiMTEpO1xuICAgIGNvbnN0IG0zID0gYTExICogKC1iMDAgKyBiMDEgKyBiMTAgLSBiMTEgLSBiMTIgLSBiMjAgKyBiMjIpO1xuICAgIGNvbnN0IG00ID0gKC1hMDAgKyBhMTAgKyBhMTEpICogKGIwMCAtIGIwMSArIGIxMSk7XG4gICAgY29uc3QgbTUgPSAoYTEwICsgYTExKSAqICgtYjAwICsgYjAxKTtcbiAgICBjb25zdCBtNiA9IGEwMCAqIGIwMDtcbiAgICBjb25zdCBtNyA9ICgtYTAwICsgYTIwICsgYTIxKSAqIChiMDAgLSBiMDIgKyBiMTIpO1xuICAgIGNvbnN0IG04ID0gKC1hMDAgKyBhMjApICogKGIwMiAtIGIxMik7XG4gICAgY29uc3QgbTkgPSAoYTIwICsgYTIxKSAqICgtYjAwICsgYjAyKTtcbiAgICBjb25zdCBtMTAgPSAoYTAwICsgYTAxICsgYTAyIC0gYTExIC0gYTEyIC0gYTIwIC0gYTIxKSAqIGIxMjtcbiAgICBjb25zdCBtMTEgPSBhMjEgKiAoLWIwMCArIGIwMiArIGIxMCAtIGIxMSAtIGIxMiAtIGIyMCArIGIyMSk7XG4gICAgY29uc3QgbTEyID0gKC1hMDIgKyBhMjEgKyBhMjIpICogKGIxMSArIGIyMCAtIGIyMSk7XG4gICAgY29uc3QgbTEzID0gKGEwMiAtIGEyMikgKiAoYjExIC0gYjIxKTtcbiAgICBjb25zdCBtMTQgPSBhMDIgKiBiMjA7XG4gICAgY29uc3QgbTE1ID0gKGEyMSArIGEyMikgKiAoLWIyMCArIGIyMSk7XG4gICAgY29uc3QgbTE2ID0gKC1hMDIgKyBhMTEgKyBhMTIpICogKGIxMiArIGIyMCAtIGIyMik7XG4gICAgY29uc3QgbTE3ID0gKGEwMiAtIGExMikgKiAoYjEyIC0gYjIyKTtcbiAgICBjb25zdCBtMTggPSAoYTExICsgYTEyKSAqICgtYjIwICsgYjIyKTtcbiAgICBjb25zdCBtMTkgPSBhMDEgKiBiMTA7XG4gICAgY29uc3QgbTIwID0gYTEyICogYjIxO1xuICAgIGNvbnN0IG0yMSA9IGExMCAqIGIwMjtcbiAgICBjb25zdCBtMjIgPSBhMjAgKiBiMDE7XG4gICAgY29uc3QgbTIzID0gYTIyICogYjIyO1xuXG4gICAgY29uc3QgYzAwID0gbTYgKyBtMTQgKyBtMTk7XG4gICAgY29uc3QgYzAxID0gbTEgKyBtNCArIG01ICsgbTYgKyBtMTIgKyBtMTQgKyBtMTU7XG4gICAgY29uc3QgYzAyID0gbTYgKyBtNyArIG05ICsgbTEwICsgbTE0ICsgbTE2ICsgbTE4O1xuICAgIGNvbnN0IGMxMCA9IG0yICsgbTMgKyBtNCArIG02ICsgbTE0ICsgbTE2ICsgbTE3O1xuICAgIGNvbnN0IGMxMSA9IG0yICsgbTQgKyBtNSArIG02ICsgbTIwO1xuICAgIGNvbnN0IGMxMiA9IG0xNCArIG0xNiArIG0xNyArIG0xOCArIG0yMTtcbiAgICBjb25zdCBjMjAgPSBtNiArIG03ICsgbTggKyBtMTEgKyBtMTIgKyBtMTMgKyBtMTQ7XG4gICAgY29uc3QgYzIxID0gbTEyICsgbTEzICsgbTE0ICsgbTE1ICsgbTIyO1xuICAgIGNvbnN0IGMyMiA9IG02ICsgbTcgKyBtOCArIG05ICsgbTIzO1xuXG4gICAgcmVzdWx0LnNldCgwLCAwLCBjMDApO1xuICAgIHJlc3VsdC5zZXQoMCwgMSwgYzAxKTtcbiAgICByZXN1bHQuc2V0KDAsIDIsIGMwMik7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXN1bHQuc2V0KDEsIDIsIGMxMik7XG4gICAgcmVzdWx0LnNldCgyLCAwLCBjMjApO1xuICAgIHJlc3VsdC5zZXQoMiwgMSwgYzIxKTtcbiAgICByZXN1bHQuc2V0KDIsIDIsIGMyMik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG1tdWxTdHJhc3Nlbih5KSB7XG4gICAgeSA9IE1hdHJpeC5jaGVja01hdHJpeCh5KTtcbiAgICBsZXQgeCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgcjEgPSB4LnJvd3M7XG4gICAgbGV0IGMxID0geC5jb2x1bW5zO1xuICAgIGxldCByMiA9IHkucm93cztcbiAgICBsZXQgYzIgPSB5LmNvbHVtbnM7XG4gICAgaWYgKGMxICE9PSByMikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE11bHRpcGx5aW5nICR7cjF9IHggJHtjMX0gYW5kICR7cjJ9IHggJHtjMn0gbWF0cml4OiBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQdXQgYSBtYXRyaXggaW50byB0aGUgdG9wIGxlZnQgb2YgYSBtYXRyaXggb2YgemVyb3MuXG4gICAgLy8gYHJvd3NgIGFuZCBgY29sc2AgYXJlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBvdXRwdXQgbWF0cml4LlxuICAgIGZ1bmN0aW9uIGVtYmVkKG1hdCwgcm93cywgY29scykge1xuICAgICAgbGV0IHIgPSBtYXQucm93cztcbiAgICAgIGxldCBjID0gbWF0LmNvbHVtbnM7XG4gICAgICBpZiAociA9PT0gcm93cyAmJiBjID09PSBjb2xzKSB7XG4gICAgICAgIHJldHVybiBtYXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzdWx0YXQgPSBBYnN0cmFjdE1hdHJpeC56ZXJvcyhyb3dzLCBjb2xzKTtcbiAgICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgobWF0LCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGF0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSBib3RoIG1hdHJpY2VzIGFyZSB0aGUgc2FtZSBzaXplLlxuICAgIC8vIFRoaXMgaXMgZXhjbHVzaXZlbHkgZm9yIHNpbXBsaWNpdHk6XG4gICAgLy8gdGhpcyBhbGdvcml0aG0gY2FuIGJlIGltcGxlbWVudGVkIHdpdGggbWF0cmljZXMgb2YgZGlmZmVyZW50IHNpemVzLlxuXG4gICAgbGV0IHIgPSBNYXRoLm1heChyMSwgcjIpO1xuICAgIGxldCBjID0gTWF0aC5tYXgoYzEsIGMyKTtcbiAgICB4ID0gZW1iZWQoeCwgciwgYyk7XG4gICAgeSA9IGVtYmVkKHksIHIsIGMpO1xuXG4gICAgLy8gT3VyIHJlY3Vyc2l2ZSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbi5cbiAgICBmdW5jdGlvbiBibG9ja011bHQoYSwgYiwgcm93cywgY29scykge1xuICAgICAgLy8gRm9yIHNtYWxsIG1hdHJpY2VzLCByZXNvcnQgdG8gbmFpdmUgbXVsdGlwbGljYXRpb24uXG4gICAgICBpZiAocm93cyA8PSA1MTIgfHwgY29scyA8PSA1MTIpIHtcbiAgICAgICAgcmV0dXJuIGEubW11bChiKTsgLy8gYSBpcyBlcXVpdmFsZW50IHRvIHRoaXNcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgZHluYW1pYyBwYWRkaW5nLlxuICAgICAgaWYgKHJvd3MgJSAyID09PSAxICYmIGNvbHMgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzICsgMSwgY29scyArIDEpO1xuICAgICAgICBiID0gZW1iZWQoYiwgcm93cyArIDEsIGNvbHMgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAocm93cyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgIH0gZWxzZSBpZiAoY29scyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGhhbGZSb3dzID0gcGFyc2VJbnQoYS5yb3dzIC8gMiwgMTApO1xuICAgICAgbGV0IGhhbGZDb2xzID0gcGFyc2VJbnQoYS5jb2x1bW5zIC8gMiwgMTApO1xuICAgICAgLy8gU3ViZGl2aWRlIGlucHV0IG1hdHJpY2VzLlxuICAgICAgbGV0IGExMSA9IGEuc3ViTWF0cml4KDAsIGhhbGZSb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcbiAgICAgIGxldCBiMTEgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7XG5cbiAgICAgIGxldCBhMTIgPSBhLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMTIgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBiLmNvbHVtbnMgLSAxKTtcblxuICAgICAgbGV0IGEyMSA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuICAgICAgbGV0IGIyMSA9IGIuc3ViTWF0cml4KGhhbGZSb3dzLCBiLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuXG4gICAgICBsZXQgYTIyID0gYS5zdWJNYXRyaXgoaGFsZlJvd3MsIGEucm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMjIgPSBiLnN1Yk1hdHJpeChoYWxmUm93cywgYi5yb3dzIC0gMSwgaGFsZkNvbHMsIGIuY29sdW1ucyAtIDEpO1xuXG4gICAgICAvLyBDb21wdXRlIGludGVybWVkaWF0ZSB2YWx1ZXMuXG4gICAgICBsZXQgbTEgPSBibG9ja011bHQoXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChhMTEsIGEyMiksXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChiMTEsIGIyMiksXG4gICAgICAgIGhhbGZSb3dzLFxuICAgICAgICBoYWxmQ29scyxcbiAgICAgICk7XG4gICAgICBsZXQgbTIgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGEyMSwgYTIyKSwgYjExLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG0zID0gYmxvY2tNdWx0KGExMSwgQWJzdHJhY3RNYXRyaXguc3ViKGIxMiwgYjIyKSwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtNCA9IGJsb2NrTXVsdChhMjIsIEFic3RyYWN0TWF0cml4LnN1YihiMjEsIGIxMSksIGhhbGZSb3dzLCBoYWxmQ29scyk7XG4gICAgICBsZXQgbTUgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGExMSwgYTEyKSwgYjIyLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG02ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTIxLCBhMTEpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjExLCBiMTIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuICAgICAgbGV0IG03ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTEyLCBhMjIpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjIxLCBiMjIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgICAgbGV0IGMxMSA9IEFic3RyYWN0TWF0cml4LmFkZChtMSwgbTQpO1xuICAgICAgYzExLnN1YihtNSk7XG4gICAgICBjMTEuYWRkKG03KTtcbiAgICAgIGxldCBjMTIgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTMsIG01KTtcbiAgICAgIGxldCBjMjEgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTIsIG00KTtcbiAgICAgIGxldCBjMjIgPSBBYnN0cmFjdE1hdHJpeC5zdWIobTEsIG0yKTtcbiAgICAgIGMyMi5hZGQobTMpO1xuICAgICAgYzIyLmFkZChtNik7XG5cbiAgICAgIC8vIENyb3Agb3V0cHV0IHRvIHRoZSBkZXNpcmVkIHNpemUgKHVuZG8gZHluYW1pYyBwYWRkaW5nKS5cbiAgICAgIGxldCByZXN1bHRhdCA9IEFic3RyYWN0TWF0cml4Lnplcm9zKDIgKiBjMTEucm93cywgMiAqIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMxMSwgMCwgMCk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMTIsIGMxMS5yb3dzLCAwKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMyMSwgMCwgYzExLmNvbHVtbnMpO1xuICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgoYzIyLCBjMTEucm93cywgYzExLmNvbHVtbnMpO1xuICAgICAgcmV0dXJuIHJlc3VsdGF0LnN1Yk1hdHJpeCgwLCByb3dzIC0gMSwgMCwgY29scyAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBibG9ja011bHQoeCwgeSwgciwgYyk7XG4gIH1cblxuICBzY2FsZVJvd3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhpKTtcbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByZXNjYWxlKHJvdywgeyBtaW4sIG1heCwgb3V0cHV0OiByb3cgfSk7XG4gICAgICB9XG4gICAgICBuZXdNYXRyaXguc2V0Um93KGksIHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzY2FsZUNvbHVtbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbihpKTtcbiAgICAgIGlmIChjb2x1bW4ubGVuZ3RoKSB7XG4gICAgICAgIHJlc2NhbGUoY29sdW1uLCB7XG4gICAgICAgICAgbWluOiBtaW4sXG4gICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgICAgb3V0cHV0OiBjb2x1bW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbmV3TWF0cml4LnNldENvbHVtbihpLCBjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgZmxpcFJvd3MoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5jZWlsKHRoaXMuY29sdW1ucyAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWlkZGxlOyBqKyspIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIGxldCBsYXN0ID0gdGhpcy5nZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBsYXN0KTtcbiAgICAgICAgdGhpcy5zZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGosIGZpcnN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmbGlwQ29sdW1ucygpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmNlaWwodGhpcy5yb3dzIC8gMik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaWRkbGU7IGkrKykge1xuICAgICAgICBsZXQgZmlyc3QgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgbGV0IGxhc3QgPSB0aGlzLmdldCh0aGlzLnJvd3MgLSAxIC0gaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIGxhc3QpO1xuICAgICAgICB0aGlzLnNldCh0aGlzLnJvd3MgLSAxIC0gaSwgaiwgZmlyc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGtyb25lY2tlclByb2R1Y3Qob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG5cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IHRoaXMuY29sdW1ucztcbiAgICBsZXQgcCA9IG90aGVyLnJvd3M7XG4gICAgbGV0IHEgPSBvdGhlci5jb2x1bW5zO1xuXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgobSAqIHAsIG4gKiBxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwOyBrKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IHE7IGwrKykge1xuICAgICAgICAgICAgcmVzdWx0LnNldChwICogaSArIGssIHEgKiBqICsgbCwgdGhpcy5nZXQoaSwgaikgKiBvdGhlci5nZXQoaywgbCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAga3JvbmVja2VyU3VtKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGlmICghdGhpcy5pc1NxdWFyZSgpIHx8ICFvdGhlci5pc1NxdWFyZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tyb25lY2tlciBTdW0gbmVlZHMgdHdvIFNxdWFyZSBNYXRyaWNlcycpO1xuICAgIH1cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IG90aGVyLnJvd3M7XG4gICAgbGV0IEF4SSA9IHRoaXMua3JvbmVja2VyUHJvZHVjdChNYXRyaXguZXllKG4sIG4pKTtcbiAgICBsZXQgSXhCID0gTWF0cml4LmV5ZShtLCBtKS5rcm9uZWNrZXJQcm9kdWN0KG90aGVyKTtcbiAgICByZXR1cm4gQXhJLmFkZChJeEIpO1xuICB9XG5cbiAgdHJhbnNwb3NlKCkge1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHRoaXMuY29sdW1ucywgdGhpcy5yb3dzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHJlc3VsdC5zZXQoaiwgaSwgdGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc29ydFJvd3MoY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZU51bWJlcnMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICB0aGlzLnNldFJvdyhpLCB0aGlzLmdldFJvdyhpKS5zb3J0KGNvbXBhcmVGdW5jdGlvbikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNvcnRDb2x1bW5zKGNvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVOdW1iZXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXRDb2x1bW4oaSwgdGhpcy5nZXRDb2x1bW4oaSkuc29ydChjb21wYXJlRnVuY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJNYXRyaXgoc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoXG4gICAgICBlbmRSb3cgLSBzdGFydFJvdyArIDEsXG4gICAgICBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEsXG4gICAgKTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBzdGFydENvbHVtbjsgaiA8PSBlbmRDb2x1bW47IGorKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KGkgLSBzdGFydFJvdywgaiAtIHN0YXJ0Q29sdW1uLCB0aGlzLmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdWJNYXRyaXhSb3coaW5kaWNlcywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGlmIChzdGFydENvbHVtbiA9PT0gdW5kZWZpbmVkKSBzdGFydENvbHVtbiA9IDA7XG4gICAgaWYgKGVuZENvbHVtbiA9PT0gdW5kZWZpbmVkKSBlbmRDb2x1bW4gPSB0aGlzLmNvbHVtbnMgLSAxO1xuICAgIGlmIChcbiAgICAgIHN0YXJ0Q29sdW1uID4gZW5kQ29sdW1uIHx8XG4gICAgICBzdGFydENvbHVtbiA8IDAgfHxcbiAgICAgIHN0YXJ0Q29sdW1uID49IHRoaXMuY29sdW1ucyB8fFxuICAgICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgICAgZW5kQ29sdW1uID49IHRoaXMuY29sdW1uc1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0FyZ3VtZW50IG91dCBvZiByYW5nZScpO1xuICAgIH1cblxuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KGluZGljZXMubGVuZ3RoLCBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sdW1uOyBqIDw9IGVuZENvbHVtbjsgaisrKSB7XG4gICAgICAgIGlmIChpbmRpY2VzW2ldIDwgMCB8fCBpbmRpY2VzW2ldID49IHRoaXMucm93cykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSb3cgaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGljZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TWF0cml4LnNldChpLCBqIC0gc3RhcnRDb2x1bW4sIHRoaXMuZ2V0KGluZGljZXNbaV0sIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHN1Yk1hdHJpeENvbHVtbihpbmRpY2VzLCBzdGFydFJvdywgZW5kUm93KSB7XG4gICAgaWYgKHN0YXJ0Um93ID09PSB1bmRlZmluZWQpIHN0YXJ0Um93ID0gMDtcbiAgICBpZiAoZW5kUm93ID09PSB1bmRlZmluZWQpIGVuZFJvdyA9IHRoaXMucm93cyAtIDE7XG4gICAgaWYgKFxuICAgICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgICAgc3RhcnRSb3cgPj0gdGhpcy5yb3dzIHx8XG4gICAgICBlbmRSb3cgPCAwIHx8XG4gICAgICBlbmRSb3cgPj0gdGhpcy5yb3dzXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXJndW1lbnQgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoZW5kUm93IC0gc3RhcnRSb3cgKyAxLCBpbmRpY2VzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gc3RhcnRSb3c7IGogPD0gZW5kUm93OyBqKyspIHtcbiAgICAgICAgaWYgKGluZGljZXNbaV0gPCAwIHx8IGluZGljZXNbaV0gPj0gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kaWNlc1tpXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdNYXRyaXguc2V0KGogLSBzdGFydFJvdywgaSwgdGhpcy5nZXQoaiwgaW5kaWNlc1tpXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc2V0U3ViTWF0cml4KG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBsZXQgZW5kUm93ID0gc3RhcnRSb3cgKyBtYXRyaXgucm93cyAtIDE7XG4gICAgbGV0IGVuZENvbHVtbiA9IHN0YXJ0Q29sdW1uICsgbWF0cml4LmNvbHVtbnMgLSAxO1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoc3RhcnRSb3cgKyBpLCBzdGFydENvbHVtbiArIGosIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNlbGVjdGlvbihyb3dJbmRpY2VzLCBjb2x1bW5JbmRpY2VzKSB7XG4gICAgY2hlY2tSb3dJbmRpY2VzKHRoaXMsIHJvd0luZGljZXMpO1xuICAgIGNoZWNrQ29sdW1uSW5kaWNlcyh0aGlzLCBjb2x1bW5JbmRpY2VzKTtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChyb3dJbmRpY2VzLmxlbmd0aCwgY29sdW1uSW5kaWNlcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93SW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHJvd0luZGV4ID0gcm93SW5kaWNlc1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uSW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5JbmRpY2VzW2pdO1xuICAgICAgICBuZXdNYXRyaXguc2V0KGksIGosIHRoaXMuZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgdHJhY2UoKSB7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBsZXQgdHJhY2UgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIHRyYWNlICs9IHRoaXMuZ2V0KGksIGkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2U7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KHJvdywgY29sdW1uLCB0aGlzLmdldChyb3csIGNvbHVtbikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3VtKGJ5KSB7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Q29sdW1uKHRoaXMpO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBzdW1BbGwodGhpcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHByb2R1Y3QoYnkpIHtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RCeUNvbHVtbih0aGlzKTtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEFsbCh0aGlzKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWVhbihieSkge1xuICAgIGNvbnN0IHN1bSA9IHRoaXMuc3VtKGJ5KTtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5jb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlICdjb2x1bW4nOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5yb3dzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHN1bSAvIHRoaXMuc2l6ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgdmFyaWFuY2UoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHVuYmlhc2VkID0gdHJ1ZSwgbWVhbiA9IHRoaXMubWVhbihieSkgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiB1bmJpYXNlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmJpYXNlZCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgIH1cbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGlmICghaXNBbnlBcnJheShtZWFuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUJ5Um93KHRoaXMsIHVuYmlhc2VkLCBtZWFuKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KG1lYW4pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVhbiBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhbmNlQnlDb2x1bW4odGhpcywgdW5iaWFzZWQsIG1lYW4pO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgaWYgKHR5cGVvZiBtZWFuICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUFsbCh0aGlzLCB1bmJpYXNlZCwgbWVhbik7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YW5kYXJkRGV2aWF0aW9uKGJ5LCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBieSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBieTtcbiAgICAgIGJ5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB2YXJpYW5jZSA9IHRoaXMudmFyaWFuY2UoYnksIG9wdGlvbnMpO1xuICAgIGlmIChieSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YXJpYW5jZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXJpYW5jZVtpXSA9IE1hdGguc3FydCh2YXJpYW5jZVtpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFyaWFuY2U7XG4gICAgfVxuICB9XG5cbiAgY2VudGVyKGJ5LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGJ5O1xuICAgICAgYnkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBjZW50ZXIgPSB0aGlzLm1lYW4oYnkpIH0gPSBvcHRpb25zO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KGNlbnRlcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckJ5Um93KHRoaXMsIGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBpZiAoIWlzQW55QXJyYXkoY2VudGVyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NlbnRlciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VudGVyQnlDb2x1bW4odGhpcywgY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBpZiAodHlwZW9mIGNlbnRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckFsbCh0aGlzLCBjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgc2NhbGUoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBsZXQgc2NhbGUgPSBvcHRpb25zLnNjYWxlO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlSb3codGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQW55QXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlSb3codGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlDb2x1bW4odGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQW55QXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlDb2x1bW4odGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgdW5kZWZpbmVkOiB7XG4gICAgICAgIGlmIChzY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NhbGUgPSBnZXRTY2FsZUFsbCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2NhbGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQWxsKHRoaXMsIHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICB9XG59XG5cbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5rbGFzcyA9ICdNYXRyaXgnO1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnKSB7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZVtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9XG4gICAgaW5zcGVjdE1hdHJpeDtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU51bWJlcnMoYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlPZk51bWJlcnMoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LmV2ZXJ5KChlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJztcbiAgfSk7XG59XG5cbi8vIFN5bm9ueW1zXG5BYnN0cmFjdE1hdHJpeC5yYW5kb20gPSBBYnN0cmFjdE1hdHJpeC5yYW5kO1xuQWJzdHJhY3RNYXRyaXgucmFuZG9tSW50ID0gQWJzdHJhY3RNYXRyaXgucmFuZEludDtcbkFic3RyYWN0TWF0cml4LmRpYWdvbmFsID0gQWJzdHJhY3RNYXRyaXguZGlhZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnb25hbCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnO1xuQWJzdHJhY3RNYXRyaXguaWRlbnRpdHkgPSBBYnN0cmFjdE1hdHJpeC5leWU7XG5BYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubmVnYXRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm5lZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50ZW5zb3JQcm9kdWN0ID1cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmtyb25lY2tlclByb2R1Y3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFic3RyYWN0TWF0cml4IHtcbiAgY29uc3RydWN0b3IoblJvd3MsIG5Db2x1bW5zKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoTWF0cml4LmlzTWF0cml4KG5Sb3dzKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuICAgICAgcmV0dXJuIG5Sb3dzLmNsb25lKCk7XG4gICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Sb3dzKSAmJiBuUm93cyA+PSAwKSB7XG4gICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgbWF0cml4XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Db2x1bW5zKSAmJiBuQ29sdW1ucyA+PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKG5ldyBGbG9hdDY0QXJyYXkobkNvbHVtbnMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbkNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQW55QXJyYXkoblJvd3MpKSB7XG4gICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSB0aGUgMkQgYXJyYXlcbiAgICAgIGNvbnN0IGFycmF5RGF0YSA9IG5Sb3dzO1xuICAgICAgblJvd3MgPSBhcnJheURhdGEubGVuZ3RoO1xuICAgICAgbkNvbHVtbnMgPSBuUm93cyA/IGFycmF5RGF0YVswXS5sZW5ndGggOiAwO1xuICAgICAgaWYgKHR5cGVvZiBuQ29sdW1ucyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnRGF0YSBtdXN0IGJlIGEgMkQgYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICBpZiAoYXJyYXlEYXRhW2ldLmxlbmd0aCAhPT0gbkNvbHVtbnMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5jb25zaXN0ZW50IGFycmF5IGRpbWVuc2lvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXJyYXlPZk51bWJlcnMoYXJyYXlEYXRhW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGRhdGEgY29udGFpbnMgbm9uLW51bWVyaWMgdmFsdWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnB1c2goRmxvYXQ2NEFycmF5LmZyb20oYXJyYXlEYXRhW2ldKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIGFuIGFycmF5JyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm93cyA9IG5Sb3dzO1xuICAgIHRoaXMuY29sdW1ucyA9IG5Db2x1bW5zO1xuICB9XG5cbiAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgfVxuXG4gIHJlbW92ZVJvdyhpbmRleCkge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpO1xuICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucm93cyAtPSAxO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkUm93KGluZGV4LCBhcnJheSkge1xuICAgIGlmIChhcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcnJheSA9IGluZGV4O1xuICAgICAgaW5kZXggPSB0aGlzLnJvd3M7XG4gICAgfVxuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgsIHRydWUpO1xuICAgIGFycmF5ID0gRmxvYXQ2NEFycmF5LmZyb20oY2hlY2tSb3dWZWN0b3IodGhpcywgYXJyYXkpKTtcbiAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4LCAwLCBhcnJheSk7XG4gICAgdGhpcy5yb3dzICs9IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW1vdmVDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucyAtIDEpO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleDsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSBpbmRleCArIDE7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBuZXdSb3dbaiAtIDFdID0gdGhpcy5kYXRhW2ldW2pdO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhW2ldID0gbmV3Um93O1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnMgLT0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZENvbHVtbihpbmRleCwgYXJyYXkpIHtcbiAgICBpZiAodHlwZW9mIGFycmF5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgYXJyYXkgPSBpbmRleDtcbiAgICAgIGluZGV4ID0gdGhpcy5jb2x1bW5zO1xuICAgIH1cbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4LCB0cnVlKTtcbiAgICBhcnJheSA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIGFycmF5KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucyArIDEpO1xuICAgICAgbGV0IGogPSAwO1xuICAgICAgZm9yICg7IGogPCBpbmRleDsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIG5ld1Jvd1tqKytdID0gYXJyYXlbaV07XG4gICAgICBmb3IgKDsgaiA8IHRoaXMuY29sdW1ucyArIDE7IGorKykge1xuICAgICAgICBuZXdSb3dbal0gPSB0aGlzLmRhdGFbaV1baiAtIDFdO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhW2ldID0gbmV3Um93O1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnMgKz0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5pbnN0YWxsTWF0aE9wZXJhdGlvbnMoQWJzdHJhY3RNYXRyaXgsIE1hdHJpeCk7XG4iLCJpbXBvcnQgeyBuZXdBcnJheSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1CeVJvdyhtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5yb3dzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1baV0gKz0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bUJ5Q29sdW1uKG1hdHJpeCkge1xuICBsZXQgc3VtID0gbmV3QXJyYXkobWF0cml4LmNvbHVtbnMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHtcbiAgICAgIHN1bVtqXSArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtQWxsKG1hdHJpeCkge1xuICBsZXQgdiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgdiArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RCeVJvdyhtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5yb3dzLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1baV0gKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RCeUNvbHVtbihtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5jb2x1bW5zLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1bal0gKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RBbGwobWF0cml4KSB7XG4gIGxldCB2ID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICB2ICo9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFuY2VCeVJvdyhtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCB2YXJpYW5jZSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgbGV0IHN1bTEgPSAwO1xuICAgIGxldCBzdW0yID0gMDtcbiAgICBsZXQgeCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgIHggPSBtYXRyaXguZ2V0KGksIGopIC0gbWVhbltpXTtcbiAgICAgIHN1bTEgKz0geDtcbiAgICAgIHN1bTIgKz0geCAqIHg7XG4gICAgfVxuICAgIGlmICh1bmJpYXNlZCkge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyBjb2xzKSAvIChjb2xzIC0gMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXJpYW5jZS5wdXNoKChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIGNvbHMpIC8gY29scyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YXJpYW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhbmNlQnlDb2x1bW4obWF0cml4LCB1bmJpYXNlZCwgbWVhbikge1xuICBjb25zdCByb3dzID0gbWF0cml4LnJvd3M7XG4gIGNvbnN0IGNvbHMgPSBtYXRyaXguY29sdW1ucztcbiAgY29uc3QgdmFyaWFuY2UgPSBbXTtcblxuICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgIGxldCBzdW0xID0gMDtcbiAgICBsZXQgc3VtMiA9IDA7XG4gICAgbGV0IHggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICB4ID0gbWF0cml4LmdldChpLCBqKSAtIG1lYW5bal07XG4gICAgICBzdW0xICs9IHg7XG4gICAgICBzdW0yICs9IHggKiB4O1xuICAgIH1cbiAgICBpZiAodW5iaWFzZWQpIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gcm93cykgLyAocm93cyAtIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyByb3dzKSAvIHJvd3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFyaWFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW5jZUFsbChtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCBzaXplID0gcm93cyAqIGNvbHM7XG5cbiAgbGV0IHN1bTEgPSAwO1xuICBsZXQgc3VtMiA9IDA7XG4gIGxldCB4ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgeCA9IG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuO1xuICAgICAgc3VtMSArPSB4O1xuICAgICAgc3VtMiArPSB4ICogeDtcbiAgICB9XG4gIH1cbiAgaWYgKHVuYmlhc2VkKSB7XG4gICAgcmV0dXJuIChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHNpemUpIC8gKHNpemUgLSAxKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gc2l6ZSkgLyBzaXplO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZW50ZXJCeVJvdyhtYXRyaXgsIG1lYW4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlckJ5Q29sdW1uKG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW5bal0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VudGVyQWxsKG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW4pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVCeVJvdyhtYXRyaXgpIHtcbiAgY29uc3Qgc2NhbGUgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyAobWF0cml4LmNvbHVtbnMgLSAxKTtcbiAgICB9XG4gICAgc2NhbGUucHVzaChNYXRoLnNxcnQoc3VtKSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVCeVJvdyhtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGVbaV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVCeUNvbHVtbihtYXRyaXgpIHtcbiAgY29uc3Qgc2NhbGUgPSBbXTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyAobWF0cml4LnJvd3MgLSAxKTtcbiAgICB9XG4gICAgc2NhbGUucHVzaChNYXRoLnNxcnQoc3VtKSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVCeUNvbHVtbihtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGVbal0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVBbGwobWF0cml4KSB7XG4gIGNvbnN0IGRpdmlkZXIgPSBtYXRyaXguc2l6ZSAtIDE7XG4gIGxldCBzdW0gPSAwO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICAgIHN1bSArPSBNYXRoLnBvdyhtYXRyaXguZ2V0KGksIGopLCAyKSAvIGRpdmlkZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQWxsKG1hdHJpeCwgc2NhbGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLyBzY2FsZSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FueUFycmF5IH0gZnJvbSAnaXMtYW55LWFycmF5JztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCBhIHJvdyBpbmRleCBpcyBub3Qgb3V0IG9mIGJvdW5kc1xuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvdXRlcl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUm93SW5kZXgobWF0cml4LCBpbmRleCwgb3V0ZXIpIHtcbiAgbGV0IG1heCA9IG91dGVyID8gbWF0cml4LnJvd3MgOiBtYXRyaXgucm93cyAtIDE7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignUm93IGluZGV4IG91dCBvZiByYW5nZScpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENoZWNrIHRoYXQgYSBjb2x1bW4gaW5kZXggaXMgbm90IG91dCBvZiBib3VuZHNcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtib29sZWFufSBbb3V0ZXJdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbHVtbkluZGV4KG1hdHJpeCwgaW5kZXgsIG91dGVyKSB7XG4gIGxldCBtYXggPSBvdXRlciA/IG1hdHJpeC5jb2x1bW5zIDogbWF0cml4LmNvbHVtbnMgLSAxO1xuICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0NvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IHRoZSBwcm92aWRlZCB2ZWN0b3IgaXMgYW4gYXJyYXkgd2l0aCB0aGUgcmlnaHQgbGVuZ3RoXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fE1hdHJpeH0gdmVjdG9yXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Jvd1ZlY3RvcihtYXRyaXgsIHZlY3Rvcikge1xuICBpZiAodmVjdG9yLnRvMURBcnJheSkge1xuICAgIHZlY3RvciA9IHZlY3Rvci50bzFEQXJyYXkoKTtcbiAgfVxuICBpZiAodmVjdG9yLmxlbmd0aCAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICd2ZWN0b3Igc2l6ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY29sdW1ucycsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdmVjdG9yO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IHRoZSBwcm92aWRlZCB2ZWN0b3IgaXMgYW4gYXJyYXkgd2l0aCB0aGUgcmlnaHQgbGVuZ3RoXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fE1hdHJpeH0gdmVjdG9yXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbHVtblZlY3RvcihtYXRyaXgsIHZlY3Rvcikge1xuICBpZiAodmVjdG9yLnRvMURBcnJheSkge1xuICAgIHZlY3RvciA9IHZlY3Rvci50bzFEQXJyYXkoKTtcbiAgfVxuICBpZiAodmVjdG9yLmxlbmd0aCAhPT0gbWF0cml4LnJvd3MpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHJvd3MnKTtcbiAgfVxuICByZXR1cm4gdmVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSb3dJbmRpY2VzKG1hdHJpeCwgcm93SW5kaWNlcykge1xuICBpZiAoIWlzQW55QXJyYXkocm93SW5kaWNlcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyb3cgaW5kaWNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0luZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocm93SW5kaWNlc1tpXSA8IDAgfHwgcm93SW5kaWNlc1tpXSA+PSBtYXRyaXgucm93cykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JvdyBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ29sdW1uSW5kaWNlcyhtYXRyaXgsIGNvbHVtbkluZGljZXMpIHtcbiAgaWYgKCFpc0FueUFycmF5KGNvbHVtbkluZGljZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29sdW1uIGluZGljZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5JbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvbHVtbkluZGljZXNbaV0gPCAwIHx8IGNvbHVtbkluZGljZXNbaV0gPj0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdjb2x1bW4gaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JhbmdlKG1hdHJpeCwgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gNSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdleHBlY3RlZCA0IGFyZ3VtZW50cycpO1xuICB9XG4gIGNoZWNrTnVtYmVyKCdzdGFydFJvdycsIHN0YXJ0Um93KTtcbiAgY2hlY2tOdW1iZXIoJ2VuZFJvdycsIGVuZFJvdyk7XG4gIGNoZWNrTnVtYmVyKCdzdGFydENvbHVtbicsIHN0YXJ0Q29sdW1uKTtcbiAgY2hlY2tOdW1iZXIoJ2VuZENvbHVtbicsIGVuZENvbHVtbik7XG4gIGlmIChcbiAgICBzdGFydFJvdyA+IGVuZFJvdyB8fFxuICAgIHN0YXJ0Q29sdW1uID4gZW5kQ29sdW1uIHx8XG4gICAgc3RhcnRSb3cgPCAwIHx8XG4gICAgc3RhcnRSb3cgPj0gbWF0cml4LnJvd3MgfHxcbiAgICBlbmRSb3cgPCAwIHx8XG4gICAgZW5kUm93ID49IG1hdHJpeC5yb3dzIHx8XG4gICAgc3RhcnRDb2x1bW4gPCAwIHx8XG4gICAgc3RhcnRDb2x1bW4gPj0gbWF0cml4LmNvbHVtbnMgfHxcbiAgICBlbmRDb2x1bW4gPCAwIHx8XG4gICAgZW5kQ29sdW1uID49IG1hdHJpeC5jb2x1bW5zXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdTdWJtYXRyaXggaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0FycmF5KGxlbmd0aCwgdmFsdWUgPSAwKSB7XG4gIGxldCBhcnJheSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBjaGVja051bWJlcihuYW1lLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIG51bWJlcmApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja05vbkVtcHR5KG1hdHJpeCkge1xuICBpZiAobWF0cml4LmlzRW1wdHkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRW1wdHkgbWF0cml4IGhhcyBubyBlbGVtZW50cyB0byBpbmRleCcpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdE1hdHJpeCB9IGZyb20gJy4uL21hdHJpeCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdyYXBwZXJNYXRyaXgyRCBleHRlbmRzIEFic3RyYWN0TWF0cml4IHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLmNvbHVtbnMgPSBkYXRhWzBdLmxlbmd0aDtcbiAgfVxuXG4gIHNldChyb3dJbmRleCwgY29sdW1uSW5kZXgsIHZhbHVlKSB7XG4gICAgdGhpcy5kYXRhW3Jvd0luZGV4XVtjb2x1bW5JbmRleF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3Jvd0luZGV4XVtjb2x1bW5JbmRleF07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ0b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsImlzQW55QXJyYXkiLCJvYmplY3QiLCJjYWxsIiwiZW5kc1dpdGgiLCJtYXgiLCJpbnB1dCIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJUeXBlRXJyb3IiLCJfb3B0aW9ucyRmcm9tSW5kZXgiLCJmcm9tSW5kZXgiLCJfb3B0aW9ucyR0b0luZGV4IiwidG9JbmRleCIsIk51bWJlciIsImlzSW50ZWdlciIsIkVycm9yIiwibWF4VmFsdWUiLCJpIiwidmFsdWUiLCJ0YWciLCJpbmNsdWRlcyIsIm1pbiIsIm1pblZhbHVlIiwicmVzY2FsZSIsIm91dHB1dCIsIkFycmF5IiwiY3VycmVudE1pbiIsImN1cnJlbnRNYXgiLCJSYW5nZUVycm9yIiwiX29wdGlvbnMkbWluIiwiYXV0b01pbk1heCIsIl9vcHRpb25zJG1heCIsImZhY3RvciIsImVycm9yQ2FsY3VsYXRpb24iLCJkYXRhIiwicGFyYW1ldGVycyIsInBhcmFtZXRlcml6ZWRGdW5jdGlvbiIsImVycm9yIiwiZnVuYyIsIngiLCJNYXRoIiwiYWJzIiwieSIsInN0ZXAiLCJwYXJhbXMiLCJkYW1waW5nIiwiZ3JhZGllbnREaWZmZXJlbmNlIiwiaWRlbnRpdHkiLCJldmFsdWF0ZWREYXRhIiwiRmxvYXQ2NEFycmF5IiwiZ3JhZGllbnRGdW5jIiwicGFyYW1GdW5jdGlvbiIsIm4iLCJtIiwiYW5zIiwicGFyYW0iLCJhdXhQYXJhbXMiLCJzbGljZSIsImZ1bmNQYXJhbSIsInBvaW50IiwiZ3JhZGllbnRGdW5jdGlvbiIsIm1hdHJpeEZ1bmMiLCJtYXRyaXhGdW5jdGlvbiIsImludmVyc2VNYXRyaXgiLCJhZGQiLCJtbXVsIiwidHJhbnNwb3NlIiwic3ViIiwibXVsIiwidG8xREFycmF5IiwiTHVEZWNvbXBvc2l0aW9uIiwiY29uc3RydWN0b3IiLCJtYXRyaXgiLCJqIiwiayIsInAiLCJzIiwidCIsInYiLCJMVWNvbGoiLCJrbWF4IiwibHUiLCJjbG9uZSIsInJvd3MiLCJjb2x1bW5zIiwicGl2b3RWZWN0b3IiLCJwaXZvdFNpZ24iLCJnZXQiLCJzZXQiLCJ0aGlzIiwiTFUiLCJpc1Npbmd1bGFyIiwiY29sIiwic29sdmUiLCJjb3VudCIsIlgiLCJzdWJNYXRyaXhSb3ciLCJkZXRlcm1pbmFudCIsImlzU3F1YXJlIiwibG93ZXJUcmlhbmd1bGFyTWF0cml4IiwidXBwZXJUcmlhbmd1bGFyTWF0cml4IiwicGl2b3RQZXJtdXRhdGlvblZlY3RvciIsImZyb20iLCJRckRlY29tcG9zaXRpb24iLCJxciIsInJkaWFnIiwibnJtIiwiUVIiLCJSZGlhZyIsImlzRnVsbFJhbmsiLCJzdWJNYXRyaXgiLCJvcnRob2dvbmFsTWF0cml4IiwiU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24iLCJpc0VtcHR5IiwiY29tcHV0ZUxlZnRTaW5ndWxhclZlY3RvcnMiLCJjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMiLCJhdXRvVHJhbnNwb3NlIiwiYSIsIndhbnR1IiwiQm9vbGVhbiIsIndhbnR2Iiwic3dhcHBlZCIsImF1eCIsImNvbnNvbGUiLCJ3YXJuIiwibnUiLCJuaSIsIlUiLCJWIiwiZSIsIndvcmsiLCJzaSIsIm5jdCIsIm5ydCIsIm1yYyIsInBwIiwiaXRlciIsImVwcyIsIkVQU0lMT04iLCJrYXNlIiwiYWxwaGEiLCJNSU5fVkFMVUUiLCJpc05hTiIsImtzIiwiZiIsImNzIiwic24iLCJzY2FsZSIsInNwIiwic3BtMSIsImVwbTEiLCJzayIsImVrIiwiYiIsImMiLCJzaGlmdCIsInNxcnQiLCJnIiwidG1wIiwiWSIsInRocmVzaG9sZCIsInNjb2xzIiwiTHMiLCJyaWdodFNpbmd1bGFyVmVjdG9ycyIsIlZMIiwidnJvd3MiLCJ1cm93cyIsIlZMVSIsInN1bSIsInNvbHZlRm9yRGlhZ29uYWwiLCJpbnZlcnNlIiwidmNvbHMiLCJ1Y29scyIsImNvbmRpdGlvbiIsIm5vcm0yIiwicmFuayIsInRvbCIsInIiLCJpaSIsImRpYWdvbmFsIiwibGVmdFNpbmd1bGFyVmVjdG9ycyIsImRpYWdvbmFsTWF0cml4IiwiaHlwb3RlbnVzZSIsInVzZVNWRCIsImxlZnRIYW5kU2lkZSIsInJpZ2h0SGFuZFNpZGUiLCJpbmRlbnQiLCJyZXBlYXQiLCJpbmRlbnREYXRhIiwiaW5zcGVjdE1hdHJpeCIsImluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyIsIm1heFJvd3MiLCJtYXhDb2x1bW5zIiwibWF4TnVtU2l6ZSIsInBhZE1pbnVzIiwibmFtZSIsIm1heEkiLCJtYXhKIiwicmVzdWx0IiwibG9vcCIsImxpbmUiLCJwdXNoIiwiZm9ybWF0TnVtYmVyIiwiam9pbiIsImluc3BlY3REYXRhIiwibnVtIiwiZm9ybWF0TnVtYmVyMiIsInBhZEVuZCIsImxlbiIsInN0ciIsImZpeCIsInRvRml4ZWQiLCJzdGFydHNXaXRoIiwiZXhwIiwidG9FeHBvbmVudGlhbCIsImluc3RhbGxNYXRoT3BlcmF0aW9ucyIsIkFic3RyYWN0TWF0cml4IiwiTWF0cml4IiwiYWRkUyIsImFkZE0iLCJjaGVja01hdHJpeCIsInN1YlMiLCJzdWJNIiwic3VidHJhY3QiLCJzdWJ0cmFjdFMiLCJzdWJ0cmFjdE0iLCJtdWxTIiwibXVsTSIsIm11bHRpcGx5IiwibXVsdGlwbHlTIiwibXVsdGlwbHlNIiwiZGl2IiwiZGl2UyIsImRpdk0iLCJkaXZpZGUiLCJkaXZpZGVTIiwiZGl2aWRlTSIsIm1vZCIsIm1vZFMiLCJtb2RNIiwibW9kdWx1cyIsIm1vZHVsdXNTIiwibW9kdWx1c00iLCJhbmQiLCJhbmRTIiwiYW5kTSIsIm9yIiwib3JTIiwib3JNIiwieG9yIiwieG9yUyIsInhvck0iLCJsZWZ0U2hpZnQiLCJsZWZ0U2hpZnRTIiwibGVmdFNoaWZ0TSIsInNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQiLCJzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0UyIsInNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNIiwicmlnaHRTaGlmdCIsInJpZ2h0U2hpZnRTIiwicmlnaHRTaGlmdE0iLCJ6ZXJvRmlsbFJpZ2h0U2hpZnQiLCJ6ZXJvRmlsbFJpZ2h0U2hpZnRTIiwiemVyb0ZpbGxSaWdodFNoaWZ0TSIsIm5vdCIsImFjb3MiLCJhY29zaCIsImFzaW4iLCJhc2luaCIsImF0YW4iLCJhdGFuaCIsImNicnQiLCJjZWlsIiwiY2x6MzIiLCJjb3MiLCJjb3NoIiwiZXhwbTEiLCJmbG9vciIsImZyb3VuZCIsImxvZyIsImxvZzFwIiwibG9nMTAiLCJsb2cyIiwicm91bmQiLCJzaWduIiwic2luIiwic2luaCIsInRhbiIsInRhbmgiLCJ0cnVuYyIsInBvdyIsImFyZzAiLCJwb3dTIiwicG93TSIsInN0YXRpYyIsIm5ld1Jvd3MiLCJuZXdDb2x1bW5zIiwibmV3RGF0YSIsIm5ld01hdHJpeCIsInJvdyIsImNvbHVtbiIsInZlY3RvciIsImZpbGwiLCJyYW5kb20iLCJpbnRlcnZhbCIsInplcm9zIiwibCIsIm1hdHJpeDEiLCJtYXRyaXgyIiwiaXNNYXRyaXgiLCJrbGFzcyIsInNpemUiLCJhcHBseSIsImNhbGxiYWNrIiwiYXJyYXkiLCJ0bzJEQXJyYXkiLCJjb3B5IiwidG9KU09OIiwiaXNSb3dWZWN0b3IiLCJpc0NvbHVtblZlY3RvciIsImlzVmVjdG9yIiwiaXNTeW1tZXRyaWMiLCJpc0VjaGVsb25Gb3JtIiwicHJldmlvdXNDb2x1bW4iLCJjaGVja2VkIiwiaXNSZWR1Y2VkRWNoZWxvbkZvcm0iLCJlY2hlbG9uRm9ybSIsImgiLCJpTWF4Iiwic3dhcFJvd3MiLCJyZWR1Y2VkRWNoZWxvbkZvcm0iLCJtYXhSb3ciLCJwaXZvdCIsInNldFN1Yk1hdHJpeCIsIm5lZyIsImdldFJvdyIsImluZGV4IiwiZ2V0Um93VmVjdG9yIiwicm93VmVjdG9yIiwic2V0Um93Iiwicm93MSIsInJvdzIiLCJ0ZW1wIiwiZ2V0Q29sdW1uIiwiZ2V0Q29sdW1uVmVjdG9yIiwiY29sdW1uVmVjdG9yIiwic2V0Q29sdW1uIiwic3dhcENvbHVtbnMiLCJjb2x1bW4xIiwiY29sdW1uMiIsImFkZFJvd1ZlY3RvciIsInN1YlJvd1ZlY3RvciIsIm11bFJvd1ZlY3RvciIsImRpdlJvd1ZlY3RvciIsImFkZENvbHVtblZlY3RvciIsInN1YkNvbHVtblZlY3RvciIsIm11bENvbHVtblZlY3RvciIsImRpdkNvbHVtblZlY3RvciIsIm11bFJvdyIsIm11bENvbHVtbiIsImJ5IiwiTmFOIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJtYXhJbmRleCIsImlkeCIsIlBPU0lUSVZFX0lORklOSVRZIiwibWluSW5kZXgiLCJtYXhSb3dJbmRleCIsIm1pblJvdyIsIm1pblJvd0luZGV4IiwibWF4Q29sdW1uIiwibWF4Q29sdW1uSW5kZXgiLCJtaW5Db2x1bW4iLCJtaW5Db2x1bW5JbmRleCIsImRpYWciLCJub3JtIiwidHlwZSIsImN1bXVsYXRpdmVTdW0iLCJkb3QiLCJ2ZWN0b3IyIiwidmVjdG9yMSIsIm90aGVyIiwiQmNvbGoiLCJzdHJhc3NlbjJ4MiIsImExMSIsImIxMSIsImExMiIsImIxMiIsImEyMSIsImIyMSIsImEyMiIsImIyMiIsIm0xIiwibTIiLCJtMyIsIm00IiwibTUiLCJjMDAiLCJjMDEiLCJjMTAiLCJjMTEiLCJzdHJhc3NlbjN4MyIsImEwMCIsImEwMSIsImEwMiIsImExMCIsImEyMCIsImIwMCIsImIwMSIsImIwMiIsImIxMCIsImIyMCIsIm02IiwibTciLCJtOCIsIm05IiwibTEyIiwibTEzIiwibTE0IiwibTE1IiwibTE2IiwibTE3IiwibTE4IiwiYzAyIiwiYzEyIiwiYzIwIiwiYzIxIiwiYzIyIiwibW11bFN0cmFzc2VuIiwicjEiLCJjMSIsInIyIiwiYzIiLCJlbWJlZCIsIm1hdCIsImNvbHMiLCJyZXN1bHRhdCIsImJsb2NrTXVsdCIsImhhbGZSb3dzIiwicGFyc2VJbnQiLCJoYWxmQ29scyIsInNjYWxlUm93cyIsImlzRmluaXRlIiwic2NhbGVDb2x1bW5zIiwiZmxpcFJvd3MiLCJtaWRkbGUiLCJmaXJzdCIsImxhc3QiLCJmbGlwQ29sdW1ucyIsImtyb25lY2tlclByb2R1Y3QiLCJxIiwia3JvbmVja2VyU3VtIiwiQXhJIiwiZXllIiwiSXhCIiwic29ydFJvd3MiLCJjb21wYXJlRnVuY3Rpb24iLCJjb21wYXJlTnVtYmVycyIsInNvcnQiLCJzb3J0Q29sdW1ucyIsInN0YXJ0Um93IiwiZW5kUm93Iiwic3RhcnRDb2x1bW4iLCJlbmRDb2x1bW4iLCJpbmRpY2VzIiwic3ViTWF0cml4Q29sdW1uIiwic2VsZWN0aW9uIiwicm93SW5kaWNlcyIsImNvbHVtbkluZGljZXMiLCJyb3dJbmRleCIsImNvbHVtbkluZGV4IiwidHJhY2UiLCJwcm9kdWN0IiwibWVhbiIsInZhcmlhbmNlIiwidW5iaWFzZWQiLCJzdGFuZGFyZERldmlhdGlvbiIsImNlbnRlciIsIlN5bWJvbCIsImZvciIsInJhbmQiLCJyYW5kb21JbnQiLCJyYW5kSW50IiwibmVnYXRlIiwidGVuc29yUHJvZHVjdCIsIm5Sb3dzIiwibkNvbHVtbnMiLCJzdXBlciIsImFycmF5RGF0YSIsImV2ZXJ5IiwiZWxlbWVudCIsInJlbW92ZVJvdyIsInNwbGljZSIsImFkZFJvdyIsInJlbW92ZUNvbHVtbiIsIm5ld1JvdyIsImFkZENvbHVtbiIsInN1bUJ5Um93Iiwic3VtQnlDb2x1bW4iLCJzdW1BbGwiLCJwcm9kdWN0QnlSb3ciLCJwcm9kdWN0QnlDb2x1bW4iLCJwcm9kdWN0QWxsIiwidmFyaWFuY2VCeVJvdyIsInN1bTEiLCJzdW0yIiwidmFyaWFuY2VCeUNvbHVtbiIsInZhcmlhbmNlQWxsIiwiY2VudGVyQnlSb3ciLCJjZW50ZXJCeUNvbHVtbiIsImNlbnRlckFsbCIsImdldFNjYWxlQnlSb3ciLCJzY2FsZUJ5Um93IiwiZ2V0U2NhbGVCeUNvbHVtbiIsInNjYWxlQnlDb2x1bW4iLCJnZXRTY2FsZUFsbCIsImRpdmlkZXIiLCJzY2FsZUFsbCIsImNoZWNrUm93SW5kZXgiLCJvdXRlciIsImNoZWNrQ29sdW1uSW5kZXgiLCJjaGVja1Jvd1ZlY3RvciIsImNoZWNrQ29sdW1uVmVjdG9yIiwiY2hlY2tSb3dJbmRpY2VzIiwiY2hlY2tDb2x1bW5JbmRpY2VzIiwiY2hlY2tSYW5nZSIsImNoZWNrTnVtYmVyIiwibmV3QXJyYXkiLCJjaGVja05vbkVtcHR5IiwiV3JhcHBlck1hdHJpeDJEIl0sInNvdXJjZVJvb3QiOiIifQ==
|