@datagrok/eda 1.1.2 → 1.1.3

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/221.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[221],{251:(t,e,r)=>{r.r(e),r.d(e,{default:()=>P});const o=Object.prototype.toString;function n(t){return o.call(t).endsWith("Array]")}function i(t,e,r){let o=0;const n=r(e);for(let e=0;e<t.x.length;e++)o+=Math.abs(t.y[e]-n(t.x[e]));return o}const s=Object.prototype.toString;function h(t){const e=s.call(t);return e.endsWith("Array]")&&!e.includes("Big")}const a=Object.prototype.toString;function u(t){const e=a.call(t);return e.endsWith("Array]")&&!e.includes("Big")}const l=Object.prototype.toString;const f=Object.prototype.toString;function c(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!u(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(!u(r.output))throw new TypeError("output option must be an array if specified");e=r.output}else e=new Array(t.length);var o=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(t){const e=f.call(t);return e.endsWith("Array]")&&!e.includes("Big")}(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,o=void 0===r?0:r,n=e.toIndex,i=void 0===n?t.length:n;if(o<0||o>=t.length||!Number.isInteger(o))throw new Error("fromIndex must be a positive integer smaller than length");if(i<=o||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 s=t[o],h=o+1;h<i;h++)t[h]<s&&(s=t[h]);return s}(t),n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(t){const e=l.call(t);return e.endsWith("Array]")&&!e.includes("Big")}(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,o=void 0===r?0:r,n=e.toIndex,i=void 0===n?t.length:n;if(o<0||o>=t.length||!Number.isInteger(o))throw new Error("fromIndex must be a positive integer smaller than length");if(i<=o||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 s=t[o],h=o+1;h<i;h++)t[h]>s&&(s=t[h]);return s}(t);if(o===n)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var i=r.min,s=void 0===i?r.autoMinMax?o:0:i,h=r.max,a=void 0===h?r.autoMinMax?n:1:h;if(s>=a)throw new RangeError("min option must be smaller than max option");for(var c=(a-s)/(n-o),m=0;m<t.length;m++)e[m]=(t[m]-o)*c+s;return e}const m=" ".repeat(2),p=" ".repeat(4);function g(t,e={}){const{maxRows:r=15,maxColumns:o=10,maxNumSize:n=8,padMinus:i="auto"}=e;return`${t.constructor.name} {\n${m}[\n${p}${function(t,e,r,o,n){const{rows:i,columns:s}=t,h=Math.min(i,e),a=Math.min(s,r),u=[];if("auto"===n){n=!1;t:for(let e=0;e<h;e++)for(let r=0;r<a;r++)if(t.get(e,r)<0){n=!0;break t}}for(let e=0;e<h;e++){let r=[];for(let i=0;i<a;i++)r.push(w(t.get(e,i),o,n));u.push(`${r.join(" ")}`)}return a!==s&&(u[u.length-1]+=` ... ${s-r} more columns`),h!==i&&u.push(`... ${i-e} more rows`),u.join(`\n${p}`)}(t,r,o,n,i)}\n${m}]\n${m}rows: ${t.rows}\n${m}columns: ${t.columns}\n}`}function w(t,e,r){return(t>=0&&r?` ${d(t,e-1)}`:d(t,e)).padEnd(e)}function d(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 n=t.toExponential(e);return n.length>e&&(n=t.toExponential(Math.max(0,e-(n.length-e)))),n.slice(0)}function y(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 v(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 b(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 M(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 x(t,e,r,o,n){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(E("startRow",e),E("endRow",r),E("startColumn",o),E("endColumn",n),e>r||o>n||e<0||e>=t.rows||r<0||r>=t.rows||o<0||o>=t.columns||n<0||n>=t.columns)throw new RangeError("Submatrix indices are out of range")}function S(t,e=0){let r=[];for(let o=0;o<t;o++)r.push(e);return r}function E(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function R(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}class N{static from1DArray(t,e,r){if(t*e!==r.length)throw new RangeError("data length does not match given dimensions");let o=new z(t,e);for(let n=0;n<t;n++)for(let t=0;t<e;t++)o.set(n,t,r[n*e+t]);return o}static rowVector(t){let e=new z(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 z(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 z(t,e)}static ones(t,e){return new z(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 n=new z(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++)n.set(r,t,o());return n}static randInt(t,e,r={}){if("object"!=typeof r)throw new TypeError("options must be an object");const{min:o=0,max:n=1e3,random:i=Math.random}=r;if(!Number.isInteger(o))throw new TypeError("min must be an integer");if(!Number.isInteger(n))throw new TypeError("max must be an integer");if(o>=n)throw new RangeError("min must be smaller than max");let s=n-o,h=new z(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++){let e=o+Math.round(i()*s);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),n=this.zeros(t,e);for(let t=0;t<o;t++)n.set(t,t,r);return n}static diag(t,e,r){let o=t.length;void 0===e&&(e=o),void 0===r&&(r=e);let n=Math.min(o,e,r),i=this.zeros(e,r);for(let e=0;e<n;e++)i.set(e,e,t[e]);return i}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let r=t.rows,o=t.columns,n=new z(r,o);for(let i=0;i<r;i++)for(let r=0;r<o;r++)n.set(i,r,Math.min(t.get(i,r),e.get(i,r)));return n}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let r=t.rows,o=t.columns,n=new this(r,o);for(let i=0;i<r;i++)for(let r=0;r<o;r++)n.set(i,r,Math.max(t.get(i,r),e.get(i,r)));return n}static checkMatrix(t){return N.isMatrix(t)?t:new z(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,n=!1;for(;t<this.rows&&o;){for(e=0,n=!1;e<this.columns&&!1===n;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>r?(n=!0,r=e):(o=!1,n=!0);t++}return o}isReducedEchelonForm(){let t=0,e=0,r=-1,o=!0,n=!1;for(;t<this.rows&&o;){for(e=0,n=!1;e<this.columns&&!1===n;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>r?(n=!0,r=e):(o=!1,n=!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 n=e;n<t.rows;n++)t.get(n,r)>t.get(o,r)&&(o=n);if(0===t.get(o,r))r++;else{t.swapRows(e,o);let n=t.get(e,r);for(let o=r;o<t.columns;o++)t.set(e,o,t.get(e,o)/n);for(let o=e+1;o<t.rows;o++){let n=t.get(o,r)/t.get(e,r);t.set(o,r,0);for(let i=r+1;i<t.columns;i++)t.set(o,i,t.get(o,i)-t.get(e,i)*n)}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 n=0,i=!1;for(;n<r&&!1===i;)1===t.get(o,n)?i=!0:n++;for(let r=0;r<o;r++){let i=t.get(r,n);for(let s=n;s<e;s++){let e=t.get(r,s)-i*t.get(o,s);t.set(r,s,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 z(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){y(this,t);let e=[];for(let r=0;r<this.columns;r++)e.push(this.get(t,r));return e}getRowVector(t){return z.rowVector(this.getRow(t))}setRow(t,e){y(this,t),e=b(this,e);for(let r=0;r<this.columns;r++)this.set(t,r,e[r]);return this}swapRows(t,e){y(this,t),y(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){v(this,t);let e=[];for(let r=0;r<this.rows;r++)e.push(this.get(r,t));return e}getColumnVector(t){return z.columnVector(this.getColumn(t))}setColumn(t,e){v(this,t),e=M(this,e);for(let r=0;r<this.rows;r++)this.set(r,t,e[r]);return this}swapColumns(t,e){v(this,t),v(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=b(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=b(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=b(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=b(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=M(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=M(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=M(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=M(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){y(this,t);for(let r=0;r<this.columns;r++)this.set(t,r,this.get(t,r)*e);return this}mulColumn(t,e){v(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(){R(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(){R(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(y(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){y(this,t),R(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(y(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){y(this,t),R(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(v(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){v(this,t),R(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(v(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){v(this,t),R(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){N.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=z.checkMatrix(t);let e=this.rows,r=this.columns,o=t.columns,n=new z(e,o),i=new Float64Array(r);for(let s=0;s<o;s++){for(let e=0;e<r;e++)i[e]=t.get(e,s);for(let t=0;t<e;t++){let e=0;for(let o=0;o<r;o++)e+=this.get(t,o)*i[o];n.set(t,s,e)}}return n}strassen2x2(t){t=z.checkMatrix(t);let e=new z(2,2);const r=this.get(0,0),o=t.get(0,0),n=this.get(0,1),i=t.get(0,1),s=this.get(1,0),h=t.get(1,0),a=this.get(1,1),u=t.get(1,1),l=(r+a)*(o+u),f=(s+a)*o,c=r*(i-u),m=a*(h-o),p=(r+n)*u,g=l+m-p+(n-a)*(h+u),w=c+p,d=f+m,y=l-f+c+(s-r)*(o+i);return e.set(0,0,g),e.set(0,1,w),e.set(1,0,d),e.set(1,1,y),e}strassen3x3(t){t=z.checkMatrix(t);let e=new z(3,3);const r=this.get(0,0),o=this.get(0,1),n=this.get(0,2),i=this.get(1,0),s=this.get(1,1),h=this.get(1,2),a=this.get(2,0),u=this.get(2,1),l=this.get(2,2),f=t.get(0,0),c=t.get(0,1),m=t.get(0,2),p=t.get(1,0),g=t.get(1,1),w=t.get(1,2),d=t.get(2,0),y=t.get(2,1),v=t.get(2,2),b=(r-i)*(-c+g),M=(-r+i+s)*(f-c+g),x=(i+s)*(-f+c),S=r*f,E=(-r+a+u)*(f-m+w),R=(-r+a)*(m-w),N=(a+u)*(-f+m),k=(-n+u+l)*(g+d-y),I=(n-l)*(g-y),F=n*d,T=(u+l)*(-d+y),A=(-n+s+h)*(w+d-v),C=(n-h)*(w-v),_=(s+h)*(-d+v),P=S+F+o*p,V=(r+o+n-i-s-u-l)*g+M+x+S+k+F+T,O=S+E+N+(r+o+n-s-h-a-u)*w+F+A+_,j=b+s*(-f+c+p-g-w-d+v)+M+S+F+A+C,q=b+M+x+S+h*y,D=F+A+C+_+i*m,L=S+E+R+u*(-f+m+p-g-w-d+y)+k+I+F,$=k+I+F+T+a*c,U=S+E+R+N+l*v;return e.set(0,0,P),e.set(0,1,V),e.set(0,2,O),e.set(1,0,j),e.set(1,1,q),e.set(1,2,D),e.set(2,0,L),e.set(2,1,$),e.set(2,2,U),e}mmulStrassen(t){t=z.checkMatrix(t);let e=this.clone(),r=e.rows,o=e.columns,n=t.rows,i=t.columns;function s(t,e,r){let o=t.rows,n=t.columns;if(o===e&&n===r)return t;{let o=N.zeros(e,r);return o=o.setSubMatrix(t,0,0),o}}o!==n&&console.warn(`Multiplying ${r} x ${o} and ${n} x ${i} matrix: dimensions do not match.`);let h=Math.max(r,n),a=Math.max(o,i);return e=s(e,h,a),function t(e,r,o,n){if(o<=512||n<=512)return e.mmul(r);o%2==1&&n%2==1?(e=s(e,o+1,n+1),r=s(r,o+1,n+1)):o%2==1?(e=s(e,o+1,n),r=s(r,o+1,n)):n%2==1&&(e=s(e,o,n+1),r=s(r,o,n+1));let i=parseInt(e.rows/2,10),h=parseInt(e.columns/2,10),a=e.subMatrix(0,i-1,0,h-1),u=r.subMatrix(0,i-1,0,h-1),l=e.subMatrix(0,i-1,h,e.columns-1),f=r.subMatrix(0,i-1,h,r.columns-1),c=e.subMatrix(i,e.rows-1,0,h-1),m=r.subMatrix(i,r.rows-1,0,h-1),p=e.subMatrix(i,e.rows-1,h,e.columns-1),g=r.subMatrix(i,r.rows-1,h,r.columns-1),w=t(N.add(a,p),N.add(u,g),i,h),d=t(N.add(c,p),u,i,h),y=t(a,N.sub(f,g),i,h),v=t(p,N.sub(m,u),i,h),b=t(N.add(a,l),g,i,h),M=t(N.sub(c,a),N.add(u,f),i,h),x=t(N.sub(l,p),N.add(m,g),i,h),S=N.add(w,v);S.sub(b),S.add(x);let E=N.add(y,b),R=N.add(d,v),k=N.sub(w,d);k.add(y),k.add(M);let z=N.zeros(2*S.rows,2*S.columns);return z=z.setSubMatrix(S,0,0),z=z.setSubMatrix(E,S.rows,0),z=z.setSubMatrix(R,0,S.columns),z=z.setSubMatrix(k,S.rows,S.columns),z.subMatrix(0,o-1,0,n-1)}(e,t=s(t,h,a),h,a)}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 z(this.rows,this.columns);for(let t=0;t<this.rows;t++){const n=this.getRow(t);n.length>0&&c(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 z(this.rows,this.columns);for(let t=0;t<this.columns;t++){const n=this.getColumn(t);n.length&&c(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=z.checkMatrix(t);let e=this.rows,r=this.columns,o=t.rows,n=t.columns,i=new z(e*o,r*n);for(let s=0;s<e;s++)for(let e=0;e<r;e++)for(let r=0;r<o;r++)for(let h=0;h<n;h++)i.set(o*s+r,n*e+h,this.get(s,e)*t.get(r,h));return i}kroneckerSum(t){if(t=z.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(z.eye(r,r)),n=z.eye(e,e).kroneckerProduct(t);return o.add(n)}transpose(){let t=new z(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=k){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=k){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,r,o){x(this,t,e,r,o);let n=new z(e-t+1,o-r+1);for(let i=t;i<=e;i++)for(let e=r;e<=o;e++)n.set(i-t,e-r,this.get(i,e));return n}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 z(t.length,r-e+1);for(let n=0;n<t.length;n++)for(let i=e;i<=r;i++){if(t[n]<0||t[n]>=this.rows)throw new RangeError(`Row index out of range: ${t[n]}`);o.set(n,i-e,this.get(t[n],i))}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 z(r-e+1,t.length);for(let n=0;n<t.length;n++)for(let i=e;i<=r;i++){if(t[n]<0||t[n]>=this.columns)throw new RangeError(`Column index out of range: ${t[n]}`);o.set(i-e,n,this.get(i,t[n]))}return o}setSubMatrix(t,e,r){if((t=z.checkMatrix(t)).isEmpty())return this;x(this,e,e+t.rows-1,r,r+t.columns-1);for(let o=0;o<t.rows;o++)for(let n=0;n<t.columns;n++)this.set(e+o,r+n,t.get(o,n));return this}selection(t,e){!function(t,e){if(!h(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")}(this,t),function(t,e){if(!h(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")}(this,e);let r=new z(t.length,e.length);for(let o=0;o<t.length;o++){let n=t[o];for(let t=0;t<e.length;t++){let i=e[t];r.set(o,t,this.get(n,i))}}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 z(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 function(t){let e=S(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}(this);case"column":return function(t){let e=S(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}(this);case void 0:return function(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}(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return function(t){let e=S(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}(this);case"column":return function(t){let e=S(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}(this);case void 0:return function(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}(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:o=this.mean(t)}=e;if("boolean"!=typeof r)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!h(o))throw new TypeError("mean must be an array");return function(t,e,r){const o=t.rows,n=t.columns,i=[];for(let s=0;s<o;s++){let o=0,h=0,a=0;for(let e=0;e<n;e++)a=t.get(s,e)-r[s],o+=a,h+=a*a;e?i.push((h-o*o/n)/(n-1)):i.push((h-o*o/n)/n)}return i}(this,r,o);case"column":if(!h(o))throw new TypeError("mean must be an array");return function(t,e,r){const o=t.rows,n=t.columns,i=[];for(let s=0;s<n;s++){let n=0,h=0,a=0;for(let e=0;e<o;e++)a=t.get(e,s)-r[s],n+=a,h+=a*a;e?i.push((h-n*n/o)/(o-1)):i.push((h-n*n/o)/o)}return i}(this,r,o);case void 0:if("number"!=typeof o)throw new TypeError("mean must be a number");return function(t,e,r){const o=t.rows,n=t.columns,i=o*n;let s=0,h=0,a=0;for(let e=0;e<o;e++)for(let o=0;o<n;o++)a=t.get(e,o)-r,s+=a,h+=a*a;return e?(h-s*s/i)/(i-1):(h-s*s/i)/i}(this,r,o);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(!h(r))throw new TypeError("center must be an array");return function(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])}(this,r),this;case"column":if(!h(r))throw new TypeError("center must be an array");return function(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])}(this,r),this;case void 0:if("number"!=typeof r)throw new TypeError("center must be a number");return function(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)}(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=function(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}(this);else if(!h(r))throw new TypeError("scale must be an array");return function(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])}(this,r),this;case"column":if(void 0===r)r=function(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}(this);else if(!h(r))throw new TypeError("scale must be an array");return function(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])}(this,r),this;case void 0:if(void 0===r)r=function(t){const e=t.size-1;let r=0;for(let o=0;o<t.columns;o++)for(let n=0;n<t.rows;n++)r+=Math.pow(t.get(n,o),2)/e;return Math.sqrt(r)}(this);else if("number"!=typeof r)throw new TypeError("scale must be a number");return function(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)}(this,r),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return g(this,t)}}function k(t,e){return t-e}N.prototype.klass="Matrix","undefined"!=typeof Symbol&&(N.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return g(this)}),N.random=N.rand,N.randomInt=N.randInt,N.diagonal=N.diag,N.prototype.diagonal=N.prototype.diag,N.identity=N.eye,N.prototype.negate=N.prototype.neg,N.prototype.tensorProduct=N.prototype.kroneckerProduct;class z extends N{constructor(t,e){if(super(),z.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(!h(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 y(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),y(this,t,!0),e=Float64Array.from(b(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){v(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),v(this,t,!0),e=M(this,e);for(let r=0;r<this.rows;r++){const o=new Float64Array(this.columns+1);let n=0;for(;n<t;n++)o[n]=this.data[r][n];for(o[n++]=e[r];n<this.columns+1;n++)o[n]=this.data[r][n-1];this.data[r]=o}return this.columns+=1,this}}!function(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}}(N,z);class I extends N{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]}}class F{constructor(t){let e,r,o,n,i,s,h,a,u,l=(t=I.checkMatrix(t)).clone(),f=l.rows,c=l.columns,m=new Float64Array(f),p=1;for(e=0;e<f;e++)m[e]=e;for(a=new Float64Array(f),r=0;r<c;r++){for(e=0;e<f;e++)a[e]=l.get(e,r);for(e=0;e<f;e++){for(u=Math.min(e,r),i=0,o=0;o<u;o++)i+=l.get(e,o)*a[o];a[e]-=i,l.set(e,r,a[e])}for(n=r,e=r+1;e<f;e++)Math.abs(a[e])>Math.abs(a[n])&&(n=e);if(n!==r){for(o=0;o<c;o++)s=l.get(n,o),l.set(n,o,l.get(r,o)),l.set(r,o,s);h=m[n],m[n]=m[r],m[r]=h,p=-p}if(r<f&&0!==l.get(r,r))for(e=r+1;e<f;e++)l.set(e,r,l.get(e,r)/l.get(r,r))}this.LU=l,this.pivotVector=m,this.pivotSign=p}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=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,o,n,i=t.columns,s=t.subMatrixRow(this.pivotVector,0,i-1),h=e.columns;for(n=0;n<h;n++)for(r=n+1;r<h;r++)for(o=0;o<i;o++)s.set(r,o,s.get(r,o)-s.get(n,o)*e.get(r,n));for(n=h-1;n>=0;n--){for(o=0;o<i;o++)s.set(n,o,s.get(n,o)/e.get(n,n));for(r=0;r<n;r++)for(o=0;o<i;o++)s.set(r,o,s.get(r,o)-s.get(n,o)*e.get(r,n))}return s}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,o=new z(e,r);for(let n=0;n<e;n++)for(let e=0;e<r;e++)n>e?o.set(n,e,t.get(n,e)):n===e?o.set(n,e,1):o.set(n,e,0);return o}get upperTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,o=new z(e,r);for(let n=0;n<e;n++)for(let e=0;e<r;e++)n<=e?o.set(n,e,t.get(n,e)):o.set(n,e,0);return o}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function T(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}class A{constructor(t){let e,r,o,n,i=(t=I.checkMatrix(t)).clone(),s=t.rows,h=t.columns,a=new Float64Array(h);for(o=0;o<h;o++){let t=0;for(e=o;e<s;e++)t=T(t,i.get(e,o));if(0!==t){for(i.get(o,o)<0&&(t=-t),e=o;e<s;e++)i.set(e,o,i.get(e,o)/t);for(i.set(o,o,i.get(o,o)+1),r=o+1;r<h;r++){for(n=0,e=o;e<s;e++)n+=i.get(e,o)*i.get(e,r);for(n=-n/i.get(o,o),e=o;e<s;e++)i.set(e,r,i.get(e,r)+n*i.get(e,o))}}a[o]=-t}this.QR=i,this.Rdiag=a}solve(t){t=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 o,n,i,s,h=t.columns,a=t.clone(),u=e.columns;for(i=0;i<u;i++)for(n=0;n<h;n++){for(s=0,o=i;o<r;o++)s+=e.get(o,i)*a.get(o,n);for(s=-s/e.get(i,i),o=i;o<r;o++)a.set(o,n,a.get(o,n)+s*e.get(o,i))}for(i=u-1;i>=0;i--){for(n=0;n<h;n++)a.set(i,n,a.get(i,n)/this.Rdiag[i]);for(o=0;o<i;o++)for(n=0;n<h;n++)a.set(o,n,a.get(o,n)-a.get(i,n)*e.get(o,i))}return a.subMatrix(0,u-1,0,h-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,o=r.columns,n=new z(o,o);for(t=0;t<o;t++)for(e=0;e<o;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,o,n=this.QR,i=n.rows,s=n.columns,h=new z(i,s);for(r=s-1;r>=0;r--){for(t=0;t<i;t++)h.set(t,r,0);for(h.set(r,r,1),e=r;e<s;e++)if(0!==n.get(r,r)){for(o=0,t=r;t<i;t++)o+=n.get(t,r)*h.get(t,e);for(o=-o/n.get(r,r),t=r;t<i;t++)h.set(t,e,h.get(t,e)+o*n.get(t,r))}}return h}}class C{constructor(t,e={}){if((t=I.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let r=t.rows,o=t.columns;const{computeLeftSingularVectors:n=!0,computeRightSingularVectors:i=!0,autoTranspose:s=!1}=e;let h,a=Boolean(n),u=Boolean(i),l=!1;if(r<o)if(s){h=t.transpose(),r=h.rows,o=h.columns,l=!0;let e=a;a=u,u=e}else h=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else h=t.clone();let f=Math.min(r,o),c=Math.min(r+1,o),m=new Float64Array(c),p=new z(r,f),g=new z(o,o),w=new Float64Array(o),d=new Float64Array(r),y=new Float64Array(c);for(let t=0;t<c;t++)y[t]=t;let v=Math.min(r-1,o),b=Math.max(0,Math.min(o-2,r)),M=Math.max(v,b);for(let t=0;t<M;t++){if(t<v){m[t]=0;for(let e=t;e<r;e++)m[t]=T(m[t],h.get(e,t));if(0!==m[t]){h.get(t,t)<0&&(m[t]=-m[t]);for(let e=t;e<r;e++)h.set(e,t,h.get(e,t)/m[t]);h.set(t,t,h.get(t,t)+1)}m[t]=-m[t]}for(let e=t+1;e<o;e++){if(t<v&&0!==m[t]){let o=0;for(let n=t;n<r;n++)o+=h.get(n,t)*h.get(n,e);o=-o/h.get(t,t);for(let n=t;n<r;n++)h.set(n,e,h.get(n,e)+o*h.get(n,t))}w[e]=h.get(t,e)}if(a&&t<v)for(let e=t;e<r;e++)p.set(e,t,h.get(e,t));if(t<b){w[t]=0;for(let e=t+1;e<o;e++)w[t]=T(w[t],w[e]);if(0!==w[t]){w[t+1]<0&&(w[t]=0-w[t]);for(let e=t+1;e<o;e++)w[e]/=w[t];w[t+1]+=1}if(w[t]=-w[t],t+1<r&&0!==w[t]){for(let e=t+1;e<r;e++)d[e]=0;for(let e=t+1;e<r;e++)for(let r=t+1;r<o;r++)d[e]+=w[r]*h.get(e,r);for(let e=t+1;e<o;e++){let o=-w[e]/w[t+1];for(let n=t+1;n<r;n++)h.set(n,e,h.get(n,e)+o*d[n])}}if(u)for(let e=t+1;e<o;e++)g.set(e,t,w[e])}}let x=Math.min(o,r+1);if(v<o&&(m[v]=h.get(v,v)),r<x&&(m[x-1]=0),b+1<x&&(w[b]=h.get(b,x-1)),w[x-1]=0,a){for(let t=v;t<f;t++){for(let e=0;e<r;e++)p.set(e,t,0);p.set(t,t,1)}for(let t=v-1;t>=0;t--)if(0!==m[t]){for(let e=t+1;e<f;e++){let o=0;for(let n=t;n<r;n++)o+=p.get(n,t)*p.get(n,e);o=-o/p.get(t,t);for(let n=t;n<r;n++)p.set(n,e,p.get(n,e)+o*p.get(n,t))}for(let e=t;e<r;e++)p.set(e,t,-p.get(e,t));p.set(t,t,1+p.get(t,t));for(let e=0;e<t-1;e++)p.set(e,t,0)}else{for(let e=0;e<r;e++)p.set(e,t,0);p.set(t,t,1)}}if(u)for(let t=o-1;t>=0;t--){if(t<b&&0!==w[t])for(let e=t+1;e<o;e++){let r=0;for(let n=t+1;n<o;n++)r+=g.get(n,t)*g.get(n,e);r=-r/g.get(t+1,t);for(let n=t+1;n<o;n++)g.set(n,e,g.get(n,e)+r*g.get(n,t))}for(let e=0;e<o;e++)g.set(e,t,0);g.set(t,t,1)}let S=x-1,E=0,R=Number.EPSILON;for(;x>0;){let t,e;for(t=x-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+R*Math.abs(m[t]+Math.abs(m[t+1]));if(Math.abs(w[t])<=e||Number.isNaN(w[t])){w[t]=0;break}}if(t===x-2)e=4;else{let r;for(r=x-1;r>=t&&r!==t;r--){let e=(r!==x?Math.abs(w[r]):0)+(r!==t+1?Math.abs(w[r-1]):0);if(Math.abs(m[r])<=R*e){m[r]=0;break}}r===t?e=3:r===x-1?e=1:(e=2,t=r)}switch(t++,e){case 1:{let e=w[x-2];w[x-2]=0;for(let r=x-2;r>=t;r--){let n=T(m[r],e),i=m[r]/n,s=e/n;if(m[r]=n,r!==t&&(e=-s*w[r-1],w[r-1]=i*w[r-1]),u)for(let t=0;t<o;t++)n=i*g.get(t,r)+s*g.get(t,x-1),g.set(t,x-1,-s*g.get(t,r)+i*g.get(t,x-1)),g.set(t,r,n)}break}case 2:{let e=w[t-1];w[t-1]=0;for(let o=t;o<x;o++){let n=T(m[o],e),i=m[o]/n,s=e/n;if(m[o]=n,e=-s*w[o],w[o]=i*w[o],a)for(let e=0;e<r;e++)n=i*p.get(e,o)+s*p.get(e,t-1),p.set(e,t-1,-s*p.get(e,o)+i*p.get(e,t-1)),p.set(e,o,n)}break}case 3:{const e=Math.max(Math.abs(m[x-1]),Math.abs(m[x-2]),Math.abs(w[x-2]),Math.abs(m[t]),Math.abs(w[t])),n=m[x-1]/e,i=m[x-2]/e,s=w[x-2]/e,h=m[t]/e,l=w[t]/e,f=((i+n)*(i-n)+s*s)/2,c=n*s*(n*s);let d=0;0===f&&0===c||(d=f<0?0-Math.sqrt(f*f+c):Math.sqrt(f*f+c),d=c/(f+d));let y=(h+n)*(h-n)+d,v=h*l;for(let e=t;e<x-1;e++){let n=T(y,v);0===n&&(n=Number.MIN_VALUE);let i=y/n,s=v/n;if(e!==t&&(w[e-1]=n),y=i*m[e]+s*w[e],w[e]=i*w[e]-s*m[e],v=s*m[e+1],m[e+1]=i*m[e+1],u)for(let t=0;t<o;t++)n=i*g.get(t,e)+s*g.get(t,e+1),g.set(t,e+1,-s*g.get(t,e)+i*g.get(t,e+1)),g.set(t,e,n);if(n=T(y,v),0===n&&(n=Number.MIN_VALUE),i=y/n,s=v/n,m[e]=n,y=i*w[e]+s*m[e+1],m[e+1]=-s*w[e]+i*m[e+1],v=s*w[e+1],w[e+1]=i*w[e+1],a&&e<r-1)for(let t=0;t<r;t++)n=i*p.get(t,e)+s*p.get(t,e+1),p.set(t,e+1,-s*p.get(t,e)+i*p.get(t,e+1)),p.set(t,e,n)}w[x-2]=y,E+=1;break}case 4:if(m[t]<=0&&(m[t]=m[t]<0?-m[t]:0,u))for(let e=0;e<=S;e++)g.set(e,t,-g.get(e,t));for(;t<S&&!(m[t]>=m[t+1]);){let e=m[t];if(m[t]=m[t+1],m[t+1]=e,u&&t<o-1)for(let r=0;r<o;r++)e=g.get(r,t+1),g.set(r,t+1,g.get(r,t)),g.set(r,t,e);if(a&&t<r-1)for(let o=0;o<r;o++)e=p.get(o,t+1),p.set(o,t+1,p.get(o,t)),p.set(o,t,e);t++}E=0,x--}}if(l){let t=g;g=p,p=t}this.m=r,this.n=o,this.s=m,this.U=p,this.V=g}solve(t){let e=t,r=this.threshold,o=this.s.length,n=z.zeros(o,o);for(let t=0;t<o;t++)Math.abs(this.s[t])<=r?n.set(t,t,0):n.set(t,t,1/this.s[t]);let i=this.U,s=this.rightSingularVectors,h=s.mmul(n),a=s.rows,u=i.rows,l=z.zeros(a,u);for(let t=0;t<a;t++)for(let e=0;e<u;e++){let r=0;for(let n=0;n<o;n++)r+=h.get(t,n)*i.get(e,n);l.set(t,e,r)}return l.mmul(e)}solveForDiagonal(t){return this.solve(z.diag(t))}inverse(){let t=this.V,e=this.threshold,r=t.rows,o=t.columns,n=new z(r,this.s.length);for(let i=0;i<r;i++)for(let r=0;r<o;r++)Math.abs(this.s[r])>e&&n.set(i,r,t.get(i,r)/this.s[r]);let i=this.U,s=i.rows,h=i.columns,a=new z(r,s);for(let t=0;t<r;t++)for(let e=0;e<s;e++){let r=0;for(let o=0;o<h;o++)r+=n.get(t,o)*i.get(e,o);a.set(t,e,r)}return a}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,n=r.length;o<n;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 z.diag(this.s)}}function _(t,e,r,o,n){let i=r*o*o,s=z.eye(e.length,e.length,i);const h=n(e);let a=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)a[e]=h(t.x[e]);let u=function(t,e,r,o,n){const i=r.length,s=t.x.length;let h=new Array(i);for(let a=0;a<i;a++){h[a]=new Array(s);let i=r.slice();i[a]+=o;let u=n(i);for(let r=0;r<s;r++)h[a][r]=e[r]-u(t.x[r])}return new z(h)}(t,a,e,o,n),l=function(t,e){const r=t.x.length;let o=new Array(r);for(let n=0;n<r;n++)o[n]=[t.y[n]-e[n]];return new z(o)}(t,a),f=function(t,e=!1){return t=I.checkMatrix(t),e?new C(t).inverse():function(t,e,r=!1){return t=I.checkMatrix(t),e=I.checkMatrix(e),r?new C(t).solve(e):t.isSquare()?new F(t).solve(e):new A(t).solve(e)}(t,z.eye(t.rows))}(s.add(u.mmul(u.transpose())));return(e=(e=new z([e])).sub(f.mmul(u).mmul(l).mul(o).transpose())).to1DArray()}function P(t,e,r={}){let{maxIterations:o=100,gradientDifference:s=.1,damping:h=0,errorTolerance:a=.01,minValues:u,maxValues:l,initialValues:f}=r;if(h<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!n(t.x)||t.x.length<2||!n(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");let c=f||new Array(e.length).fill(1),m=c.length;if(l=l||new Array(m).fill(Number.MAX_SAFE_INTEGER),u=u||new Array(m).fill(Number.MIN_SAFE_INTEGER),l.length!==u.length)throw new Error("minValues and maxValues must be the same size");if(!n(c))throw new Error("initialValues must be an array");let p,g=i(t,c,e),w=g<=a;for(p=0;p<o&&!w;p++){c=_(t,c,h,s,e);for(let t=0;t<m;t++)c[t]=Math.min(Math.max(u[t],c[t]),l[t]);if(g=i(t,c,e),isNaN(g))break;w=g<=a}return{parameterValues:c,parameterError:g,iterations:p}}},378:function(t,e,r){var o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var n=o(r(517));function i(t,e){var r=function(r){return n.empty(t).map((function(){return n.filled(e,r)}))},o=[];return o.push(r(-1)),o.push(r(1/0)),o.push(r(0)),o}function s(t,e,r,o,n){e=Math.floor(e);var i=t[0][e],s=t[1][e];if(t[2][e],r>=s[0])return 0;for(var a=0;a<i.length;a++)if(o===i[a])return 0;return h(t,e,r,o,n)}function h(t,e,r,o,n){var i=t[0][e],s=t[1][e],h=t[2][e];if(r>=s[0])return 0;s[0]=r,i[0]=o,h[0]=n;for(var a=0,u=0;;){var l=2*a+1,f=l+1,c=t[0][0].length;if(l>=c)break;if(f>=c){if(!(s[l]>r))break;u=l}else if(s[l]>=s[f]){if(!(r<s[l]))break;u=l}else{if(!(r<s[f]))break;u=f}s[a]=s[u],i[a]=i[u],h[a]=h[u],a=u}return s[a]=r,i[a]=o,h[a]=n,1}function a(t,e,r,o){for(;2*o+1<r;){var n=2*o+1,i=n+1,s=o;if(t[s]<t[n]&&(s=n),i<r&&t[s]<t[i]&&(s=i),s===o)break;var h=t[o];t[o]=t[s],t[s]=h;var a=e[o];e[o]=e[s],e[s]=a,o=s}}e.makeHeap=i,e.rejectionSample=function(t,e,r){for(var o=n.zeros(t),i=0;i<t;i++){for(var s=!0,h=0;s;){h=n.tauRandInt(e,r);for(var a=!1,u=0;u<i;u++)if(h===o[u]){a=!0;break}a||(s=!1)}o[i]=h}return o},e.heapPush=s,e.uncheckedHeapPush=h,e.buildCandidates=function(t,e,r,o,h){for(var a=i(e,o),u=0;u<e;u++)for(var l=0;l<r;l++)if(!(t[0][u][l]<0)){var f=t[0][u][l],c=t[2][u][l],m=n.tauRand(h);s(a,u,m,f,c),s(a,f,m,u,c),t[2][u][l]=0}return a},e.deheapSort=function(t){for(var e=t[0],r=t[1],o=0;o<e.length;o++)for(var n=e[o],i=r[o],s=0;s<n.length-1;s++){var h=n.length-s-1,u=i.length-s-1,l=n[0];n[0]=n[h],n[h]=l;var f=i[0];i[0]=i[u],i[u]=f,a(i,n,u,0)}return{indices:e,weights:r}},e.smallestFlagged=function(t,e){for(var r=t[0][e],o=t[1][e],n=t[2][e],i=1/0,s=-1,h=0;h>r.length;h++)1===n[h]&&o[h]<i&&(i=o[h],s=h);return s>=0?(n[s]=0,Math.floor(r[s])):-1}},221:(t,e,r)=>{var o=r(364);e.u=o.UMAP},686:function(t,e,r){var o,n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)s.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return s},i=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var h=s(r(517)),a=function(){function t(t,e,r,o){if(this.entries=new Map,this.nRows=0,this.nCols=0,t.length!==e.length||t.length!==r.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=o[0],this.nCols=o[1];for(var n=0;n<r.length;n++){var i=t[n],s=e[n];this.checkDims(i,s);var h=this.makeKey(i,s);this.entries.set(h,{value:r[n],row:i,col:s})}}return t.prototype.makeKey=function(t,e){return t+":"+e},t.prototype.checkDims=function(t,e){if(!(t<this.nRows&&e<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")},t.prototype.set=function(t,e,r){this.checkDims(t,e);var o=this.makeKey(t,e);this.entries.has(o)?this.entries.get(o).value=r:this.entries.set(o,{value:r,row:t,col:e})},t.prototype.get=function(t,e,r){void 0===r&&(r=0),this.checkDims(t,e);var o=this.makeKey(t,e);return this.entries.has(o)?this.entries.get(o).value:r},t.prototype.getAll=function(t){void 0===t&&(t=!0);var e=[];return this.entries.forEach((function(t){e.push(t)})),t&&e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row})),e},t.prototype.getDims=function(){return[this.nRows,this.nCols]},t.prototype.getRows=function(){return Array.from(this.entries,(function(t){var e=n(t,2);return e[0],e[1].row}))},t.prototype.getCols=function(){return Array.from(this.entries,(function(t){var e=n(t,2);return e[0],e[1].col}))},t.prototype.getValues=function(){return Array.from(this.entries,(function(t){var e=n(t,2);return e[0],e[1].value}))},t.prototype.forEach=function(t){this.entries.forEach((function(e){return t(e.value,e.row,e.col)}))},t.prototype.map=function(e){var r=[];this.entries.forEach((function(t){r.push(e(t.value,t.row,t.col))}));var o=[this.nRows,this.nCols];return new t(this.getRows(),this.getCols(),r,o)},t.prototype.toArray=function(){var t=this,e=h.empty(this.nRows).map((function(){return h.zeros(t.nCols)}));return this.entries.forEach((function(t){e[t.row][t.col]=t.value})),e},t}();e.SparseMatrix=a,e.transpose=function(t){var e=[],r=[],o=[];t.forEach((function(t,n,i){e.push(n),r.push(i),o.push(t)}));var n=[t.nCols,t.nRows];return new a(r,e,o,n)},e.identity=function(t){for(var e=n(t,1)[0],r=new a([],[],[],t),o=0;o<e;o++)r.set(o,o,1);return r},e.pairwiseMultiply=function(t,e){return l(t,e,(function(t,e){return t*e}))},e.add=function(t,e){return l(t,e,(function(t,e){return t+e}))},e.subtract=function(t,e){return l(t,e,(function(t,e){return t-e}))},e.maximum=function(t,e){return l(t,e,(function(t,e){return t>e?t:e}))},e.multiplyScalar=function(t,e){return t.map((function(t){return t*e}))},e.eliminateZeros=function(t){for(var e=new Set,r=t.getValues(),o=t.getRows(),n=t.getCols(),i=0;i<r.length;i++)0===r[i]&&e.add(i);var s=function(t,r){return!e.has(r)},h=r.filter(s),u=o.filter(s),l=n.filter(s);return new a(u,l,h,t.getDims())},e.normalize=function(t,e){var r,o;void 0===e&&(e="l2");var n=u[e],s=new Map;t.forEach((function(t,e,r){var o=s.get(e)||[];o.push(r),s.set(e,o)}));var h=new a([],[],[],t.getDims()),l=function(e){for(var r=s.get(e).sort(),o=r.map((function(r){return t.get(e,r)})),i=n(o),a=0;a<i.length;a++)h.set(e,r[a],i[a])};try{for(var f=i(s.keys()),c=f.next();!c.done;c=f.next())l(c.value)}catch(t){r={error:t}}finally{try{c&&!c.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}return h};var u=((o={}).max=function(t){for(var e=-1/0,r=0;r<t.length;r++)e=t[r]>e?t[r]:e;return t.map((function(t){return t/e}))},o.l1=function(t){for(var e=0,r=0;r<t.length;r++)e+=t[r];return t.map((function(t){return t/e}))},o.l2=function(t){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r],2);return t.map((function(t){return Math.sqrt(Math.pow(t,2)/e)}))},o);function l(t,e,r){for(var o=new Set,n=[],i=[],s=[],h=function(o,h){n.push(o),i.push(h);var a=r(t.get(o,h),e.get(o,h));s.push(a)},u=t.getValues(),l=t.getRows(),f=t.getCols(),c=0;c<u.length;c++){var m=(d=l[c])+":"+(y=f[c]);o.add(m),h(d,y)}var p=e.getValues(),g=e.getRows(),w=e.getCols();for(c=0;c<p.length;c++){var d,y;m=(d=g[c])+":"+(y=w[c]),o.has(m)||h(d,y)}var v=[t.nRows,t.nCols];return new a(n,i,s,v)}e.getCSR=function(t){var e=[];t.forEach((function(t,r,o){e.push({value:t,row:r,col:o})})),e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row}));for(var r=[],o=[],n=[],i=-1,s=0;s<e.length;s++){var h=e[s],a=h.row,u=h.col,l=h.value;a!==i&&(i=a,n.push(s)),r.push(u),o.push(l)}return{indices:r,values:o,indptr:n}}},760:function(t,e,r){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var i=n(r(378)),s=n(r(686)),h=n(r(320)),a=n(r(517));e.makeNNDescent=function(t,e){return function(r,o,n,s,h,u,l,f){void 0===s&&(s=10),void 0===h&&(h=50),void 0===u&&(u=.001),void 0===l&&(l=.5),void 0===f&&(f=!0);for(var c=r.length,m=i.makeHeap(r.length,n),p=0;p<r.length;p++)for(var g=i.rejectionSample(n,r.length,e),w=0;w<g.length;w++){var d=t(r[p],r[g[w]]);i.heapPush(m,p,d,g[w],1),i.heapPush(m,g[w],d,p,1)}if(f)for(var y=0;y<o.length;y++)for(p=0;p<o[y].length&&!(o[y][p]<0);p++)for(w=p+1;w<o[y].length&&!(o[y][w]<0);w++)d=t(r[o[y][p]],r[o[y][w]]),i.heapPush(m,o[y][p],d,o[y][w],1),i.heapPush(m,o[y][w],d,o[y][p],1);for(y=0;y<s;y++){var v=i.buildCandidates(m,c,n,h,e),b=0;for(p=0;p<c;p++)for(w=0;w<h;w++){var M=Math.floor(v[0][p][w]);if(!(M<0||a.tauRand(e)<l))for(var x=0;x<h;x++){var S=Math.floor(v[0][p][x]),E=v[2][p][w],R=v[2][p][x];S<0||!E&&!R||(d=t(r[M],r[S]),b+=i.heapPush(m,M,d,S,1),b+=i.heapPush(m,S,d,M,1))}}if(b<=u*n*r.length)break}return i.deheapSort(m)}},e.makeInitializations=function(t){return{initFromRandom:function(e,r,o,n,s){for(var h=0;h<o.length;h++)for(var u=a.rejectionSample(e,r.length,s),l=0;l<u.length;l++)if(!(u[l]<0)){var f=t(r[u[l]],o[h]);i.heapPush(n,h,f,u[l],1)}},initFromTree:function(e,r,o,n,s){for(var a=0;a<o.length;a++)for(var u=h.searchFlatTree(o[a],e,s),l=0;l<u.length;l++){if(u[l]<0)return;var f=t(r[u[l]],o[a]);i.heapPush(n,a,f,u[l],1)}}}},e.makeInitializedNNSearch=function(t){return function(e,r,n,h){for(var a,u,l=s.getCSR(r),f=l.indices,c=l.indptr,m=0;m<h.length;m++)for(var p=new Set(n[0][m]);;){var g=i.smallestFlagged(n,m);if(-1===g)break;var w=f.slice(c[g],c[g+1]);try{for(var d=o(w),y=d.next();!y.done;y=d.next()){var v=y.value;if(v!==g&&-1!==v&&!p.has(v)){var b=t(e[v],h[m]);i.uncheckedHeapPush(n,m,b,v,1),p.add(v)}}}catch(t){a={error:t}}finally{try{y&&!y.done&&(u=d.return)&&u.call(d)}finally{if(a)throw a.error}}}return n}},e.initializeSearch=function(t,e,r,n,s,h,a){var u,l,f=i.makeHeap(r.length,n);if(s(n,e,r,f,a),t)try{for(var c=o(t),m=c.next();!m.done;m=c.next())h(m.value,e,r,f,a)}catch(t){u={error:t}}finally{try{m&&!m.done&&(l=c.return)&&l.call(c)}finally{if(u)throw u.error}}return f}},320:function(t,e,r){var o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)s.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return s},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},i=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var h=s(r(517)),a=function(t,e,r,o){this.hyperplanes=t,this.offsets=e,this.children=r,this.indices=o};function u(t,e,r,o,n){if(void 0===r&&(r=30),e.length>r){var i=function(t,e,r){var o=t[0].length,n=h.tauRandInt(e.length,r),i=h.tauRandInt(e.length,r);i=(i+=n===i?1:0)%e.length;for(var s=e[n],a=e[i],u=0,l=h.zeros(o),f=0;f<l.length;f++)l[f]=t[s][f]-t[a][f],u-=l[f]*(t[s][f]+t[a][f])/2;var c=0,m=0,p=h.zeros(e.length);for(f=0;f<e.length;f++){for(var g=u,w=0;w<o;w++)g+=l[w]*t[e[f]][w];0===g?(p[f]=h.tauRandInt(2,r),0===p[f]?c+=1:m+=1):g>0?(p[f]=0,c+=1):(p[f]=1,m+=1)}var d=h.zeros(c),y=h.zeros(m);for(c=0,m=0,f=0;f<p.length;f++)0===p[f]?(d[c]=e[f],c+=1):(y[m]=e[f],m+=1);return{indicesLeft:d,indicesRight:y,hyperplane:l,offset:u}}(t,e,n),s=i.indicesLeft,a=i.indicesRight,l=i.hyperplane,f=i.offset;return{leftChild:u(t,s,r,o+1,n),rightChild:u(t,a,r,o+1,n),isLeaf:!1,hyperplane:l,offset:f}}return{indices:e,isLeaf:!0}}function l(t,e,r,o,i,s,h){var a;if(t.isLeaf)return o[s][0]=-h,(a=i[h]).splice.apply(a,n([0,t.indices.length],t.indices)),{nodeNum:s,leafNum:h+=1};e[s]=t.hyperplane,r[s]=t.offset,o[s][0]=s+1;var u=s,f=l(t.leftChild,e,r,o,i,s+1,h);return s=f.nodeNum,h=f.leafNum,o[u][1]=s+1,{nodeNum:(f=l(t.rightChild,e,r,o,i,s+1,h)).nodeNum,leafNum:f.leafNum}}function f(t){return t.isLeaf?1:1+f(t.leftChild)+f(t.rightChild)}function c(t){return t.isLeaf?1:c(t.leftChild)+c(t.rightChild)}function m(t,e,r,o){for(var n=e,i=0;i<r.length;i++)n+=t[i]*r[i];return 0===n?h.tauRandInt(2,o):n>0?0:1}e.FlatTree=a,e.makeForest=function(t,e,r,o){var n=Math.max(10,e);return h.range(r).map((function(e,r){return function(t,e,r,o){return void 0===e&&(e=30),u(t,h.range(t.length),e,r,o)}(t,n,r,o)})).map((function(t){return function(t,e){var r=f(t),o=c(t),n=h.range(r).map((function(){return h.zeros(t.hyperplane?t.hyperplane.length:0)})),i=h.zeros(r),s=h.range(r).map((function(){return[-1,-1]})),u=h.range(o).map((function(){return h.range(e).map((function(){return-1}))}));return l(t,n,i,s,u,0,0),new a(n,i,s,u)}(t,n)}))},e.makeLeafArray=function(t){var e,r;if(t.length>0){var o=[];try{for(var s=i(t),h=s.next();!h.done;h=s.next()){var a=h.value;o.push.apply(o,n(a.indices))}}catch(t){e={error:t}}finally{try{h&&!h.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return o}return[[-1]]},e.searchFlatTree=function(t,e,r){for(var o=0;e.children[o][0]>0;)o=0===m(e.hyperplanes[o],e.offsets[o],t,r)?e.children[o][0]:e.children[o][1];var n=-1*e.children[o][0];return e.indices[n]}},364:function(t,e,r){var o=this&&this.__awaiter||function(t,e,r,o){return new(r||(r=Promise))((function(n,i){function s(t){try{a(o.next(t))}catch(t){i(t)}}function h(t){try{a(o.throw(t))}catch(t){i(t)}}function a(t){t.done?n(t.value):new r((function(e){e(t.value)})).then(s,h)}a((o=o.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,o,n,i,s={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return i={next:h(0),throw:h(1),return:h(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function h(i){return function(h){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,o&&(n=2&i[0]?o.return:i[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,i[1])).done)return n;switch(o=0,n&&(i=[2&i[0],n.value]),i[0]){case 0:case 1:n=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,o=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((n=(n=s.trys).length>0&&n[n.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]<n[3])){s.label=i[1];break}if(6===i[0]&&s.label<n[1]){s.label=n[1],n=i;break}if(n&&s.label<n[2]){s.label=n[2],s.ops.push(i);break}n[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],o=0}finally{r=n=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,h])}}},i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)s.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return s},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t},h=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=h(r(378)),l=h(r(686)),f=h(r(760)),c=h(r(320)),m=h(r(517)),p=a(r(251)),g=1e-5,w=.001,d=function(){function t(t){void 0===t&&(t={});var e=this;this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=this.nNeighbors,this.distanceFn=y,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new v;var r=function(r){void 0!==t[r]&&(e[r]=t[r])};r("distanceFn"),r("learningRate"),r("localConnectivity"),r("minDist"),r("nComponents"),r("nEpochs"),r("nNeighbors"),r("negativeSampleRate"),r("random"),r("repulsionStrength"),r("setOpMixRatio"),r("spread"),r("transformQueueSize")}return t.prototype.fit=function(t){return this.initializeFit(t),this.optimizeLayout(),this.embedding},t.prototype.fitAsync=function(t,e){return void 0===e&&(e=function(){return!0}),o(this,void 0,void 0,(function(){return n(this,(function(r){switch(r.label){case 0:return this.initializeFit(t),[4,this.optimizeLayoutAsync(e)];case 1:return r.sent(),[2,this.embedding]}}))}))},t.prototype.setSupervisedProjection=function(t,e){void 0===e&&(e={}),this.Y=t,this.targetMetric=e.targetMetric||this.targetMetric,this.targetWeight=e.targetWeight||this.targetWeight,this.targetNNeighbors=e.targetNNeighbors||this.targetNNeighbors},t.prototype.setPrecomputedKNN=function(t,e){this.knnIndices=t,this.knnDistances=e},t.prototype.initializeFit=function(t){if(t.length<=this.nNeighbors)throw new Error("Not enough data points ("+t.length+") to create nNeighbors: "+this.nNeighbors+". Add more data points or adjust the configuration.");if(this.X===t&&this.isInitialized)return this.getNEpochs();if(this.X=t,!this.knnIndices&&!this.knnDistances){var e=this.nearestNeighbors(t);this.knnIndices=e.knnIndices,this.knnDistances=e.knnDistances}this.graph=this.fuzzySimplicialSet(t,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(t),this.processGraphForSupervisedProjection();var r=this.initializeSimplicialSetEmbedding(),o=r.head,n=r.tail,i=r.epochsPerSample;return this.optimizationState.head=o,this.optimizationState.tail=n,this.optimizationState.epochsPerSample=i,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()},t.prototype.makeSearchFns=function(){var t=f.makeInitializations(this.distanceFn),e=t.initFromTree,r=t.initFromRandom;this.initFromTree=e,this.initFromRandom=r,this.search=f.makeInitializedNNSearch(this.distanceFn)},t.prototype.makeSearchGraph=function(t){for(var e=this.knnIndices,r=this.knnDistances,o=[t.length,t.length],n=new l.SparseMatrix([],[],[],o),i=0;i<e.length;i++)for(var s=e[i],h=r[i],a=0;a<s.length;a++){var u=s[a],f=h[a];f>0&&n.set(i,u,f)}var c=l.transpose(n);return l.maximum(n,c)},t.prototype.transform=function(t){var e=this,r=this.X;if(void 0===r||0===r.length)throw new Error("No data has been fit.");var o=Math.floor(this.nNeighbors*this.transformQueueSize);o=Math.min(r.length,o);var n=f.initializeSearch(this.rpForest,r,t,o,this.initFromRandom,this.initFromTree,this.random),i=this.search(r,this.searchGraph,n,t),s=u.deheapSort(i),h=s.indices,a=s.weights;h=h.map((function(t){return t.slice(0,e.nNeighbors)})),a=a.map((function(t){return t.slice(0,e.nNeighbors)}));var c=Math.max(0,this.localConnectivity-1),p=this.smoothKNNDistance(a,this.nNeighbors,c),g=p.sigmas,w=p.rhos,d=this.computeMembershipStrengths(h,a,g,w),y=d.rows,v=d.cols,b=d.vals,M=[t.length,r.length],x=new l.SparseMatrix(y,v,b,M),S=l.normalize(x,"l1"),E=l.getCSR(S),N=t.length,k=R(m.reshape2d(E.indices,N,this.nNeighbors),m.reshape2d(E.values,N,this.nNeighbors),this.embedding),z=this.nEpochs?this.nEpochs/3:x.nRows<=1e4?100:30,I=x.getValues().reduce((function(t,e){return e>t?e:t}),0);x=x.map((function(t){return t<I/z?0:t})),x=l.eliminateZeros(x);var F=this.makeEpochsPerSample(x.getValues(),z),T=x.getRows(),A=x.getCols();return this.assignOptimizationStateParameters({headEmbedding:k,tailEmbedding:this.embedding,head:T,tail:A,currentEpoch:0,nEpochs:z,nVertices:x.getDims()[1],epochsPerSample:F}),this.prepareForOptimizationLoop(),this.optimizeLayout()},t.prototype.processGraphForSupervisedProjection=function(){var t=this.Y,e=this.X;if(t){if(t.length!==e.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){var r=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,t,r)}}},t.prototype.step=function(){var t=this.optimizationState.currentEpoch;return t<this.getNEpochs()&&this.optimizeLayoutStep(t),this.optimizationState.currentEpoch},t.prototype.getEmbedding=function(){return this.embedding},t.prototype.nearestNeighbors=function(t){var e,r=this.distanceFn,o=this.nNeighbors,n=f.makeNNDescent(r,this.random),i=5+Math.floor(.5==(e=Math.pow(t.length,.5)/20)?0:Math.round(e)),s=Math.max(5,Math.floor(Math.round(function(t){return Math.log(t)/Math.log(2)}(t.length))));this.rpForest=c.makeForest(t,o,i,this.random);var h=n(t,c.makeLeafArray(this.rpForest),o,s);return{knnIndices:h.indices,knnDistances:h.weights}},t.prototype.fuzzySimplicialSet=function(t,e,r){void 0===r&&(r=1);var o=this,n=o.knnIndices,i=void 0===n?[]:n,s=o.knnDistances,h=void 0===s?[]:s,a=o.localConnectivity,u=this.smoothKNNDistance(h,e,a),f=u.sigmas,c=u.rhos,m=this.computeMembershipStrengths(i,h,f,c),p=m.rows,g=m.cols,w=m.vals,d=[t.length,t.length],y=new l.SparseMatrix(p,g,w,d),v=l.transpose(y),b=l.pairwiseMultiply(y,v),M=l.subtract(l.add(y,v),b),x=l.multiplyScalar(M,r),S=l.multiplyScalar(b,1-r);return l.add(x,S)},t.prototype.categoricalSimplicialSetIntersection=function(t,e,r,o){void 0===o&&(o=1);var n=S(t,e,o,r);return E(n=l.eliminateZeros(n))},t.prototype.smoothKNNDistance=function(t,e,r,o,n){void 0===r&&(r=1),void 0===o&&(o=64),void 0===n&&(n=1);for(var i=Math.log(e)/Math.log(2)*n,s=m.zeros(t.length),h=m.zeros(t.length),a=0;a<t.length;a++){var u=0,l=1/0,f=1,c=t[a],p=c.filter((function(t){return t>0}));if(p.length>=r){var d=Math.floor(r),y=r-d;d>0?(s[a]=p[d-1],y>g&&(s[a]+=y*(p[d]-p[d-1]))):s[a]=y*p[0]}else p.length>0&&(s[a]=m.max(p));for(var v=0;v<o;v++){for(var b=0,M=1;M<t[a].length;M++){var x=t[a][M]-s[a];b+=x>0?Math.exp(-x/f):1}if(Math.abs(b-i)<g)break;b>i?f=(u+(l=f))/2:(u=f,l===1/0?f*=2:f=(u+l)/2)}if(h[a]=f,s[a]>0){var S=m.mean(c);h[a]<w*S&&(h[a]=w*S)}else{var E=m.mean(t.map(m.mean));h[a]<w*E&&(h[a]=w*E)}}return{sigmas:h,rhos:s}},t.prototype.computeMembershipStrengths=function(t,e,r,o){for(var n=t.length,i=t[0].length,s=m.zeros(n*i),h=m.zeros(n*i),a=m.zeros(n*i),u=0;u<n;u++)for(var l=0;l<i;l++){var f=0;-1!==t[u][l]&&(f=t[u][l]===u?0:e[u][l]-o[u]<=0?1:Math.exp(-(e[u][l]-o[u])/r[u]),s[u*i+l]=u,h[u*i+l]=t[u][l],a[u*i+l]=f)}return{rows:s,cols:h,vals:a}},t.prototype.initializeSimplicialSetEmbedding=function(){for(var t=this,e=this.getNEpochs(),r=this.nComponents,o=this.graph.getValues(),n=0,i=0;i<o.length;i++){var s=o[i];n<o[i]&&(n=s)}var h=this.graph.map((function(t){return t<n/e?0:t}));this.embedding=m.zeros(h.nRows).map((function(){return m.zeros(r).map((function(){return 20*m.tauRand(t.random)-10}))}));var a=[],u=[],l=[],f=h.getAll();for(i=0;i<f.length;i++){var c=f[i];c.value&&(a.push(c.value),l.push(c.row),u.push(c.col))}return{head:u,tail:l,epochsPerSample:this.makeEpochsPerSample(a,e)}},t.prototype.makeEpochsPerSample=function(t,e){var r=m.filled(t.length,-1),o=m.max(t),n=t.map((function(t){return t/o*e}));return n.forEach((function(t,o){t>0&&(r[o]=e/n[o])})),r},t.prototype.assignOptimizationStateParameters=function(t){Object.assign(this.optimizationState,t)},t.prototype.prepareForOptimizationLoop=function(){var t=this,e=t.repulsionStrength,r=t.learningRate,o=t.negativeSampleRate,n=this.optimizationState,i=n.epochsPerSample,h=n.headEmbedding,a=n.tailEmbedding,u=h[0].length,l=h.length===a.length,f=i.map((function(t){return t/o})),c=s(f),m=s(i);this.assignOptimizationStateParameters({epochOfNextSample:m,epochOfNextNegativeSample:c,epochsPerNegativeSample:f,moveOther:l,initialAlpha:r,alpha:r,gamma:e,dim:u})},t.prototype.initializeOptimization=function(){var t=this.embedding,e=this.embedding,r=this.optimizationState,o=r.head,n=r.tail,i=r.epochsPerSample,s=this.getNEpochs(),h=this.graph.nCols,a=x(this.spread,this.minDist),u=a.a,l=a.b;this.assignOptimizationStateParameters({headEmbedding:t,tailEmbedding:e,head:o,tail:n,epochsPerSample:i,a:u,b:l,nEpochs:s,nVertices:h})},t.prototype.optimizeLayoutStep=function(t){for(var e=this.optimizationState,r=e.head,o=e.tail,n=e.headEmbedding,i=e.tailEmbedding,s=e.epochsPerSample,h=e.epochOfNextSample,a=e.epochOfNextNegativeSample,u=e.epochsPerNegativeSample,l=e.moveOther,f=e.initialAlpha,c=e.alpha,p=e.gamma,g=e.a,w=e.b,d=e.dim,y=e.nEpochs,v=e.nVertices,x=0;x<s.length;x++)if(!(h[x]>t)){var S=r[x],E=o[x],R=n[S],N=i[E],k=M(R,N),z=0;k>0&&(z=-2*g*w*Math.pow(k,w-1),z/=g*Math.pow(k,w)+1);for(var I=0;I<d;I++){var F=b(z*(R[I]-N[I]),4);R[I]+=F*c,l&&(N[I]+=-F*c)}h[x]+=s[x];for(var T=Math.floor((t-a[x])/u[x]),A=0;A<T;A++){var C=m.tauRandInt(v,this.random),_=i[C],P=M(R,_),V=0;if(P>0)V=2*p*w,V/=(.001+P)*(g*Math.pow(P,w)+1);else if(S===C)continue;for(I=0;I<d;I++)F=4,V>0&&(F=b(V*(R[I]-_[I]),4)),R[I]+=F*c}a[x]+=T*u[x]}return e.alpha=f*(1-t/y),e.currentEpoch+=1,n},t.prototype.optimizeLayoutAsync=function(t){var e=this;return void 0===t&&(t=function(){return!0}),new Promise((function(r,i){var s=function(){return o(e,void 0,void 0,(function(){var e,o,h,a,u,l;return n(this,(function(n){try{if(e=this.optimizationState,o=e.nEpochs,h=e.currentEpoch,this.embedding=this.optimizeLayoutStep(h),a=this.optimizationState.currentEpoch,u=!1===t(a),l=a===o,u||l)return[2,r(l)];setTimeout((function(){return s()}),0)}catch(t){i(t)}return[2]}))}))};setTimeout((function(){return s()}),0)}))},t.prototype.optimizeLayout=function(t){void 0===t&&(t=function(){return!0});for(var e=!1,r=[];!e;){var o=this.optimizationState,n=o.nEpochs,i=o.currentEpoch;r=this.optimizeLayoutStep(i);var s=this.optimizationState.currentEpoch,h=!1===t(s);e=s===n||h}return r},t.prototype.getNEpochs=function(){var t=this.graph;if(this.nEpochs>0)return this.nEpochs;var e=t.nRows;return e<=2500?500:e<=5e3?400:e<=7500?300:200},t}();function y(t,e){for(var r=0,o=0;o<t.length;o++)r+=Math.pow(t[o]-e[o],2);return Math.sqrt(r)}e.UMAP=d,e.euclidean=y,e.cosine=function(t,e){for(var r=0,o=0,n=0,i=0;i<t.length;i++)r+=t[i]*e[i],o+=Math.pow(t[i],2),n+=Math.pow(e[i],2);return 0===o&&0===n?0:0===o||0===n?1:1-r/Math.sqrt(o*n)};var v=function(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0};function b(t,e){return t>e?e:t<-e?-e:t}function M(t,e){for(var r=0,o=0;o<t.length;o++)r+=Math.pow(t[o]-e[o],2);return r}function x(t,e){var r=m.linear(0,3*t,300).map((function(t){return t<e?1:t})),o=m.zeros(r.length).map((function(o,n){return r[n]>=e?Math.exp(-(r[n]-e)/t):o})),n={x:r,y:o},s=p.default(n,(function(t){var e=i(t,2),r=e[0],o=e[1];return function(t){return 1/(1+r*Math.pow(t,2*o))}}),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}).parameterValues,h=i(s,2);return{a:h[0],b:h[1]}}function S(t,e,r,o){return void 0===r&&(r=1),void 0===o&&(o=5),t.map((function(t,n,i){return-1===e[n]||-1===e[i]?t*Math.exp(-r):e[n]!==e[i]?t*Math.exp(-o):t}))}function E(t){t=l.normalize(t,"max");var e=l.transpose(t),r=l.pairwiseMultiply(e,t);return t=l.add(t,l.subtract(e,r)),l.eliminateZeros(t)}function R(t,e,r){for(var o=m.zeros(t.length).map((function(t){return m.zeros(r[0].length)})),n=0;n<t.length;n++)for(var i=0;i<t[0].length;i++)for(var s=0;s<r[0].length;s++){var h=t[n][i];o[n][s]+=e[n][i]*r[h][s]}return o}e.findABParams=x,e.fastIntersection=S,e.resetLocalConnectivity=E,e.initTransform=R},517:function(t,e){var r=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}};function o(t,e){return Math.floor(e()*t)}function n(t){for(var e=[],r=0;r<t;r++)e.push(void 0);return e}function i(t,e){return n(t).map((function(){return e}))}function s(t){return i(t,0)}function h(t){return t.reduce((function(t,e){return t+e}))}Object.defineProperty(e,"__esModule",{value:!0}),e.tauRandInt=o,e.tauRand=function(t){return t()},e.norm=function(t){var e,o,n=0;try{for(var i=r(t),s=i.next();!s.done;s=i.next()){var h=s.value;n+=Math.pow(h,2)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(e)throw e.error}}return Math.sqrt(n)},e.empty=n,e.range=function(t){return n(t).map((function(t,e){return e}))},e.filled=i,e.zeros=s,e.ones=function(t){return i(t,1)},e.linear=function(t,e,r){return n(r).map((function(o,n){return t+n*((e-t)/(r-1))}))},e.sum=h,e.mean=function(t){return h(t)/t.length},e.max=function(t){for(var e=0,r=0;r<t.length;r++)e=t[r]>e?t[r]:e;return e},e.max2d=function(t){for(var e=0,r=0;r<t.length;r++)for(var o=0;o<t[r].length;o++)e=t[r][o]>e?t[r][o]:e;return e},e.rejectionSample=function(t,e,r){for(var n=s(t),i=0;i<t;i++)for(var h=!0;h;){for(var a=o(e,r),u=!1,l=0;l<i;l++)if(a===n[l]){u=!0;break}u||(h=!1),n[i]=a}return n},e.reshape2d=function(t,e,r){var o=[],n=0;if(t.length!==e*r)throw new Error("Array dimensions must match input length.");for(var i=0;i<e;i++){for(var s=[],h=0;h<r;h++)s.push(t[n]),n+=1;o.push(s)}return o}}}]);
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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dkIsRUFBTW5CLEVBQU1WLEdBQUdvRCxHQUFLdkIsRUFBTW5CLEVBQU1WLEdBQUdvRCxHQUFLdkIsRUFHaEQsT0FBT0EsQ0FDWCxFQXVCQThmLEVBQVErQixnQkFyQlIsU0FBeUJDLEVBQVVDLEVBQVV6ZCxHQUV6QyxJQURBLElBQUlqRCxFQUFTcUQsRUFBTW9kLEdBQ1YzakIsRUFBSSxFQUFHQSxFQUFJMmpCLEVBQVUzakIsSUFFMUIsSUFEQSxJQUFJNmpCLEdBQWUsRUFDWkEsR0FBYyxDQUdqQixJQUZBLElBQUl6Z0IsRUFBSTBnQixFQUFXRixFQUFVemQsR0FDekI0ZCxHQUFTLEVBQ0psYyxFQUFJLEVBQUdBLEVBQUk3SCxFQUFHNkgsSUFDbkIsR0FBSXpFLElBQU1GLEVBQU8yRSxHQUFJLENBQ2pCa2MsR0FBUyxFQUNULEtBQ0osQ0FFQ0EsSUFDREYsR0FBZSxHQUVuQjNnQixFQUFPbEQsR0FBS29ELENBQ2hCLENBRUosT0FBT0YsQ0FDWCxFQW9CQXllLEVBQVFtUyxVQWxCUixTQUFtQjd6QixFQUFHNFAsRUFBR0MsR0FDckIsSUFBSWhOLEVBQU8sR0FFUHlCLEVBQVEsRUFDWixHQUFJdEUsRUFBRUMsU0FBVzJQLEVBQUlDLEVBQ2pCLE1BQU0sSUFBSXRPLE1BQU0sNkNBRXBCLElBQUssSUFBSXhCLEVBQUksRUFBR0EsRUFBSTZQLEVBQUc3UCxJQUFLLENBRXhCLElBREEsSUFBSTJhLEVBQU0sR0FDRHZYLEVBQUksRUFBR0EsRUFBSTBNLEVBQUcxTSxJQUNuQnVYLEVBQUlwWCxLQUFLdEQsRUFBRXNFLElBQ1hBLEdBQVMsRUFFYnpCLEVBQUtTLEtBQUtvWCxFQUVkLENBQ0EsT0FBTzdYLENBQ1gsQyIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvc3JjL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9lcnJvckNhbGN1bGF0aW9uLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvbm9kZV9tb2R1bGVzL2lzLWFueS1hcnJheS9saWItZXNtL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1yZXNjYWxlL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWluL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktcmVzY2FsZS9saWItZXM2L2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1taW4vbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L2xpYi1lczYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvaW5zcGVjdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy91dGlsLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL21hdHJpeC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9zdGF0LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL21hdGhPcGVyYXRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL3dyYXAvV3JhcHBlck1hdHJpeDJELmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL2x1LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL3V0aWwuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvcXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvc3ZkLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9zdGVwLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RlY29tcG9zaXRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L2hlYXAuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3VtYXAtanMvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L21hdHJpeC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L25uX2Rlc2NlbnQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3VtYXAtanMvZGlzdC90cmVlLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvdW1hcC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBbnlBcnJheShvYmplY3QpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqZWN0KS5lbmRzV2l0aCgnQXJyYXldJyk7XG59XG4iLCIvKipcbiAqIENhbGN1bGF0ZSBjdXJyZW50IGVycm9yXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtZXRlcnMgLSBBcnJheSBvZiBjdXJyZW50IHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXJyb3JDYWxjdWxhdGlvbihcbiAgZGF0YSxcbiAgcGFyYW1ldGVycyxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuKSB7XG4gIGxldCBlcnJvciA9IDA7XG4gIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1ldGVycyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBlcnJvciArPSBNYXRoLmFicyhkYXRhLnlbaV0gLSBmdW5jKGRhdGEueFtpXSkpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBBcnJheSAoYXJyYXkgb3IgdHlwZWQgYXJyYXksIGV4Y2VwdCB0aG9zZSB0aGF0IGNvbnRhaW4gYmlnaW50IHZhbHVlcykuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gT2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFycmF5IG9yIGEgdHlwZWQgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FueUFycmF5KHZhbHVlKSB7XG4gICAgY29uc3QgdGFnID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRhZy5lbmRzV2l0aCgnQXJyYXldJykgJiYgIXRhZy5pbmNsdWRlcygnQmlnJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gQXJyYXkgKGFycmF5IG9yIHR5cGVkIGFycmF5LCBleGNlcHQgdGhvc2UgdGhhdCBjb250YWluIGJpZ2ludCB2YWx1ZXMpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIHR5cGVkIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IHRhZyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIHJldHVybiB0YWcuZW5kc1dpdGgoJ0FycmF5XScpICYmICF0YWcuaW5jbHVkZXMoJ0JpZycpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuaW1wb3J0IG1heCBmcm9tICdtbC1hcnJheS1tYXgnO1xuaW1wb3J0IG1pbiBmcm9tICdtbC1hcnJheS1taW4nO1xuXG5mdW5jdGlvbiByZXNjYWxlKGlucHV0KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICBpZiAoIWlzQW55QXJyYXkoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICB2YXIgb3V0cHV0O1xuXG4gIGlmIChvcHRpb25zLm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpc0FueUFycmF5KG9wdGlvbnMub3V0cHV0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3V0cHV0IG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IGlmIHNwZWNpZmllZCcpO1xuICAgIH1cblxuICAgIG91dHB1dCA9IG9wdGlvbnMub3V0cHV0O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IG5ldyBBcnJheShpbnB1dC5sZW5ndGgpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRNaW4gPSBtaW4oaW5wdXQpO1xuICB2YXIgY3VycmVudE1heCA9IG1heChpbnB1dCk7XG5cbiAgaWYgKGN1cnJlbnRNaW4gPT09IGN1cnJlbnRNYXgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluaW11bSBhbmQgbWF4aW11bSBpbnB1dCB2YWx1ZXMgYXJlIGVxdWFsLiBDYW5ub3QgcmVzY2FsZSBhIGNvbnN0YW50IGFycmF5Jyk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWluID0gb3B0aW9ucy5taW4sXG4gICAgICBtaW5WYWx1ZSA9IF9vcHRpb25zJG1pbiA9PT0gdm9pZCAwID8gb3B0aW9ucy5hdXRvTWluTWF4ID8gY3VycmVudE1pbiA6IDAgOiBfb3B0aW9ucyRtaW4sXG4gICAgICBfb3B0aW9ucyRtYXggPSBvcHRpb25zLm1heCxcbiAgICAgIG1heFZhbHVlID0gX29wdGlvbnMkbWF4ID09PSB2b2lkIDAgPyBvcHRpb25zLmF1dG9NaW5NYXggPyBjdXJyZW50TWF4IDogMSA6IF9vcHRpb25zJG1heDtcblxuICBpZiAobWluVmFsdWUgPj0gbWF4VmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG9wdGlvbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXggb3B0aW9uJyk7XG4gIH1cblxuICB2YXIgZmFjdG9yID0gKG1heFZhbHVlIC0gbWluVmFsdWUpIC8gKGN1cnJlbnRNYXggLSBjdXJyZW50TWluKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIC0gY3VycmVudE1pbikgKiBmYWN0b3IgKyBtaW5WYWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmV4cG9ydCB7IHJlc2NhbGUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1pbihpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1pblZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA8IG1pblZhbHVlKSBtaW5WYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1pblZhbHVlO1xufVxuXG5leHBvcnQgeyBtaW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1heChpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1heFZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA+IG1heFZhbHVlKSBtYXhWYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1heFZhbHVlO1xufVxuXG5leHBvcnQgeyBtYXggYXMgZGVmYXVsdCB9O1xuIiwiY29uc3QgaW5kZW50ID0gJyAnLnJlcGVhdCgyKTtcbmNvbnN0IGluZGVudERhdGEgPSAnICcucmVwZWF0KDQpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdE1hdHJpeCgpIHtcbiAgcmV0dXJuIGluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyh0aGlzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyhtYXRyaXgsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbWF4Um93cyA9IDE1LFxuICAgIG1heENvbHVtbnMgPSAxMCxcbiAgICBtYXhOdW1TaXplID0gOCxcbiAgICBwYWRNaW51cyA9ICdhdXRvJyxcbiAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiBgJHttYXRyaXguY29uc3RydWN0b3IubmFtZX0ge1xuJHtpbmRlbnR9W1xuJHtpbmRlbnREYXRhfSR7aW5zcGVjdERhdGEobWF0cml4LCBtYXhSb3dzLCBtYXhDb2x1bW5zLCBtYXhOdW1TaXplLCBwYWRNaW51cyl9XG4ke2luZGVudH1dXG4ke2luZGVudH1yb3dzOiAke21hdHJpeC5yb3dzfVxuJHtpbmRlbnR9Y29sdW1uczogJHttYXRyaXguY29sdW1uc31cbn1gO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0RGF0YShtYXRyaXgsIG1heFJvd3MsIG1heENvbHVtbnMsIG1heE51bVNpemUsIHBhZE1pbnVzKSB7XG4gIGNvbnN0IHsgcm93cywgY29sdW1ucyB9ID0gbWF0cml4O1xuICBjb25zdCBtYXhJID0gTWF0aC5taW4ocm93cywgbWF4Um93cyk7XG4gIGNvbnN0IG1heEogPSBNYXRoLm1pbihjb2x1bW5zLCBtYXhDb2x1bW5zKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKHBhZE1pbnVzID09PSAnYXV0bycpIHtcbiAgICBwYWRNaW51cyA9IGZhbHNlO1xuICAgIGxvb3A6IGZvciAobGV0IGkgPSAwOyBpIDwgbWF4STsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1heEo7IGorKykge1xuICAgICAgICBpZiAobWF0cml4LmdldChpLCBqKSA8IDApIHtcbiAgICAgICAgICBwYWRNaW51cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4STsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1heEo7IGorKykge1xuICAgICAgbGluZS5wdXNoKGZvcm1hdE51bWJlcihtYXRyaXguZ2V0KGksIGopLCBtYXhOdW1TaXplLCBwYWRNaW51cykpO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChgJHtsaW5lLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBpZiAobWF4SiAhPT0gY29sdW1ucykge1xuICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gKz0gYCAuLi4gJHtjb2x1bW5zIC0gbWF4Q29sdW1uc30gbW9yZSBjb2x1bW5zYDtcbiAgfVxuICBpZiAobWF4SSAhPT0gcm93cykge1xuICAgIHJlc3VsdC5wdXNoKGAuLi4gJHtyb3dzIC0gbWF4Um93c30gbW9yZSByb3dzYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5qb2luKGBcXG4ke2luZGVudERhdGF9YCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWJlcihudW0sIG1heE51bVNpemUsIHBhZE1pbnVzKSB7XG4gIHJldHVybiAoXG4gICAgbnVtID49IDAgJiYgcGFkTWludXNcbiAgICAgID8gYCAke2Zvcm1hdE51bWJlcjIobnVtLCBtYXhOdW1TaXplIC0gMSl9YFxuICAgICAgOiBmb3JtYXROdW1iZXIyKG51bSwgbWF4TnVtU2l6ZSlcbiAgKS5wYWRFbmQobWF4TnVtU2l6ZSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWJlcjIobnVtLCBsZW4pIHtcbiAgLy8gc21hbGwubGVuZ3RoIG51bWJlcnMgc2hvdWxkIGJlIGFzIGlzXG4gIGxldCBzdHIgPSBudW0udG9TdHJpbmcoKTtcbiAgaWYgKHN0ci5sZW5ndGggPD0gbGVuKSByZXR1cm4gc3RyO1xuXG4gIC8vICg3KScwLjAwMTIzJyBpcyBiZXR0ZXIgdGhlbiAoNyknMS4yM2UtMidcbiAgLy8gKDgpJzAuMDAwMTIzJyBpcyB3b3JzZSB0aGVuICg3KScxLjIzZS0zJyxcbiAgbGV0IGZpeCA9IG51bS50b0ZpeGVkKGxlbik7XG4gIGlmIChmaXgubGVuZ3RoID4gbGVuKSB7XG4gICAgZml4ID0gbnVtLnRvRml4ZWQoTWF0aC5tYXgoMCwgbGVuIC0gKGZpeC5sZW5ndGggLSBsZW4pKSk7XG4gIH1cbiAgaWYgKFxuICAgIGZpeC5sZW5ndGggPD0gbGVuICYmXG4gICAgIWZpeC5zdGFydHNXaXRoKCcwLjAwMCcpICYmXG4gICAgIWZpeC5zdGFydHNXaXRoKCctMC4wMDAnKVxuICApIHtcbiAgICByZXR1cm4gZml4O1xuICB9XG5cbiAgLy8gd2VsbCwgaWYgaXQncyBzdGlsbCB0b28gbG9uZyB0aGUgdXNlciBzaG91bGQndmUgdXNlZCBsb25nZXIgbnVtYmVyc1xuICBsZXQgZXhwID0gbnVtLnRvRXhwb25lbnRpYWwobGVuKTtcbiAgaWYgKGV4cC5sZW5ndGggPiBsZW4pIHtcbiAgICBleHAgPSBudW0udG9FeHBvbmVudGlhbChNYXRoLm1heCgwLCBsZW4gLSAoZXhwLmxlbmd0aCAtIGxlbikpKTtcbiAgfVxuICByZXR1cm4gZXhwLnNsaWNlKDApO1xufVxuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENoZWNrIHRoYXQgYSByb3cgaW5kZXggaXMgbm90IG91dCBvZiBib3VuZHNcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtib29sZWFufSBbb3V0ZXJdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Jvd0luZGV4KG1hdHJpeCwgaW5kZXgsIG91dGVyKSB7XG4gIGxldCBtYXggPSBvdXRlciA/IG1hdHJpeC5yb3dzIDogbWF0cml4LnJvd3MgLSAxO1xuICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1JvdyBpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IGEgY29sdW1uIGluZGV4IGlzIG5vdCBvdXQgb2YgYm91bmRzXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW291dGVyXVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5JbmRleChtYXRyaXgsIGluZGV4LCBvdXRlcikge1xuICBsZXQgbWF4ID0gb3V0ZXIgPyBtYXRyaXguY29sdW1ucyA6IG1hdHJpeC5jb2x1bW5zIC0gMTtcbiAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IG1heCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdmVjdG9yIGlzIGFuIGFycmF5IHdpdGggdGhlIHJpZ2h0IGxlbmd0aFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSb3dWZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgaWYgKHZlY3Rvci50bzFEQXJyYXkpIHtcbiAgICB2ZWN0b3IgPSB2ZWN0b3IudG8xREFycmF5KCk7XG4gIH1cbiAgaWYgKHZlY3Rvci5sZW5ndGggIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAndmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMnLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdmVjdG9yIGlzIGFuIGFycmF5IHdpdGggdGhlIHJpZ2h0IGxlbmd0aFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5WZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgaWYgKHZlY3Rvci50bzFEQXJyYXkpIHtcbiAgICB2ZWN0b3IgPSB2ZWN0b3IudG8xREFycmF5KCk7XG4gIH1cbiAgaWYgKHZlY3Rvci5sZW5ndGggIT09IG1hdHJpeC5yb3dzKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiByb3dzJyk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUm93SW5kaWNlcyhtYXRyaXgsIHJvd0luZGljZXMpIHtcbiAgaWYgKCFpc0FueUFycmF5KHJvd0luZGljZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncm93IGluZGljZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJvd0luZGljZXNbaV0gPCAwIHx8IHJvd0luZGljZXNbaV0gPj0gbWF0cml4LnJvd3MpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyb3cgaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbHVtbkluZGljZXMobWF0cml4LCBjb2x1bW5JbmRpY2VzKSB7XG4gIGlmICghaXNBbnlBcnJheShjb2x1bW5JbmRpY2VzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbHVtbiBpbmRpY2VzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb2x1bW5JbmRpY2VzW2ldIDwgMCB8fCBjb2x1bW5JbmRpY2VzW2ldID49IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignY29sdW1uIGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSYW5nZShtYXRyaXgsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZXhwZWN0ZWQgNCBhcmd1bWVudHMnKTtcbiAgfVxuICBjaGVja051bWJlcignc3RhcnRSb3cnLCBzdGFydFJvdyk7XG4gIGNoZWNrTnVtYmVyKCdlbmRSb3cnLCBlbmRSb3cpO1xuICBjaGVja051bWJlcignc3RhcnRDb2x1bW4nLCBzdGFydENvbHVtbik7XG4gIGNoZWNrTnVtYmVyKCdlbmRDb2x1bW4nLCBlbmRDb2x1bW4pO1xuICBpZiAoXG4gICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICBzdGFydENvbHVtbiA+IGVuZENvbHVtbiB8fFxuICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgIHN0YXJ0Um93ID49IG1hdHJpeC5yb3dzIHx8XG4gICAgZW5kUm93IDwgMCB8fFxuICAgIGVuZFJvdyA+PSBtYXRyaXgucm93cyB8fFxuICAgIHN0YXJ0Q29sdW1uIDwgMCB8fFxuICAgIHN0YXJ0Q29sdW1uID49IG1hdHJpeC5jb2x1bW5zIHx8XG4gICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgIGVuZENvbHVtbiA+PSBtYXRyaXguY29sdW1uc1xuICApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignU3VibWF0cml4IGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdBcnJheShsZW5ndGgsIHZhbHVlID0gMCkge1xuICBsZXQgYXJyYXkgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGFycmF5LnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gY2hlY2tOdW1iZXIobmFtZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IG11c3QgYmUgYSBudW1iZXJgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tOb25FbXB0eShtYXRyaXgpIHtcbiAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IG1hdHJpeCBoYXMgbm8gZWxlbWVudHMgdG8gaW5kZXgnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5pbXBvcnQgcmVzY2FsZSBmcm9tICdtbC1hcnJheS1yZXNjYWxlJztcblxuaW1wb3J0IHsgaW5zcGVjdE1hdHJpeCwgaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zIH0gZnJvbSAnLi9pbnNwZWN0JztcbmltcG9ydCB7IGluc3RhbGxNYXRoT3BlcmF0aW9ucyB9IGZyb20gJy4vbWF0aE9wZXJhdGlvbnMnO1xuaW1wb3J0IHtcbiAgc3VtQnlSb3csXG4gIHN1bUJ5Q29sdW1uLFxuICBzdW1BbGwsXG4gIHByb2R1Y3RCeVJvdyxcbiAgcHJvZHVjdEJ5Q29sdW1uLFxuICBwcm9kdWN0QWxsLFxuICB2YXJpYW5jZUJ5Um93LFxuICB2YXJpYW5jZUJ5Q29sdW1uLFxuICB2YXJpYW5jZUFsbCxcbiAgY2VudGVyQnlSb3csXG4gIGNlbnRlckJ5Q29sdW1uLFxuICBjZW50ZXJBbGwsXG4gIHNjYWxlQnlSb3csXG4gIHNjYWxlQnlDb2x1bW4sXG4gIHNjYWxlQWxsLFxuICBnZXRTY2FsZUJ5Um93LFxuICBnZXRTY2FsZUJ5Q29sdW1uLFxuICBnZXRTY2FsZUFsbCxcbn0gZnJvbSAnLi9zdGF0JztcbmltcG9ydCB7XG4gIGNoZWNrUm93VmVjdG9yLFxuICBjaGVja1Jvd0luZGV4LFxuICBjaGVja0NvbHVtbkluZGV4LFxuICBjaGVja0NvbHVtblZlY3RvcixcbiAgY2hlY2tSYW5nZSxcbiAgY2hlY2tOb25FbXB0eSxcbiAgY2hlY2tSb3dJbmRpY2VzLFxuICBjaGVja0NvbHVtbkluZGljZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdE1hdHJpeCB7XG4gIHN0YXRpYyBmcm9tMURBcnJheShuZXdSb3dzLCBuZXdDb2x1bW5zLCBuZXdEYXRhKSB7XG4gICAgbGV0IGxlbmd0aCA9IG5ld1Jvd3MgKiBuZXdDb2x1bW5zO1xuICAgIGlmIChsZW5ndGggIT09IG5ld0RhdGEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZGF0YSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChuZXdSb3dzLCBuZXdDb2x1bW5zKTtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBuZXdSb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgbmV3Q29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgbmV3TWF0cml4LnNldChyb3csIGNvbHVtbiwgbmV3RGF0YVtyb3cgKiBuZXdDb2x1bW5zICsgY29sdW1uXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcm93VmVjdG9yKG5ld0RhdGEpIHtcbiAgICBsZXQgdmVjdG9yID0gbmV3IE1hdHJpeCgxLCBuZXdEYXRhLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2ZWN0b3Iuc2V0KDAsIGksIG5ld0RhdGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGNvbHVtblZlY3RvcihuZXdEYXRhKSB7XG4gICAgbGV0IHZlY3RvciA9IG5ldyBNYXRyaXgobmV3RGF0YS5sZW5ndGgsIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmVjdG9yLnNldChpLCAwLCBuZXdEYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyB6ZXJvcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgb25lcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucykuZmlsbCgxKTtcbiAgfVxuXG4gIHN0YXRpYyByYW5kKHJvd3MsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyByYW5kb20gPSBNYXRoLnJhbmRvbSB9ID0gb3B0aW9ucztcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCByYW5kb20oKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcmFuZEludChyb3dzLCBjb2x1bW5zLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgbWluID0gMCwgbWF4ID0gMTAwMCwgcmFuZG9tID0gTWF0aC5yYW5kb20gfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBpbnRlcnZhbCA9IG1heCAtIG1pbjtcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbWluICsgTWF0aC5yb3VuZChyYW5kb20oKSAqIGludGVydmFsKTtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZXllKHJvd3MsIGNvbHVtbnMsIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkgY29sdW1ucyA9IHJvd3M7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gMTtcbiAgICBsZXQgbWluID0gTWF0aC5taW4ocm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZGlhZyhkYXRhLCByb3dzLCBjb2x1bW5zKSB7XG4gICAgbGV0IGwgPSBkYXRhLmxlbmd0aDtcbiAgICBpZiAocm93cyA9PT0gdW5kZWZpbmVkKSByb3dzID0gbDtcbiAgICBpZiAoY29sdW1ucyA9PT0gdW5kZWZpbmVkKSBjb2x1bW5zID0gcm93cztcbiAgICBsZXQgbWluID0gTWF0aC5taW4obCwgcm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCBkYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIHN0YXRpYyBtaW4obWF0cml4MSwgbWF0cml4Mikge1xuICAgIG1hdHJpeDEgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDEpO1xuICAgIG1hdHJpeDIgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDIpO1xuICAgIGxldCByb3dzID0gbWF0cml4MS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbWF0cml4MS5jb2x1bW5zO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWluKG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIG1heChtYXRyaXgxLCBtYXRyaXgyKSB7XG4gICAgbWF0cml4MSA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4MSk7XG4gICAgbWF0cml4MiA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4Mik7XG4gICAgbGV0IHJvd3MgPSBtYXRyaXgxLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBtYXRyaXgxLmNvbHVtbnM7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyB0aGlzKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWF4KG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTWF0cml4KHZhbHVlKSB7XG4gICAgcmV0dXJuIEFic3RyYWN0TWF0cml4LmlzTWF0cml4KHZhbHVlKSA/IHZhbHVlIDogbmV3IE1hdHJpeCh2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgaXNNYXRyaXgodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5rbGFzcyA9PT0gJ01hdHJpeCc7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzICogdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgYXBwbHkoY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGksIGopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvMURBcnJheSgpIHtcbiAgICBsZXQgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIGFycmF5LnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB0bzJEQXJyYXkoKSB7XG4gICAgbGV0IGNvcHkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb3B5LnB1c2goW10pO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjb3B5W2ldLnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29weTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50bzJEQXJyYXkoKTtcbiAgfVxuXG4gIGlzUm93VmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDE7XG4gIH1cblxuICBpc0NvbHVtblZlY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zID09PSAxO1xuICB9XG5cbiAgaXNWZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyA9PT0gMSB8fCB0aGlzLmNvbHVtbnMgPT09IDE7XG4gIH1cblxuICBpc1NxdWFyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDAgfHwgdGhpcy5jb2x1bW5zID09PSAwO1xuICB9XG5cbiAgaXNTeW1tZXRyaWMoKSB7XG4gICAgaWYgKHRoaXMuaXNTcXVhcmUoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBpOyBqKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgIT09IHRoaXMuZ2V0KGosIGkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc0VjaGVsb25Gb3JtID0gdHJ1ZTtcbiAgICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICAgIHdoaWxlIChpIDwgdGhpcy5yb3dzICYmIGlzRWNoZWxvbkZvcm0pIHtcbiAgICAgIGogPSAwO1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMgJiYgY2hlY2tlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID09PSAwKSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0KGksIGopID09PSAxICYmIGogPiBwcmV2aW91c0NvbHVtbikge1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgIHByZXZpb3VzQ29sdW1uID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0VjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzRWNoZWxvbkZvcm07XG4gIH1cblxuICBpc1JlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IHRydWU7XG4gICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaSA8IHRoaXMucm93cyAmJiBpc1JlZHVjZWRFY2hlbG9uRm9ybSkge1xuICAgICAgaiA9IDA7XG4gICAgICBjaGVja2VkID0gZmFsc2U7XG4gICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucyAmJiBjaGVja2VkID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPT09IDApIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXQoaSwgaikgPT09IDEgJiYgaiA+IHByZXZpb3VzQ29sdW1uKSB7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgcHJldmlvdXNDb2x1bW4gPSBqO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHRoaXMucm93czsgaysrKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBrKSAhPT0gMCkge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzUmVkdWNlZEVjaGVsb25Gb3JtO1xuICB9XG5cbiAgZWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgaCA9IDA7XG4gICAgbGV0IGsgPSAwO1xuICAgIHdoaWxlIChoIDwgcmVzdWx0LnJvd3MgJiYgayA8IHJlc3VsdC5jb2x1bW5zKSB7XG4gICAgICBsZXQgaU1heCA9IGg7XG4gICAgICBmb3IgKGxldCBpID0gaDsgaSA8IHJlc3VsdC5yb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdC5nZXQoaSwgaykgPiByZXN1bHQuZ2V0KGlNYXgsIGspKSB7XG4gICAgICAgICAgaU1heCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQuZ2V0KGlNYXgsIGspID09PSAwKSB7XG4gICAgICAgIGsrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5zd2FwUm93cyhoLCBpTWF4KTtcbiAgICAgICAgbGV0IHRtcCA9IHJlc3VsdC5nZXQoaCwgayk7XG4gICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcmVzdWx0LmNvbHVtbnM7IGorKykge1xuICAgICAgICAgIHJlc3VsdC5zZXQoaCwgaiwgcmVzdWx0LmdldChoLCBqKSAvIHRtcCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGggKyAxOyBpIDwgcmVzdWx0LnJvd3M7IGkrKykge1xuICAgICAgICAgIGxldCBmYWN0b3IgPSByZXN1bHQuZ2V0KGksIGspIC8gcmVzdWx0LmdldChoLCBrKTtcbiAgICAgICAgICByZXN1bHQuc2V0KGksIGssIDApO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IHJlc3VsdC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgcmVzdWx0LmdldChpLCBqKSAtIHJlc3VsdC5nZXQoaCwgaikgKiBmYWN0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoKys7XG4gICAgICAgIGsrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5lY2hlbG9uRm9ybSgpO1xuICAgIGxldCBtID0gcmVzdWx0LmNvbHVtbnM7XG4gICAgbGV0IG4gPSByZXN1bHQucm93cztcbiAgICBsZXQgaCA9IG4gLSAxO1xuICAgIHdoaWxlIChoID49IDApIHtcbiAgICAgIGlmIChyZXN1bHQubWF4Um93KGgpID09PSAwKSB7XG4gICAgICAgIGgtLTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwID0gMDtcbiAgICAgICAgbGV0IHBpdm90ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlIChwIDwgbiAmJiBwaXZvdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LmdldChoLCBwKSA9PT0gMSkge1xuICAgICAgICAgICAgcGl2b3QgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGZhY3RvciA9IHJlc3VsdC5nZXQoaSwgcCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IHA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0bXAgPSByZXN1bHQuZ2V0KGksIGopIC0gZmFjdG9yICogcmVzdWx0LmdldChoLCBqKTtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgdG1wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHJlcGVhdChvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcm93cyA9IDEsIGNvbHVtbnMgPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihyb3dzKSB8fCByb3dzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jvd3MgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbnMpIHx8IGNvbHVtbnMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgIH1cbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MgKiByb3dzLCB0aGlzLmNvbHVtbnMgKiBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldFN1Yk1hdHJpeCh0aGlzLCB0aGlzLnJvd3MgKiBpLCB0aGlzLmNvbHVtbnMgKiBqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIGZpbGwodmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBuZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsUygtMSk7XG4gIH1cblxuICBnZXRSb3coaW5kZXgpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgcm93ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgcm93LnB1c2godGhpcy5nZXQoaW5kZXgsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIGdldFJvd1ZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXgucm93VmVjdG9yKHRoaXMuZ2V0Um93KGluZGV4KSk7XG4gIH1cblxuICBzZXRSb3coaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja1Jvd1ZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwUm93cyhyb3cxLCByb3cyKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cxKTtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdzIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQocm93MSwgaSk7XG4gICAgICB0aGlzLnNldChyb3cxLCBpLCB0aGlzLmdldChyb3cyLCBpKSk7XG4gICAgICB0aGlzLnNldChyb3cyLCBpLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgY29sdW1uID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29sdW1uLnB1c2godGhpcy5nZXQoaSwgaW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIGdldENvbHVtblZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXguY29sdW1uVmVjdG9yKHRoaXMuZ2V0Q29sdW1uKGluZGV4KSk7XG4gIH1cblxuICBzZXRDb2x1bW4oaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja0NvbHVtblZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwQ29sdW1ucyhjb2x1bW4xLCBjb2x1bW4yKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4xKTtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbjIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQoaSwgY29sdW1uMSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4xLCB0aGlzLmdldChpLCBjb2x1bW4yKSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4yLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3coaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIHRoaXMuZ2V0KGluZGV4LCBpKSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW4oaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIHRoaXMuZ2V0KGksIGluZGV4KSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtYXgoYnkpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgY29uc3QgbWF4ID0gbmV3IEFycmF5KHRoaXMucm93cykuZmlsbChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA+IG1heFtyb3ddKSB7XG4gICAgICAgICAgICAgIG1heFtyb3ddID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBjb25zdCBtYXggPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKS5maWxsKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pID4gbWF4W2NvbHVtbl0pIHtcbiAgICAgICAgICAgICAgbWF4W2NvbHVtbl0gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBsZXQgbWF4ID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pID4gbWF4KSB7XG4gICAgICAgICAgICAgIG1heCA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWF4SW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPiB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluKGJ5KSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgY29uc3QgbWluID0gbmV3IEFycmF5KHRoaXMucm93cykuZmlsbChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA8IG1pbltyb3ddKSB7XG4gICAgICAgICAgICAgIG1pbltyb3ddID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBjb25zdCBtaW4gPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKS5maWxsKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pIDwgbWluW2NvbHVtbl0pIHtcbiAgICAgICAgICAgICAgbWluW2NvbHVtbl0gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBsZXQgbWluID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pIDwgbWluKSB7XG4gICAgICAgICAgICAgIG1pbiA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWluSW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPCB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWF4Um93KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWF4Um93SW5kZXgocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGxldCBpZHggPSBbcm93LCAwXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICAgIGlkeFsxXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBtaW5Sb3cocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICBtaW5Sb3dJbmRleChyb3cpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdyk7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KHJvdywgMCk7XG4gICAgbGV0IGlkeCA9IFtyb3csIDBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgICAgaWR4WzFdID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1heENvbHVtbihjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1heENvbHVtbkluZGV4KGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBsZXQgaWR4ID0gWzAsIGNvbHVtbl07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluQ29sdW1uKGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWluQ29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4pO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCBjb2x1bW4pO1xuICAgIGxldCBpZHggPSBbMCwgY29sdW1uXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICAgIGlkeFswXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBkaWFnKCkge1xuICAgIGxldCBtaW4gPSBNYXRoLm1pbih0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgbGV0IGRpYWcgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbjsgaSsrKSB7XG4gICAgICBkaWFnLnB1c2godGhpcy5nZXQoaSwgaSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGlhZztcbiAgfVxuXG4gIG5vcm0odHlwZSA9ICdmcm9iZW5pdXMnKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKHR5cGUgPT09ICdtYXgnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXgoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdmcm9iZW5pdXMnKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB0aGlzLmdldChpLCBqKSAqIHRoaXMuZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIGN1bXVsYXRpdmVTdW0oKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBzdW0gKz0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZG90KHZlY3RvcjIpIHtcbiAgICBpZiAoQWJzdHJhY3RNYXRyaXguaXNNYXRyaXgodmVjdG9yMikpIHZlY3RvcjIgPSB2ZWN0b3IyLnRvMURBcnJheSgpO1xuICAgIGxldCB2ZWN0b3IxID0gdGhpcy50bzFEQXJyYXkoKTtcbiAgICBpZiAodmVjdG9yMS5sZW5ndGggIT09IHZlY3RvcjIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmVjdG9ycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplJyk7XG4gICAgfVxuICAgIGxldCBkb3QgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVjdG9yMS5sZW5ndGg7IGkrKykge1xuICAgICAgZG90ICs9IHZlY3RvcjFbaV0gKiB2ZWN0b3IyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZG90O1xuICB9XG5cbiAgbW11bChvdGhlcikge1xuICAgIG90aGVyID0gTWF0cml4LmNoZWNrTWF0cml4KG90aGVyKTtcblxuICAgIGxldCBtID0gdGhpcy5yb3dzO1xuICAgIGxldCBuID0gdGhpcy5jb2x1bW5zO1xuICAgIGxldCBwID0gb3RoZXIuY29sdW1ucztcblxuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KG0sIHApO1xuXG4gICAgbGV0IEJjb2xqID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHA7IGorKykge1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgQmNvbGpba10gPSBvdGhlci5nZXQoaywgaik7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIGxldCBzID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzICs9IHRoaXMuZ2V0KGksIGspICogQmNvbGpba107XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc2V0KGksIGosIHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4yeDIob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMiwgMik7XG4gICAgY29uc3QgYTExID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgY29uc3QgYjExID0gb3RoZXIuZ2V0KDAsIDApO1xuICAgIGNvbnN0IGExMiA9IHRoaXMuZ2V0KDAsIDEpO1xuICAgIGNvbnN0IGIxMiA9IG90aGVyLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMSwgMCk7XG4gICAgY29uc3QgYTIyID0gdGhpcy5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDEsIDEpO1xuXG4gICAgLy8gQ29tcHV0ZSBpbnRlcm1lZGlhdGUgdmFsdWVzLlxuICAgIGNvbnN0IG0xID0gKGExMSArIGEyMikgKiAoYjExICsgYjIyKTtcbiAgICBjb25zdCBtMiA9IChhMjEgKyBhMjIpICogYjExO1xuICAgIGNvbnN0IG0zID0gYTExICogKGIxMiAtIGIyMik7XG4gICAgY29uc3QgbTQgPSBhMjIgKiAoYjIxIC0gYjExKTtcbiAgICBjb25zdCBtNSA9IChhMTEgKyBhMTIpICogYjIyO1xuICAgIGNvbnN0IG02ID0gKGEyMSAtIGExMSkgKiAoYjExICsgYjEyKTtcbiAgICBjb25zdCBtNyA9IChhMTIgLSBhMjIpICogKGIyMSArIGIyMik7XG5cbiAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgIGNvbnN0IGMwMCA9IG0xICsgbTQgLSBtNSArIG03O1xuICAgIGNvbnN0IGMwMSA9IG0zICsgbTU7XG4gICAgY29uc3QgYzEwID0gbTIgKyBtNDtcbiAgICBjb25zdCBjMTEgPSBtMSAtIG0yICsgbTMgKyBtNjtcblxuICAgIHJlc3VsdC5zZXQoMCwgMCwgYzAwKTtcbiAgICByZXN1bHQuc2V0KDAsIDEsIGMwMSk7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4zeDMob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMywgMyk7XG5cbiAgICBjb25zdCBhMDAgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBjb25zdCBhMDEgPSB0aGlzLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMDIgPSB0aGlzLmdldCgwLCAyKTtcbiAgICBjb25zdCBhMTAgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBhMTEgPSB0aGlzLmdldCgxLCAxKTtcbiAgICBjb25zdCBhMTIgPSB0aGlzLmdldCgxLCAyKTtcbiAgICBjb25zdCBhMjAgPSB0aGlzLmdldCgyLCAwKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgyLCAxKTtcbiAgICBjb25zdCBhMjIgPSB0aGlzLmdldCgyLCAyKTtcblxuICAgIGNvbnN0IGIwMCA9IG90aGVyLmdldCgwLCAwKTtcbiAgICBjb25zdCBiMDEgPSBvdGhlci5nZXQoMCwgMSk7XG4gICAgY29uc3QgYjAyID0gb3RoZXIuZ2V0KDAsIDIpO1xuICAgIGNvbnN0IGIxMCA9IG90aGVyLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMTEgPSBvdGhlci5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjEyID0gb3RoZXIuZ2V0KDEsIDIpO1xuICAgIGNvbnN0IGIyMCA9IG90aGVyLmdldCgyLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMiwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDIsIDIpO1xuXG4gICAgY29uc3QgbTEgPSAoYTAwICsgYTAxICsgYTAyIC0gYTEwIC0gYTExIC0gYTIxIC0gYTIyKSAqIGIxMTtcbiAgICBjb25zdCBtMiA9IChhMDAgLSBhMTApICogKC1iMDEgKyBiMTEpO1xuICAgIGNvbnN0IG0zID0gYTExICogKC1iMDAgKyBiMDEgKyBiMTAgLSBiMTEgLSBiMTIgLSBiMjAgKyBiMjIpO1xuICAgIGNvbnN0IG00ID0gKC1hMDAgKyBhMTAgKyBhMTEpICogKGIwMCAtIGIwMSArIGIxMSk7XG4gICAgY29uc3QgbTUgPSAoYTEwICsgYTExKSAqICgtYjAwICsgYjAxKTtcbiAgICBjb25zdCBtNiA9IGEwMCAqIGIwMDtcbiAgICBjb25zdCBtNyA9ICgtYTAwICsgYTIwICsgYTIxKSAqIChiMDAgLSBiMDIgKyBiMTIpO1xuICAgIGNvbnN0IG04ID0gKC1hMDAgKyBhMjApICogKGIwMiAtIGIxMik7XG4gICAgY29uc3QgbTkgPSAoYTIwICsgYTIxKSAqICgtYjAwICsgYjAyKTtcbiAgICBjb25zdCBtMTAgPSAoYTAwICsgYTAxICsgYTAyIC0gYTExIC0gYTEyIC0gYTIwIC0gYTIxKSAqIGIxMjtcbiAgICBjb25zdCBtMTEgPSBhMjEgKiAoLWIwMCArIGIwMiArIGIxMCAtIGIxMSAtIGIxMiAtIGIyMCArIGIyMSk7XG4gICAgY29uc3QgbTEyID0gKC1hMDIgKyBhMjEgKyBhMjIpICogKGIxMSArIGIyMCAtIGIyMSk7XG4gICAgY29uc3QgbTEzID0gKGEwMiAtIGEyMikgKiAoYjExIC0gYjIxKTtcbiAgICBjb25zdCBtMTQgPSBhMDIgKiBiMjA7XG4gICAgY29uc3QgbTE1ID0gKGEyMSArIGEyMikgKiAoLWIyMCArIGIyMSk7XG4gICAgY29uc3QgbTE2ID0gKC1hMDIgKyBhMTEgKyBhMTIpICogKGIxMiArIGIyMCAtIGIyMik7XG4gICAgY29uc3QgbTE3ID0gKGEwMiAtIGExMikgKiAoYjEyIC0gYjIyKTtcbiAgICBjb25zdCBtMTggPSAoYTExICsgYTEyKSAqICgtYjIwICsgYjIyKTtcbiAgICBjb25zdCBtMTkgPSBhMDEgKiBiMTA7XG4gICAgY29uc3QgbTIwID0gYTEyICogYjIxO1xuICAgIGNvbnN0IG0yMSA9IGExMCAqIGIwMjtcbiAgICBjb25zdCBtMjIgPSBhMjAgKiBiMDE7XG4gICAgY29uc3QgbTIzID0gYTIyICogYjIyO1xuXG4gICAgY29uc3QgYzAwID0gbTYgKyBtMTQgKyBtMTk7XG4gICAgY29uc3QgYzAxID0gbTEgKyBtNCArIG01ICsgbTYgKyBtMTIgKyBtMTQgKyBtMTU7XG4gICAgY29uc3QgYzAyID0gbTYgKyBtNyArIG05ICsgbTEwICsgbTE0ICsgbTE2ICsgbTE4O1xuICAgIGNvbnN0IGMxMCA9IG0yICsgbTMgKyBtNCArIG02ICsgbTE0ICsgbTE2ICsgbTE3O1xuICAgIGNvbnN0IGMxMSA9IG0yICsgbTQgKyBtNSArIG02ICsgbTIwO1xuICAgIGNvbnN0IGMxMiA9IG0xNCArIG0xNiArIG0xNyArIG0xOCArIG0yMTtcbiAgICBjb25zdCBjMjAgPSBtNiArIG03ICsgbTggKyBtMTEgKyBtMTIgKyBtMTMgKyBtMTQ7XG4gICAgY29uc3QgYzIxID0gbTEyICsgbTEzICsgbTE0ICsgbTE1ICsgbTIyO1xuICAgIGNvbnN0IGMyMiA9IG02ICsgbTcgKyBtOCArIG05ICsgbTIzO1xuXG4gICAgcmVzdWx0LnNldCgwLCAwLCBjMDApO1xuICAgIHJlc3VsdC5zZXQoMCwgMSwgYzAxKTtcbiAgICByZXN1bHQuc2V0KDAsIDIsIGMwMik7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXN1bHQuc2V0KDEsIDIsIGMxMik7XG4gICAgcmVzdWx0LnNldCgyLCAwLCBjMjApO1xuICAgIHJlc3VsdC5zZXQoMiwgMSwgYzIxKTtcbiAgICByZXN1bHQuc2V0KDIsIDIsIGMyMik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG1tdWxTdHJhc3Nlbih5KSB7XG4gICAgeSA9IE1hdHJpeC5jaGVja01hdHJpeCh5KTtcbiAgICBsZXQgeCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgcjEgPSB4LnJvd3M7XG4gICAgbGV0IGMxID0geC5jb2x1bW5zO1xuICAgIGxldCByMiA9IHkucm93cztcbiAgICBsZXQgYzIgPSB5LmNvbHVtbnM7XG4gICAgaWYgKGMxICE9PSByMikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE11bHRpcGx5aW5nICR7cjF9IHggJHtjMX0gYW5kICR7cjJ9IHggJHtjMn0gbWF0cml4OiBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQdXQgYSBtYXRyaXggaW50byB0aGUgdG9wIGxlZnQgb2YgYSBtYXRyaXggb2YgemVyb3MuXG4gICAgLy8gYHJvd3NgIGFuZCBgY29sc2AgYXJlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBvdXRwdXQgbWF0cml4LlxuICAgIGZ1bmN0aW9uIGVtYmVkKG1hdCwgcm93cywgY29scykge1xuICAgICAgbGV0IHIgPSBtYXQucm93cztcbiAgICAgIGxldCBjID0gbWF0LmNvbHVtbnM7XG4gICAgICBpZiAociA9PT0gcm93cyAmJiBjID09PSBjb2xzKSB7XG4gICAgICAgIHJldHVybiBtYXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzdWx0YXQgPSBBYnN0cmFjdE1hdHJpeC56ZXJvcyhyb3dzLCBjb2xzKTtcbiAgICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgobWF0LCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGF0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSBib3RoIG1hdHJpY2VzIGFyZSB0aGUgc2FtZSBzaXplLlxuICAgIC8vIFRoaXMgaXMgZXhjbHVzaXZlbHkgZm9yIHNpbXBsaWNpdHk6XG4gICAgLy8gdGhpcyBhbGdvcml0aG0gY2FuIGJlIGltcGxlbWVudGVkIHdpdGggbWF0cmljZXMgb2YgZGlmZmVyZW50IHNpemVzLlxuXG4gICAgbGV0IHIgPSBNYXRoLm1heChyMSwgcjIpO1xuICAgIGxldCBjID0gTWF0aC5tYXgoYzEsIGMyKTtcbiAgICB4ID0gZW1iZWQoeCwgciwgYyk7XG4gICAgeSA9IGVtYmVkKHksIHIsIGMpO1xuXG4gICAgLy8gT3VyIHJlY3Vyc2l2ZSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbi5cbiAgICBmdW5jdGlvbiBibG9ja011bHQoYSwgYiwgcm93cywgY29scykge1xuICAgICAgLy8gRm9yIHNtYWxsIG1hdHJpY2VzLCByZXNvcnQgdG8gbmFpdmUgbXVsdGlwbGljYXRpb24uXG4gICAgICBpZiAocm93cyA8PSA1MTIgfHwgY29scyA8PSA1MTIpIHtcbiAgICAgICAgcmV0dXJuIGEubW11bChiKTsgLy8gYSBpcyBlcXVpdmFsZW50IHRvIHRoaXNcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgZHluYW1pYyBwYWRkaW5nLlxuICAgICAgaWYgKHJvd3MgJSAyID09PSAxICYmIGNvbHMgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzICsgMSwgY29scyArIDEpO1xuICAgICAgICBiID0gZW1iZWQoYiwgcm93cyArIDEsIGNvbHMgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAocm93cyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgIH0gZWxzZSBpZiAoY29scyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGhhbGZSb3dzID0gcGFyc2VJbnQoYS5yb3dzIC8gMiwgMTApO1xuICAgICAgbGV0IGhhbGZDb2xzID0gcGFyc2VJbnQoYS5jb2x1bW5zIC8gMiwgMTApO1xuICAgICAgLy8gU3ViZGl2aWRlIGlucHV0IG1hdHJpY2VzLlxuICAgICAgbGV0IGExMSA9IGEuc3ViTWF0cml4KDAsIGhhbGZSb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcbiAgICAgIGxldCBiMTEgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7XG5cbiAgICAgIGxldCBhMTIgPSBhLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMTIgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBiLmNvbHVtbnMgLSAxKTtcblxuICAgICAgbGV0IGEyMSA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuICAgICAgbGV0IGIyMSA9IGIuc3ViTWF0cml4KGhhbGZSb3dzLCBiLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuXG4gICAgICBsZXQgYTIyID0gYS5zdWJNYXRyaXgoaGFsZlJvd3MsIGEucm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMjIgPSBiLnN1Yk1hdHJpeChoYWxmUm93cywgYi5yb3dzIC0gMSwgaGFsZkNvbHMsIGIuY29sdW1ucyAtIDEpO1xuXG4gICAgICAvLyBDb21wdXRlIGludGVybWVkaWF0ZSB2YWx1ZXMuXG4gICAgICBsZXQgbTEgPSBibG9ja011bHQoXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChhMTEsIGEyMiksXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChiMTEsIGIyMiksXG4gICAgICAgIGhhbGZSb3dzLFxuICAgICAgICBoYWxmQ29scyxcbiAgICAgICk7XG4gICAgICBsZXQgbTIgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGEyMSwgYTIyKSwgYjExLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG0zID0gYmxvY2tNdWx0KGExMSwgQWJzdHJhY3RNYXRyaXguc3ViKGIxMiwgYjIyKSwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtNCA9IGJsb2NrTXVsdChhMjIsIEFic3RyYWN0TWF0cml4LnN1YihiMjEsIGIxMSksIGhhbGZSb3dzLCBoYWxmQ29scyk7XG4gICAgICBsZXQgbTUgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGExMSwgYTEyKSwgYjIyLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG02ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTIxLCBhMTEpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjExLCBiMTIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuICAgICAgbGV0IG03ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTEyLCBhMjIpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjIxLCBiMjIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgICAgbGV0IGMxMSA9IEFic3RyYWN0TWF0cml4LmFkZChtMSwgbTQpO1xuICAgICAgYzExLnN1YihtNSk7XG4gICAgICBjMTEuYWRkKG03KTtcbiAgICAgIGxldCBjMTIgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTMsIG01KTtcbiAgICAgIGxldCBjMjEgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTIsIG00KTtcbiAgICAgIGxldCBjMjIgPSBBYnN0cmFjdE1hdHJpeC5zdWIobTEsIG0yKTtcbiAgICAgIGMyMi5hZGQobTMpO1xuICAgICAgYzIyLmFkZChtNik7XG5cbiAgICAgIC8vIENyb3Agb3V0cHV0IHRvIHRoZSBkZXNpcmVkIHNpemUgKHVuZG8gZHluYW1pYyBwYWRkaW5nKS5cbiAgICAgIGxldCByZXN1bHRhdCA9IEFic3RyYWN0TWF0cml4Lnplcm9zKDIgKiBjMTEucm93cywgMiAqIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMxMSwgMCwgMCk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMTIsIGMxMS5yb3dzLCAwKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMyMSwgMCwgYzExLmNvbHVtbnMpO1xuICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgoYzIyLCBjMTEucm93cywgYzExLmNvbHVtbnMpO1xuICAgICAgcmV0dXJuIHJlc3VsdGF0LnN1Yk1hdHJpeCgwLCByb3dzIC0gMSwgMCwgY29scyAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBibG9ja011bHQoeCwgeSwgciwgYyk7XG4gIH1cblxuICBzY2FsZVJvd3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhpKTtcbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByZXNjYWxlKHJvdywgeyBtaW4sIG1heCwgb3V0cHV0OiByb3cgfSk7XG4gICAgICB9XG4gICAgICBuZXdNYXRyaXguc2V0Um93KGksIHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzY2FsZUNvbHVtbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbihpKTtcbiAgICAgIGlmIChjb2x1bW4ubGVuZ3RoKSB7XG4gICAgICAgIHJlc2NhbGUoY29sdW1uLCB7XG4gICAgICAgICAgbWluOiBtaW4sXG4gICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgICAgb3V0cHV0OiBjb2x1bW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbmV3TWF0cml4LnNldENvbHVtbihpLCBjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgZmxpcFJvd3MoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5jZWlsKHRoaXMuY29sdW1ucyAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWlkZGxlOyBqKyspIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIGxldCBsYXN0ID0gdGhpcy5nZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBsYXN0KTtcbiAgICAgICAgdGhpcy5zZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGosIGZpcnN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmbGlwQ29sdW1ucygpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmNlaWwodGhpcy5yb3dzIC8gMik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaWRkbGU7IGkrKykge1xuICAgICAgICBsZXQgZmlyc3QgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgbGV0IGxhc3QgPSB0aGlzLmdldCh0aGlzLnJvd3MgLSAxIC0gaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIGxhc3QpO1xuICAgICAgICB0aGlzLnNldCh0aGlzLnJvd3MgLSAxIC0gaSwgaiwgZmlyc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGtyb25lY2tlclByb2R1Y3Qob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG5cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IHRoaXMuY29sdW1ucztcbiAgICBsZXQgcCA9IG90aGVyLnJvd3M7XG4gICAgbGV0IHEgPSBvdGhlci5jb2x1bW5zO1xuXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgobSAqIHAsIG4gKiBxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwOyBrKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IHE7IGwrKykge1xuICAgICAgICAgICAgcmVzdWx0LnNldChwICogaSArIGssIHEgKiBqICsgbCwgdGhpcy5nZXQoaSwgaikgKiBvdGhlci5nZXQoaywgbCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAga3JvbmVja2VyU3VtKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGlmICghdGhpcy5pc1NxdWFyZSgpIHx8ICFvdGhlci5pc1NxdWFyZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tyb25lY2tlciBTdW0gbmVlZHMgdHdvIFNxdWFyZSBNYXRyaWNlcycpO1xuICAgIH1cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IG90aGVyLnJvd3M7XG4gICAgbGV0IEF4SSA9IHRoaXMua3JvbmVja2VyUHJvZHVjdChNYXRyaXguZXllKG4sIG4pKTtcbiAgICBsZXQgSXhCID0gTWF0cml4LmV5ZShtLCBtKS5rcm9uZWNrZXJQcm9kdWN0KG90aGVyKTtcbiAgICByZXR1cm4gQXhJLmFkZChJeEIpO1xuICB9XG5cbiAgdHJhbnNwb3NlKCkge1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHRoaXMuY29sdW1ucywgdGhpcy5yb3dzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHJlc3VsdC5zZXQoaiwgaSwgdGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc29ydFJvd3MoY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZU51bWJlcnMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICB0aGlzLnNldFJvdyhpLCB0aGlzLmdldFJvdyhpKS5zb3J0KGNvbXBhcmVGdW5jdGlvbikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNvcnRDb2x1bW5zKGNvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVOdW1iZXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXRDb2x1bW4oaSwgdGhpcy5nZXRDb2x1bW4oaSkuc29ydChjb21wYXJlRnVuY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJNYXRyaXgoc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoXG4gICAgICBlbmRSb3cgLSBzdGFydFJvdyArIDEsXG4gICAgICBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEsXG4gICAgKTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBzdGFydENvbHVtbjsgaiA8PSBlbmRDb2x1bW47IGorKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KGkgLSBzdGFydFJvdywgaiAtIHN0YXJ0Q29sdW1uLCB0aGlzLmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdWJNYXRyaXhSb3coaW5kaWNlcywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGlmIChzdGFydENvbHVtbiA9PT0gdW5kZWZpbmVkKSBzdGFydENvbHVtbiA9IDA7XG4gICAgaWYgKGVuZENvbHVtbiA9PT0gdW5kZWZpbmVkKSBlbmRDb2x1bW4gPSB0aGlzLmNvbHVtbnMgLSAxO1xuICAgIGlmIChcbiAgICAgIHN0YXJ0Q29sdW1uID4gZW5kQ29sdW1uIHx8XG4gICAgICBzdGFydENvbHVtbiA8IDAgfHxcbiAgICAgIHN0YXJ0Q29sdW1uID49IHRoaXMuY29sdW1ucyB8fFxuICAgICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgICAgZW5kQ29sdW1uID49IHRoaXMuY29sdW1uc1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0FyZ3VtZW50IG91dCBvZiByYW5nZScpO1xuICAgIH1cblxuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KGluZGljZXMubGVuZ3RoLCBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sdW1uOyBqIDw9IGVuZENvbHVtbjsgaisrKSB7XG4gICAgICAgIGlmIChpbmRpY2VzW2ldIDwgMCB8fCBpbmRpY2VzW2ldID49IHRoaXMucm93cykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSb3cgaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGljZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TWF0cml4LnNldChpLCBqIC0gc3RhcnRDb2x1bW4sIHRoaXMuZ2V0KGluZGljZXNbaV0sIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHN1Yk1hdHJpeENvbHVtbihpbmRpY2VzLCBzdGFydFJvdywgZW5kUm93KSB7XG4gICAgaWYgKHN0YXJ0Um93ID09PSB1bmRlZmluZWQpIHN0YXJ0Um93ID0gMDtcbiAgICBpZiAoZW5kUm93ID09PSB1bmRlZmluZWQpIGVuZFJvdyA9IHRoaXMucm93cyAtIDE7XG4gICAgaWYgKFxuICAgICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgICAgc3RhcnRSb3cgPj0gdGhpcy5yb3dzIHx8XG4gICAgICBlbmRSb3cgPCAwIHx8XG4gICAgICBlbmRSb3cgPj0gdGhpcy5yb3dzXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXJndW1lbnQgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoZW5kUm93IC0gc3RhcnRSb3cgKyAxLCBpbmRpY2VzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gc3RhcnRSb3c7IGogPD0gZW5kUm93OyBqKyspIHtcbiAgICAgICAgaWYgKGluZGljZXNbaV0gPCAwIHx8IGluZGljZXNbaV0gPj0gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kaWNlc1tpXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdNYXRyaXguc2V0KGogLSBzdGFydFJvdywgaSwgdGhpcy5nZXQoaiwgaW5kaWNlc1tpXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc2V0U3ViTWF0cml4KG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBsZXQgZW5kUm93ID0gc3RhcnRSb3cgKyBtYXRyaXgucm93cyAtIDE7XG4gICAgbGV0IGVuZENvbHVtbiA9IHN0YXJ0Q29sdW1uICsgbWF0cml4LmNvbHVtbnMgLSAxO1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoc3RhcnRSb3cgKyBpLCBzdGFydENvbHVtbiArIGosIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNlbGVjdGlvbihyb3dJbmRpY2VzLCBjb2x1bW5JbmRpY2VzKSB7XG4gICAgY2hlY2tSb3dJbmRpY2VzKHRoaXMsIHJvd0luZGljZXMpO1xuICAgIGNoZWNrQ29sdW1uSW5kaWNlcyh0aGlzLCBjb2x1bW5JbmRpY2VzKTtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChyb3dJbmRpY2VzLmxlbmd0aCwgY29sdW1uSW5kaWNlcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93SW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHJvd0luZGV4ID0gcm93SW5kaWNlc1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uSW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5JbmRpY2VzW2pdO1xuICAgICAgICBuZXdNYXRyaXguc2V0KGksIGosIHRoaXMuZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgdHJhY2UoKSB7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBsZXQgdHJhY2UgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIHRyYWNlICs9IHRoaXMuZ2V0KGksIGkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2U7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KHJvdywgY29sdW1uLCB0aGlzLmdldChyb3csIGNvbHVtbikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3VtKGJ5KSB7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Q29sdW1uKHRoaXMpO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBzdW1BbGwodGhpcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHByb2R1Y3QoYnkpIHtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RCeUNvbHVtbih0aGlzKTtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEFsbCh0aGlzKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWVhbihieSkge1xuICAgIGNvbnN0IHN1bSA9IHRoaXMuc3VtKGJ5KTtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5jb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlICdjb2x1bW4nOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5yb3dzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHN1bSAvIHRoaXMuc2l6ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgdmFyaWFuY2UoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHVuYmlhc2VkID0gdHJ1ZSwgbWVhbiA9IHRoaXMubWVhbihieSkgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiB1bmJpYXNlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmJpYXNlZCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgIH1cbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGlmICghaXNBbnlBcnJheShtZWFuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUJ5Um93KHRoaXMsIHVuYmlhc2VkLCBtZWFuKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KG1lYW4pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVhbiBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhbmNlQnlDb2x1bW4odGhpcywgdW5iaWFzZWQsIG1lYW4pO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgaWYgKHR5cGVvZiBtZWFuICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUFsbCh0aGlzLCB1bmJpYXNlZCwgbWVhbik7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YW5kYXJkRGV2aWF0aW9uKGJ5LCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBieSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBieTtcbiAgICAgIGJ5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB2YXJpYW5jZSA9IHRoaXMudmFyaWFuY2UoYnksIG9wdGlvbnMpO1xuICAgIGlmIChieSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YXJpYW5jZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXJpYW5jZVtpXSA9IE1hdGguc3FydCh2YXJpYW5jZVtpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFyaWFuY2U7XG4gICAgfVxuICB9XG5cbiAgY2VudGVyKGJ5LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGJ5O1xuICAgICAgYnkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBjZW50ZXIgPSB0aGlzLm1lYW4oYnkpIH0gPSBvcHRpb25zO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KGNlbnRlcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckJ5Um93KHRoaXMsIGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBpZiAoIWlzQW55QXJyYXkoY2VudGVyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NlbnRlciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VudGVyQnlDb2x1bW4odGhpcywgY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBpZiAodHlwZW9mIGNlbnRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckFsbCh0aGlzLCBjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgc2NhbGUoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBsZXQgc2NhbGUgPSBvcHRpb25zLnNjYWxlO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlSb3codGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQW55QXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlSb3codGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlDb2x1bW4odGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQW55QXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlDb2x1bW4odGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgdW5kZWZpbmVkOiB7XG4gICAgICAgIGlmIChzY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NhbGUgPSBnZXRTY2FsZUFsbCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2NhbGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQWxsKHRoaXMsIHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICB9XG59XG5cbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5rbGFzcyA9ICdNYXRyaXgnO1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnKSB7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZVtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9XG4gICAgaW5zcGVjdE1hdHJpeDtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU51bWJlcnMoYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlPZk51bWJlcnMoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LmV2ZXJ5KChlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJztcbiAgfSk7XG59XG5cbi8vIFN5bm9ueW1zXG5BYnN0cmFjdE1hdHJpeC5yYW5kb20gPSBBYnN0cmFjdE1hdHJpeC5yYW5kO1xuQWJzdHJhY3RNYXRyaXgucmFuZG9tSW50ID0gQWJzdHJhY3RNYXRyaXgucmFuZEludDtcbkFic3RyYWN0TWF0cml4LmRpYWdvbmFsID0gQWJzdHJhY3RNYXRyaXguZGlhZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnb25hbCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnO1xuQWJzdHJhY3RNYXRyaXguaWRlbnRpdHkgPSBBYnN0cmFjdE1hdHJpeC5leWU7XG5BYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubmVnYXRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm5lZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50ZW5zb3JQcm9kdWN0ID1cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmtyb25lY2tlclByb2R1Y3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFic3RyYWN0TWF0cml4IHtcbiAgY29uc3RydWN0b3IoblJvd3MsIG5Db2x1bW5zKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoTWF0cml4LmlzTWF0cml4KG5Sb3dzKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuICAgICAgcmV0dXJuIG5Sb3dzLmNsb25lKCk7XG4gICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Sb3dzKSAmJiBuUm93cyA+PSAwKSB7XG4gICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgbWF0cml4XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Db2x1bW5zKSAmJiBuQ29sdW1ucyA+PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKG5ldyBGbG9hdDY0QXJyYXkobkNvbHVtbnMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbkNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQW55QXJyYXkoblJvd3MpKSB7XG4gICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSB0aGUgMkQgYXJyYXlcbiAgICAgIGNvbnN0IGFycmF5RGF0YSA9IG5Sb3dzO1xuICAgICAgblJvd3MgPSBhcnJheURhdGEubGVuZ3RoO1xuICAgICAgbkNvbHVtbnMgPSBuUm93cyA/IGFycmF5RGF0YVswXS5sZW5ndGggOiAwO1xuICAgICAgaWYgKHR5cGVvZiBuQ29sdW1ucyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnRGF0YSBtdXN0IGJlIGEgMkQgYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICBpZiAoYXJyYXlEYXRhW2ldLmxlbmd0aCAhPT0gbkNvbHVtbnMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5jb25zaXN0ZW50IGFycmF5IGRpbWVuc2lvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXJyYXlPZk51bWJlcnMoYXJyYXlEYXRhW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGRhdGEgY29udGFpbnMgbm9uLW51bWVyaWMgdmFsdWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnB1c2goRmxvYXQ2NEFycmF5LmZyb20oYXJyYXlEYXRhW2ldKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIGFuIGFycmF5JyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm93cyA9IG5Sb3dzO1xuICAgIHRoaXMuY29sdW1ucyA9IG5Db2x1bW5zO1xuICB9XG5cbiAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgfVxuXG4gIHJlbW92ZVJvdyhpbmRleCkge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpO1xuICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucm93cyAtPSAxO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkUm93KGluZGV4LCBhcnJheSkge1xuICAgIGlmIChhcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcnJheSA9IGluZGV4O1xuICAgICAgaW5kZXggPSB0aGlzLnJvd3M7XG4gICAgfVxuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgsIHRydWUpO1xuICAgIGFycmF5ID0gRmxvYXQ2NEFycmF5LmZyb20oY2hlY2tSb3dWZWN0b3IodGhpcywgYXJyYXkpKTtcbiAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4LCAwLCBhcnJheSk7XG4gICAgdGhpcy5yb3dzICs9IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW1vdmVDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucyAtIDEpO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleDsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSBpbmRleCArIDE7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBuZXdSb3dbaiAtIDFdID0gdGhpcy5kYXRhW2ldW2pdO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhW2ldID0gbmV3Um93O1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnMgLT0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZENvbHVtbihpbmRleCwgYXJyYXkpIHtcbiAgICBpZiAodHlwZW9mIGFycmF5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgYXJyYXkgPSBpbmRleDtcbiAgICAgIGluZGV4ID0gdGhpcy5jb2x1bW5zO1xuICAgIH1cbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4LCB0cnVlKTtcbiAgICBhcnJheSA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIGFycmF5KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucyArIDEpO1xuICAgICAgbGV0IGogPSAwO1xuICAgICAgZm9yICg7IGogPCBpbmRleDsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIG5ld1Jvd1tqKytdID0gYXJyYXlbaV07XG4gICAgICBmb3IgKDsgaiA8IHRoaXMuY29sdW1ucyArIDE7IGorKykge1xuICAgICAgICBuZXdSb3dbal0gPSB0aGlzLmRhdGFbaV1baiAtIDFdO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhW2ldID0gbmV3Um93O1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnMgKz0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5pbnN0YWxsTWF0aE9wZXJhdGlvbnMoQWJzdHJhY3RNYXRyaXgsIE1hdHJpeCk7XG4iLCJpbXBvcnQgeyBuZXdBcnJheSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1CeVJvdyhtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5yb3dzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1baV0gKz0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bUJ5Q29sdW1uKG1hdHJpeCkge1xuICBsZXQgc3VtID0gbmV3QXJyYXkobWF0cml4LmNvbHVtbnMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHtcbiAgICAgIHN1bVtqXSArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtQWxsKG1hdHJpeCkge1xuICBsZXQgdiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgdiArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RCeVJvdyhtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5yb3dzLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1baV0gKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RCeUNvbHVtbihtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5jb2x1bW5zLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1bal0gKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RBbGwobWF0cml4KSB7XG4gIGxldCB2ID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICB2ICo9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFuY2VCeVJvdyhtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCB2YXJpYW5jZSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgbGV0IHN1bTEgPSAwO1xuICAgIGxldCBzdW0yID0gMDtcbiAgICBsZXQgeCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgIHggPSBtYXRyaXguZ2V0KGksIGopIC0gbWVhbltpXTtcbiAgICAgIHN1bTEgKz0geDtcbiAgICAgIHN1bTIgKz0geCAqIHg7XG4gICAgfVxuICAgIGlmICh1bmJpYXNlZCkge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyBjb2xzKSAvIChjb2xzIC0gMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXJpYW5jZS5wdXNoKChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIGNvbHMpIC8gY29scyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YXJpYW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhbmNlQnlDb2x1bW4obWF0cml4LCB1bmJpYXNlZCwgbWVhbikge1xuICBjb25zdCByb3dzID0gbWF0cml4LnJvd3M7XG4gIGNvbnN0IGNvbHMgPSBtYXRyaXguY29sdW1ucztcbiAgY29uc3QgdmFyaWFuY2UgPSBbXTtcblxuICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgIGxldCBzdW0xID0gMDtcbiAgICBsZXQgc3VtMiA9IDA7XG4gICAgbGV0IHggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICB4ID0gbWF0cml4LmdldChpLCBqKSAtIG1lYW5bal07XG4gICAgICBzdW0xICs9IHg7XG4gICAgICBzdW0yICs9IHggKiB4O1xuICAgIH1cbiAgICBpZiAodW5iaWFzZWQpIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gcm93cykgLyAocm93cyAtIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyByb3dzKSAvIHJvd3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFyaWFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW5jZUFsbChtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCBzaXplID0gcm93cyAqIGNvbHM7XG5cbiAgbGV0IHN1bTEgPSAwO1xuICBsZXQgc3VtMiA9IDA7XG4gIGxldCB4ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgeCA9IG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuO1xuICAgICAgc3VtMSArPSB4O1xuICAgICAgc3VtMiArPSB4ICogeDtcbiAgICB9XG4gIH1cbiAgaWYgKHVuYmlhc2VkKSB7XG4gICAgcmV0dXJuIChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHNpemUpIC8gKHNpemUgLSAxKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gc2l6ZSkgLyBzaXplO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZW50ZXJCeVJvdyhtYXRyaXgsIG1lYW4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlckJ5Q29sdW1uKG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW5bal0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VudGVyQWxsKG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW4pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVCeVJvdyhtYXRyaXgpIHtcbiAgY29uc3Qgc2NhbGUgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyAobWF0cml4LmNvbHVtbnMgLSAxKTtcbiAgICB9XG4gICAgc2NhbGUucHVzaChNYXRoLnNxcnQoc3VtKSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVCeVJvdyhtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGVbaV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVCeUNvbHVtbihtYXRyaXgpIHtcbiAgY29uc3Qgc2NhbGUgPSBbXTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyAobWF0cml4LnJvd3MgLSAxKTtcbiAgICB9XG4gICAgc2NhbGUucHVzaChNYXRoLnNxcnQoc3VtKSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVCeUNvbHVtbihtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGVbal0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVBbGwobWF0cml4KSB7XG4gIGNvbnN0IGRpdmlkZXIgPSBtYXRyaXguc2l6ZSAtIDE7XG4gIGxldCBzdW0gPSAwO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICAgIHN1bSArPSBNYXRoLnBvdyhtYXRyaXguZ2V0KGksIGopLCAyKSAvIGRpdmlkZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQWxsKG1hdHJpeCwgc2NhbGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLyBzY2FsZSk7XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1hdGhPcGVyYXRpb25zKEFic3RyYWN0TWF0cml4LCBNYXRyaXgpIHtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5hZGRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5hZGRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkUyA9IGZ1bmN0aW9uIGFkZFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkTSA9IGZ1bmN0aW9uIGFkZE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hZGQgPSBmdW5jdGlvbiBhZGQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFkZCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1Yih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5zdWJTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5zdWJNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViUyA9IGZ1bmN0aW9uIHN1YlModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViTSA9IGZ1bmN0aW9uIHN1Yk0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zdWIgPSBmdW5jdGlvbiBzdWIobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnN1Yih2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWI7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdFMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViUztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YnRyYWN0TSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJNO1xuICBBYnN0cmFjdE1hdHJpeC5zdWJ0cmFjdCA9IEFic3RyYWN0TWF0cml4LnN1YjtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLm11bFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm11bE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxTID0gZnVuY3Rpb24gbXVsUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgKiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxNID0gZnVuY3Rpb24gbXVsTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm11bCA9IGZ1bmN0aW9uIG11bChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubXVsKHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5ID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5UyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsdGlwbHlNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bE07XG4gIEFic3RyYWN0TWF0cml4Lm11bHRpcGx5ID0gQWJzdHJhY3RNYXRyaXgubXVsO1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXYgPSBmdW5jdGlvbiBkaXYodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuZGl2Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuZGl2TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdlMgPSBmdW5jdGlvbiBkaXZTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdk0gPSBmdW5jdGlvbiBkaXZNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLyBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZGl2ID0gZnVuY3Rpb24gZGl2KG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5kaXYodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2aWRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdjtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZVMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2UztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZU0gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2TTtcbiAgQWJzdHJhY3RNYXRyaXguZGl2aWRlID0gQWJzdHJhY3RNYXRyaXguZGl2O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMubW9kUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMubW9kTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZFMgPSBmdW5jdGlvbiBtb2RTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAlIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZE0gPSBmdW5jdGlvbiBtb2RNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJSBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubW9kID0gZnVuY3Rpb24gbW9kKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5tb2QodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1cyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2Q7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2R1bHVzUyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1c00gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kTTtcbiAgQWJzdHJhY3RNYXRyaXgubW9kdWx1cyA9IEFic3RyYWN0TWF0cml4Lm1vZDtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gYW5kKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLmFuZFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmFuZE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmRTID0gZnVuY3Rpb24gYW5kUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmRNID0gZnVuY3Rpb24gYW5kTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICYgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFuZCA9IGZ1bmN0aW9uIGFuZChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYW5kKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiBvcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5vclModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm9yTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm9yUyA9IGZ1bmN0aW9uIG9yUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgfCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5vck0gPSBmdW5jdGlvbiBvck0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSB8IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5vciA9IGZ1bmN0aW9uIG9yKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5vcih2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy54b3JTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy54b3JNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yUyA9IGZ1bmN0aW9uIHhvclModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIF4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yTSA9IGZ1bmN0aW9uIHhvck0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSBeIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC54b3IgPSBmdW5jdGlvbiB4b3IobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lnhvcih2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdCA9IGZ1bmN0aW9uIGxlZnRTaGlmdCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5sZWZ0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5sZWZ0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubGVmdFNoaWZ0UyA9IGZ1bmN0aW9uIGxlZnRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIDw8IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdE0gPSBmdW5jdGlvbiBsZWZ0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPDwgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxlZnRTaGlmdCA9IGZ1bmN0aW9uIGxlZnRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubGVmdFNoaWZ0KHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFMgPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0gPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0ID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnQgPSBmdW5jdGlvbiByaWdodFNoaWZ0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnJpZ2h0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5yaWdodFNoaWZ0TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRTID0gZnVuY3Rpb24gcmlnaHRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+PiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0TSA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4+IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5yaWdodFNoaWZ0ID0gZnVuY3Rpb24gcmlnaHRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucmlnaHRTaGlmdCh2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnQgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnplcm9GaWxsUmlnaHRTaGlmdFMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdFM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRNO1xuICBBYnN0cmFjdE1hdHJpeC56ZXJvRmlsbFJpZ2h0U2hpZnQgPSBBYnN0cmFjdE1hdHJpeC5yaWdodFNoaWZ0O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5ub3QgPSBmdW5jdGlvbiBub3QoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB+KHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm5vdCA9IGZ1bmN0aW9uIG5vdChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5ub3QoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWJzID0gZnVuY3Rpb24gYWJzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hYnModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWJzID0gZnVuY3Rpb24gYWJzKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFicygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hY29zID0gZnVuY3Rpb24gYWNvcygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYWNvcyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hY29zID0gZnVuY3Rpb24gYWNvcyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hY29zKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFjb3NoID0gZnVuY3Rpb24gYWNvc2goKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFjb3NoKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFjb3NoID0gZnVuY3Rpb24gYWNvc2gobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYWNvc2goKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXNpbiA9IGZ1bmN0aW9uIGFzaW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFzaW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXNpbiA9IGZ1bmN0aW9uIGFzaW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYXNpbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hc2luaCA9IGZ1bmN0aW9uIGFzaW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hc2luaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hc2luaCA9IGZ1bmN0aW9uIGFzaW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFzaW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmF0YW4gPSBmdW5jdGlvbiBhdGFuKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hdGFuKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmF0YW4gPSBmdW5jdGlvbiBhdGFuKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmF0YW4oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXRhbmggPSBmdW5jdGlvbiBhdGFuaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXRhbmgodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXRhbmggPSBmdW5jdGlvbiBhdGFuaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hdGFuaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jYnJ0ID0gZnVuY3Rpb24gY2JydCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2JydCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jYnJ0ID0gZnVuY3Rpb24gY2JydChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jYnJ0KCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNlaWwgPSBmdW5jdGlvbiBjZWlsKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jZWlsKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNlaWwgPSBmdW5jdGlvbiBjZWlsKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNlaWwoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY2x6MzIgPSBmdW5jdGlvbiBjbHozMigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2x6MzIodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY2x6MzIgPSBmdW5jdGlvbiBjbHozMihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jbHozMigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jb3MgPSBmdW5jdGlvbiBjb3MoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNvcyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jb3MgPSBmdW5jdGlvbiBjb3MobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY29zKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNvc2ggPSBmdW5jdGlvbiBjb3NoKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jb3NoKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNvc2ggPSBmdW5jdGlvbiBjb3NoKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNvc2goKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZXhwID0gZnVuY3Rpb24gZXhwKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5leHAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZXhwID0gZnVuY3Rpb24gZXhwKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmV4cCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5leHBtMSA9IGZ1bmN0aW9uIGV4cG0xKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5leHBtMSh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5leHBtMSA9IGZ1bmN0aW9uIGV4cG0xKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmV4cG0xKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmZsb29yID0gZnVuY3Rpb24gZmxvb3IoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmZsb29yKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmZsb29yID0gZnVuY3Rpb24gZmxvb3IobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZmxvb3IoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZnJvdW5kID0gZnVuY3Rpb24gZnJvdW5kKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5mcm91bmQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZnJvdW5kID0gZnVuY3Rpb24gZnJvdW5kKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmZyb3VuZCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbiBsb2coKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cgPSBmdW5jdGlvbiBsb2cobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxvZzFwID0gZnVuY3Rpb24gbG9nMXAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZzFwKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxvZzFwID0gZnVuY3Rpb24gbG9nMXAobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nMXAoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nMTAgPSBmdW5jdGlvbiBsb2cxMCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMTAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nMTAgPSBmdW5jdGlvbiBsb2cxMChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cxMCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cyID0gZnVuY3Rpb24gbG9nMigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cyID0gZnVuY3Rpb24gbG9nMihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cyKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJvdW5kID0gZnVuY3Rpb24gcm91bmQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnJvdW5kKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnJvdW5kID0gZnVuY3Rpb24gcm91bmQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucm91bmQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpZ24odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2lnbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaW4gPSBmdW5jdGlvbiBzaW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaW4gPSBmdW5jdGlvbiBzaW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2luKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpbmggPSBmdW5jdGlvbiBzaW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zaW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNpbmggPSBmdW5jdGlvbiBzaW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNxcnQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc3FydCA9IGZ1bmN0aW9uIHNxcnQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc3FydCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50YW4gPSBmdW5jdGlvbiB0YW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnRhbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC50YW4gPSBmdW5jdGlvbiB0YW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgudGFuKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnRhbmggPSBmdW5jdGlvbiB0YW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC50YW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnRhbmggPSBmdW5jdGlvbiB0YW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnRhbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUudHJ1bmMgPSBmdW5jdGlvbiB0cnVuYygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgudHJ1bmModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgudHJ1bmMgPSBmdW5jdGlvbiB0cnVuYyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC50cnVuYygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnBvdyA9IGZ1bmN0aW9uIHBvdyhtYXRyaXgsIGFyZzApIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5wb3coYXJnMCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5wb3dTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5wb3dNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93UyA9IGZ1bmN0aW9uIHBvd1ModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgucG93KHRoaXMuZ2V0KGksIGopLCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93TSA9IGZ1bmN0aW9uIHBvd00obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnBvdyh0aGlzLmdldChpLCBqKSwgbWF0cml4LmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cbiIsImltcG9ydCB7IEFic3RyYWN0TWF0cml4IH0gZnJvbSAnLi4vbWF0cml4JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV3JhcHBlck1hdHJpeDJEIGV4dGVuZHMgQWJzdHJhY3RNYXRyaXgge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuY29sdW1ucyA9IGRhdGFbMF0ubGVuZ3RoO1xuICB9XG5cbiAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgfVxufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEx1RGVjb21wb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChtYXRyaXgpO1xuXG4gICAgbGV0IGx1ID0gbWF0cml4LmNsb25lKCk7XG4gICAgbGV0IHJvd3MgPSBsdS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbHUuY29sdW1ucztcbiAgICBsZXQgcGl2b3RWZWN0b3IgPSBuZXcgRmxvYXQ2NEFycmF5KHJvd3MpO1xuICAgIGxldCBwaXZvdFNpZ24gPSAxO1xuICAgIGxldCBpLCBqLCBrLCBwLCBzLCB0LCB2O1xuICAgIGxldCBMVWNvbGosIGttYXg7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBwaXZvdFZlY3RvcltpXSA9IGk7XG4gICAgfVxuXG4gICAgTFVjb2xqID0gbmV3IEZsb2F0NjRBcnJheShyb3dzKTtcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgTFVjb2xqW2ldID0gbHUuZ2V0KGksIGopO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGttYXggPSBNYXRoLm1pbihpLCBqKTtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBrbWF4OyBrKyspIHtcbiAgICAgICAgICBzICs9IGx1LmdldChpLCBrKSAqIExVY29saltrXTtcbiAgICAgICAgfVxuICAgICAgICBMVWNvbGpbaV0gLT0gcztcbiAgICAgICAgbHUuc2V0KGksIGosIExVY29saltpXSk7XG4gICAgICB9XG5cbiAgICAgIHAgPSBqO1xuICAgICAgZm9yIChpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKExVY29saltpXSkgPiBNYXRoLmFicyhMVWNvbGpbcF0pKSB7XG4gICAgICAgICAgcCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHAgIT09IGopIHtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGNvbHVtbnM7IGsrKykge1xuICAgICAgICAgIHQgPSBsdS5nZXQocCwgayk7XG4gICAgICAgICAgbHUuc2V0KHAsIGssIGx1LmdldChqLCBrKSk7XG4gICAgICAgICAgbHUuc2V0KGosIGssIHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdiA9IHBpdm90VmVjdG9yW3BdO1xuICAgICAgICBwaXZvdFZlY3RvcltwXSA9IHBpdm90VmVjdG9yW2pdO1xuICAgICAgICBwaXZvdFZlY3RvcltqXSA9IHY7XG5cbiAgICAgICAgcGl2b3RTaWduID0gLXBpdm90U2lnbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGogPCByb3dzICYmIGx1LmdldChqLCBqKSAhPT0gMCkge1xuICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIGx1LnNldChpLCBqLCBsdS5nZXQoaSwgaikgLyBsdS5nZXQoaiwgaikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5MVSA9IGx1O1xuICAgIHRoaXMucGl2b3RWZWN0b3IgPSBwaXZvdFZlY3RvcjtcbiAgICB0aGlzLnBpdm90U2lnbiA9IHBpdm90U2lnbjtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLkxVO1xuICAgIGxldCBjb2wgPSBkYXRhLmNvbHVtbnM7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2w7IGorKykge1xuICAgICAgaWYgKGRhdGEuZ2V0KGosIGopID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzb2x2ZSh2YWx1ZSkge1xuICAgIHZhbHVlID0gTWF0cml4LmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGxldCBsdSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBsdS5yb3dzO1xuXG4gICAgaWYgKHJvd3MgIT09IHZhbHVlLnJvd3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1Npbmd1bGFyKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTFUgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgfVxuXG4gICAgbGV0IGNvdW50ID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgWCA9IHZhbHVlLnN1Yk1hdHJpeFJvdyh0aGlzLnBpdm90VmVjdG9yLCAwLCBjb3VudCAtIDEpO1xuICAgIGxldCBjb2x1bW5zID0gbHUuY29sdW1ucztcbiAgICBsZXQgaSwgaiwgaztcblxuICAgIGZvciAoayA9IDA7IGsgPCBjb2x1bW5zOyBrKyspIHtcbiAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgY29sdW1uczsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgLSBYLmdldChrLCBqKSAqIGx1LmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gY29sdW1ucyAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBYLnNldChrLCBqLCBYLmdldChrLCBqKSAvIGx1LmdldChrLCBrKSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgLSBYLmdldChrLCBqKSAqIGx1LmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgZGV0ZXJtaW5hbnQoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLkxVO1xuICAgIGlmICghZGF0YS5pc1NxdWFyZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZScpO1xuICAgIH1cbiAgICBsZXQgZGV0ZXJtaW5hbnQgPSB0aGlzLnBpdm90U2lnbjtcbiAgICBsZXQgY29sID0gZGF0YS5jb2x1bW5zO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sOyBqKyspIHtcbiAgICAgIGRldGVybWluYW50ICo9IGRhdGEuZ2V0KGosIGopO1xuICAgIH1cbiAgICByZXR1cm4gZGV0ZXJtaW5hbnQ7XG4gIH1cblxuICBnZXQgbG93ZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgcm93cyA9IGRhdGEucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGRhdGEuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChpID4gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIGRhdGEuZ2V0KGksIGopKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgcm93cyA9IGRhdGEucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGRhdGEuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChpIDw9IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBkYXRhLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgcGl2b3RQZXJtdXRhdGlvblZlY3RvcigpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBpdm90VmVjdG9yKTtcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGh5cG90ZW51c2UoYSwgYikge1xuICBsZXQgciA9IDA7XG4gIGlmIChNYXRoLmFicyhhKSA+IE1hdGguYWJzKGIpKSB7XG4gICAgciA9IGIgLyBhO1xuICAgIHJldHVybiBNYXRoLmFicyhhKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIGlmIChiICE9PSAwKSB7XG4gICAgciA9IGEgLyBiO1xuICAgIHJldHVybiBNYXRoLmFicyhiKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIHJldHVybiAwO1xufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmltcG9ydCB7IGh5cG90ZW51c2UgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRckRlY29tcG9zaXRpb24ge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgIHZhbHVlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGxldCBxciA9IHZhbHVlLmNsb25lKCk7XG4gICAgbGV0IG0gPSB2YWx1ZS5yb3dzO1xuICAgIGxldCBuID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgcmRpYWcgPSBuZXcgRmxvYXQ2NEFycmF5KG4pO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgbGV0IG5ybSA9IDA7XG4gICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIG5ybSA9IGh5cG90ZW51c2UobnJtLCBxci5nZXQoaSwgaykpO1xuICAgICAgfVxuICAgICAgaWYgKG5ybSAhPT0gMCkge1xuICAgICAgICBpZiAocXIuZ2V0KGssIGspIDwgMCkge1xuICAgICAgICAgIG5ybSA9IC1ucm07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIHFyLnNldChpLCBrLCBxci5nZXQoaSwgaykgLyBucm0pO1xuICAgICAgICB9XG4gICAgICAgIHFyLnNldChrLCBrLCBxci5nZXQoaywgaykgKyAxKTtcbiAgICAgICAgZm9yIChqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICBzID0gMDtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIHFyLmdldChpLCBqKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9IC1zIC8gcXIuZ2V0KGssIGspO1xuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIHFyLnNldChpLCBqLCBxci5nZXQoaSwgaikgKyBzICogcXIuZ2V0KGksIGspKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJkaWFnW2tdID0gLW5ybTtcbiAgICB9XG5cbiAgICB0aGlzLlFSID0gcXI7XG4gICAgdGhpcy5SZGlhZyA9IHJkaWFnO1xuICB9XG5cbiAgc29sdmUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IE1hdHJpeC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgcXIgPSB0aGlzLlFSO1xuICAgIGxldCBtID0gcXIucm93cztcblxuICAgIGlmICh2YWx1ZS5yb3dzICE9PSBtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCByb3cgZGltZW5zaW9ucyBtdXN0IGFncmVlJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0Z1bGxSYW5rKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IGlzIHJhbmsgZGVmaWNpZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGNvdW50ID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgWCA9IHZhbHVlLmNsb25lKCk7XG4gICAgbGV0IG4gPSBxci5jb2x1bW5zO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIFguZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcbiAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBYLnNldChrLCBqLCBYLmdldChrLCBqKSAvIHRoaXMuUmRpYWdba10pO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFguc3ViTWF0cml4KDAsIG4gLSAxLCAwLCBjb3VudCAtIDEpO1xuICB9XG5cbiAgaXNGdWxsUmFuaygpIHtcbiAgICBsZXQgY29sdW1ucyA9IHRoaXMuUVIuY29sdW1ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnM7IGkrKykge1xuICAgICAgaWYgKHRoaXMuUmRpYWdbaV0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCB1cHBlclRyaWFuZ3VsYXJNYXRyaXgoKSB7XG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgbiA9IHFyLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KG4sIG4pO1xuICAgIGxldCBpLCBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGkgPCBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgcXIuZ2V0KGksIGopKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgdGhpcy5SZGlhZ1tpXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgb3J0aG9nb25hbE1hdHJpeCgpIHtcbiAgICBsZXQgcXIgPSB0aGlzLlFSO1xuICAgIGxldCByb3dzID0gcXIucm93cztcbiAgICBsZXQgY29sdW1ucyA9IHFyLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gY29sdW1ucyAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIFguc2V0KGksIGssIDApO1xuICAgICAgfVxuICAgICAgWC5zZXQoaywgaywgMSk7XG4gICAgICBmb3IgKGogPSBrOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChxci5nZXQoaywgaykgIT09IDApIHtcbiAgICAgICAgICBzID0gMDtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIFguZ2V0KGksIGopO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcblxuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG59XG4iLCJpbXBvcnQgTWF0cml4IGZyb20gJy4uL21hdHJpeCc7XG5pbXBvcnQgV3JhcHBlck1hdHJpeDJEIGZyb20gJy4uL3dyYXAvV3JhcHBlck1hdHJpeDJEJztcblxuaW1wb3J0IHsgaHlwb3RlbnVzZSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IodmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhbHVlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IG11c3QgYmUgbm9uLWVtcHR5Jyk7XG4gICAgfVxuXG4gICAgbGV0IG0gPSB2YWx1ZS5yb3dzO1xuICAgIGxldCBuID0gdmFsdWUuY29sdW1ucztcblxuICAgIGNvbnN0IHtcbiAgICAgIGNvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzID0gdHJ1ZSxcbiAgICAgIGNvbXB1dGVSaWdodFNpbmd1bGFyVmVjdG9ycyA9IHRydWUsXG4gICAgICBhdXRvVHJhbnNwb3NlID0gZmFsc2UsXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBsZXQgd2FudHUgPSBCb29sZWFuKGNvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzKTtcbiAgICBsZXQgd2FudHYgPSBCb29sZWFuKGNvbXB1dGVSaWdodFNpbmd1bGFyVmVjdG9ycyk7XG5cbiAgICBsZXQgc3dhcHBlZCA9IGZhbHNlO1xuICAgIGxldCBhO1xuICAgIGlmIChtIDwgbikge1xuICAgICAgaWYgKCFhdXRvVHJhbnNwb3NlKSB7XG4gICAgICAgIGEgPSB2YWx1ZS5jbG9uZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ0NvbXB1dGluZyBTVkQgb24gYSBtYXRyaXggd2l0aCBtb3JlIGNvbHVtbnMgdGhhbiByb3dzLiBDb25zaWRlciBlbmFibGluZyBhdXRvVHJhbnNwb3NlJyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGEgPSB2YWx1ZS50cmFuc3Bvc2UoKTtcbiAgICAgICAgbSA9IGEucm93cztcbiAgICAgICAgbiA9IGEuY29sdW1ucztcbiAgICAgICAgc3dhcHBlZCA9IHRydWU7XG4gICAgICAgIGxldCBhdXggPSB3YW50dTtcbiAgICAgICAgd2FudHUgPSB3YW50djtcbiAgICAgICAgd2FudHYgPSBhdXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSB2YWx1ZS5jbG9uZSgpO1xuICAgIH1cblxuICAgIGxldCBudSA9IE1hdGgubWluKG0sIG4pO1xuICAgIGxldCBuaSA9IE1hdGgubWluKG0gKyAxLCBuKTtcbiAgICBsZXQgcyA9IG5ldyBGbG9hdDY0QXJyYXkobmkpO1xuICAgIGxldCBVID0gbmV3IE1hdHJpeChtLCBudSk7XG4gICAgbGV0IFYgPSBuZXcgTWF0cml4KG4sIG4pO1xuXG4gICAgbGV0IGUgPSBuZXcgRmxvYXQ2NEFycmF5KG4pO1xuICAgIGxldCB3b3JrID0gbmV3IEZsb2F0NjRBcnJheShtKTtcblxuICAgIGxldCBzaSA9IG5ldyBGbG9hdDY0QXJyYXkobmkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmk7IGkrKykgc2lbaV0gPSBpO1xuXG4gICAgbGV0IG5jdCA9IE1hdGgubWluKG0gLSAxLCBuKTtcbiAgICBsZXQgbnJ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obiAtIDIsIG0pKTtcbiAgICBsZXQgbXJjID0gTWF0aC5tYXgobmN0LCBucnQpO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtcmM7IGsrKykge1xuICAgICAgaWYgKGsgPCBuY3QpIHtcbiAgICAgICAgc1trXSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgc1trXSA9IGh5cG90ZW51c2Uoc1trXSwgYS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzW2tdICE9PSAwKSB7XG4gICAgICAgICAgaWYgKGEuZ2V0KGssIGspIDwgMCkge1xuICAgICAgICAgICAgc1trXSA9IC1zW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgYS5zZXQoaSwgaywgYS5nZXQoaSwgaykgLyBzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYS5zZXQoaywgaywgYS5nZXQoaywgaykgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBzW2tdID0gLXNba107XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoayA8IG5jdCAmJiBzW2tdICE9PSAwKSB7XG4gICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICB0ICs9IGEuZ2V0KGksIGspICogYS5nZXQoaSwgaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHQgPSAtdCAvIGEuZ2V0KGssIGspO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBhLnNldChpLCBqLCBhLmdldChpLCBqKSArIHQgKiBhLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVbal0gPSBhLmdldChrLCBqKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHdhbnR1ICYmIGsgPCBuY3QpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBVLnNldChpLCBrLCBhLmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGsgPCBucnQpIHtcbiAgICAgICAgZVtrXSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgIGVba10gPSBoeXBvdGVudXNlKGVba10sIGVbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlW2tdICE9PSAwKSB7XG4gICAgICAgICAgaWYgKGVbayArIDFdIDwgMCkge1xuICAgICAgICAgICAgZVtrXSA9IDAgLSBlW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGVbaV0gLz0gZVtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZVtrICsgMV0gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlW2tdID0gLWVba107XG4gICAgICAgIGlmIChrICsgMSA8IG0gJiYgZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgd29ya1tpXSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgIHdvcmtbaV0gKz0gZVtqXSAqIGEuZ2V0KGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gLWVbal0gLyBlW2sgKyAxXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICBhLnNldChpLCBqLCBhLmdldChpLCBqKSArIHQgKiB3b3JrW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBWLnNldChpLCBrLCBlW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcCA9IE1hdGgubWluKG4sIG0gKyAxKTtcbiAgICBpZiAobmN0IDwgbikge1xuICAgICAgc1tuY3RdID0gYS5nZXQobmN0LCBuY3QpO1xuICAgIH1cbiAgICBpZiAobSA8IHApIHtcbiAgICAgIHNbcCAtIDFdID0gMDtcbiAgICB9XG4gICAgaWYgKG5ydCArIDEgPCBwKSB7XG4gICAgICBlW25ydF0gPSBhLmdldChucnQsIHAgLSAxKTtcbiAgICB9XG4gICAgZVtwIC0gMV0gPSAwO1xuXG4gICAgaWYgKHdhbnR1KSB7XG4gICAgICBmb3IgKGxldCBqID0gbmN0OyBqIDwgbnU7IGorKykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgIFUuc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICAgIFUuc2V0KGosIGosIDEpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgayA9IG5jdCAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAgIGlmIChzW2tdICE9PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbnU7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgdCArPSBVLmdldChpLCBrKSAqIFUuZ2V0KGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdCA9IC10IC8gVS5nZXQoaywgayk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICBVLnNldChpLCBqLCBVLmdldChpLCBqKSArIHQgKiBVLmdldChpLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBVLnNldChpLCBrLCAtVS5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBVLnNldChrLCBrLCAxICsgVS5nZXQoaywgaykpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgayAtIDE7IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBVLnNldChpLCBrLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVS5zZXQoaywgaywgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod2FudHYpIHtcbiAgICAgIGZvciAobGV0IGsgPSBuIC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgICAgaWYgKGsgPCBucnQgJiYgZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgIHQgKz0gVi5nZXQoaSwgaykgKiBWLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSAtdCAvIFYuZ2V0KGsgKyAxLCBrKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICBWLnNldChpLCBqLCBWLmdldChpLCBqKSArIHQgKiBWLmdldChpLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgVi5zZXQoaSwgaywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgVi5zZXQoaywgaywgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHBwID0gcCAtIDE7XG4gICAgbGV0IGl0ZXIgPSAwO1xuICAgIGxldCBlcHMgPSBOdW1iZXIuRVBTSUxPTjtcbiAgICB3aGlsZSAocCA+IDApIHtcbiAgICAgIGxldCBrLCBrYXNlO1xuICAgICAgZm9yIChrID0gcCAtIDI7IGsgPj0gLTE7IGstLSkge1xuICAgICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbHBoYSA9XG4gICAgICAgICAgTnVtYmVyLk1JTl9WQUxVRSArIGVwcyAqIE1hdGguYWJzKHNba10gKyBNYXRoLmFicyhzW2sgKyAxXSkpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZVtrXSkgPD0gYWxwaGEgfHwgTnVtYmVyLmlzTmFOKGVba10pKSB7XG4gICAgICAgICAgZVtrXSA9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChrID09PSBwIC0gMikge1xuICAgICAgICBrYXNlID0gNDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBrcztcbiAgICAgICAgZm9yIChrcyA9IHAgLSAxOyBrcyA+PSBrOyBrcy0tKSB7XG4gICAgICAgICAgaWYgKGtzID09PSBrKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHQgPVxuICAgICAgICAgICAgKGtzICE9PSBwID8gTWF0aC5hYnMoZVtrc10pIDogMCkgK1xuICAgICAgICAgICAgKGtzICE9PSBrICsgMSA/IE1hdGguYWJzKGVba3MgLSAxXSkgOiAwKTtcbiAgICAgICAgICBpZiAoTWF0aC5hYnMoc1trc10pIDw9IGVwcyAqIHQpIHtcbiAgICAgICAgICAgIHNba3NdID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa3MgPT09IGspIHtcbiAgICAgICAgICBrYXNlID0gMztcbiAgICAgICAgfSBlbHNlIGlmIChrcyA9PT0gcCAtIDEpIHtcbiAgICAgICAgICBrYXNlID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrYXNlID0gMjtcbiAgICAgICAgICBrID0ga3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaysrO1xuXG4gICAgICBzd2l0Y2ggKGthc2UpIHtcbiAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgbGV0IGYgPSBlW3AgLSAyXTtcbiAgICAgICAgICBlW3AgLSAyXSA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IHAgLSAyOyBqID49IGs7IGotLSkge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKHNbal0sIGYpO1xuICAgICAgICAgICAgbGV0IGNzID0gc1tqXSAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBmIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgaWYgKGogIT09IGspIHtcbiAgICAgICAgICAgICAgZiA9IC1zbiAqIGVbaiAtIDFdO1xuICAgICAgICAgICAgICBlW2ogLSAxXSA9IGNzICogZVtqIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gY3MgKiBWLmdldChpLCBqKSArIHNuICogVi5nZXQoaSwgcCAtIDEpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIHAgLSAxLCAtc24gKiBWLmdldChpLCBqKSArIGNzICogVi5nZXQoaSwgcCAtIDEpKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICBsZXQgZiA9IGVbayAtIDFdO1xuICAgICAgICAgIGVbayAtIDFdID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBqID0gazsgaiA8IHA7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKHNbal0sIGYpO1xuICAgICAgICAgICAgbGV0IGNzID0gc1tqXSAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBmIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgZiA9IC1zbiAqIGVbal07XG4gICAgICAgICAgICBlW2pdID0gY3MgKiBlW2pdO1xuICAgICAgICAgICAgaWYgKHdhbnR1KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVS5nZXQoaSwgaikgKyBzbiAqIFUuZ2V0KGksIGsgLSAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrIC0gMSwgLXNuICogVS5nZXQoaSwgaikgKyBjcyAqIFUuZ2V0KGksIGsgLSAxKSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heChcbiAgICAgICAgICAgIE1hdGguYWJzKHNbcCAtIDFdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKHNbcCAtIDJdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKGVbcCAtIDJdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKHNba10pLFxuICAgICAgICAgICAgTWF0aC5hYnMoZVtrXSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBzcCA9IHNbcCAtIDFdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3Qgc3BtMSA9IHNbcCAtIDJdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgZXBtMSA9IGVbcCAtIDJdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3Qgc2sgPSBzW2tdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgZWsgPSBlW2tdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgYiA9ICgoc3BtMSArIHNwKSAqIChzcG0xIC0gc3ApICsgZXBtMSAqIGVwbTEpIC8gMjtcbiAgICAgICAgICBjb25zdCBjID0gc3AgKiBlcG0xICogKHNwICogZXBtMSk7XG4gICAgICAgICAgbGV0IHNoaWZ0ID0gMDtcbiAgICAgICAgICBpZiAoYiAhPT0gMCB8fCBjICE9PSAwKSB7XG4gICAgICAgICAgICBpZiAoYiA8IDApIHtcbiAgICAgICAgICAgICAgc2hpZnQgPSAwIC0gTWF0aC5zcXJ0KGIgKiBiICsgYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaGlmdCA9IE1hdGguc3FydChiICogYiArIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hpZnQgPSBjIC8gKGIgKyBzaGlmdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBmID0gKHNrICsgc3ApICogKHNrIC0gc3ApICsgc2hpZnQ7XG4gICAgICAgICAgbGV0IGcgPSBzayAqIGVrO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcCAtIDE7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKGYsIGcpO1xuICAgICAgICAgICAgaWYgKHQgPT09IDApIHQgPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgICAgICAgbGV0IGNzID0gZiAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBnIC8gdDtcbiAgICAgICAgICAgIGlmIChqICE9PSBrKSB7XG4gICAgICAgICAgICAgIGVbaiAtIDFdID0gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGYgPSBjcyAqIHNbal0gKyBzbiAqIGVbal07XG4gICAgICAgICAgICBlW2pdID0gY3MgKiBlW2pdIC0gc24gKiBzW2pdO1xuICAgICAgICAgICAgZyA9IHNuICogc1tqICsgMV07XG4gICAgICAgICAgICBzW2ogKyAxXSA9IGNzICogc1tqICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gY3MgKiBWLmdldChpLCBqKSArIHNuICogVi5nZXQoaSwgaiArIDEpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGogKyAxLCAtc24gKiBWLmdldChpLCBqKSArIGNzICogVi5nZXQoaSwgaiArIDEpKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdCA9IGh5cG90ZW51c2UoZiwgZyk7XG4gICAgICAgICAgICBpZiAodCA9PT0gMCkgdCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgICAgICAgICBjcyA9IGYgLyB0O1xuICAgICAgICAgICAgc24gPSBnIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgZiA9IGNzICogZVtqXSArIHNuICogc1tqICsgMV07XG4gICAgICAgICAgICBzW2ogKyAxXSA9IC1zbiAqIGVbal0gKyBjcyAqIHNbaiArIDFdO1xuICAgICAgICAgICAgZyA9IHNuICogZVtqICsgMV07XG4gICAgICAgICAgICBlW2ogKyAxXSA9IGNzICogZVtqICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHUgJiYgaiA8IG0gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVS5nZXQoaSwgaikgKyBzbiAqIFUuZ2V0KGksIGogKyAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBqICsgMSwgLXNuICogVS5nZXQoaSwgaikgKyBjcyAqIFUuZ2V0KGksIGogKyAxKSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZVtwIC0gMl0gPSBmO1xuICAgICAgICAgIGl0ZXIgPSBpdGVyICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICBpZiAoc1trXSA8PSAwKSB7XG4gICAgICAgICAgICBzW2tdID0gc1trXSA8IDAgPyAtc1trXSA6IDA7XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHA7IGkrKykge1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGssIC1WLmdldChpLCBrKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGsgPCBwcCkge1xuICAgICAgICAgICAgaWYgKHNba10gPj0gc1trICsgMV0pIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdCA9IHNba107XG4gICAgICAgICAgICBzW2tdID0gc1trICsgMV07XG4gICAgICAgICAgICBzW2sgKyAxXSA9IHQ7XG4gICAgICAgICAgICBpZiAod2FudHYgJiYgayA8IG4gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IFYuZ2V0KGksIGsgKyAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrICsgMSwgVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGssIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FudHUgJiYgayA8IG0gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IFUuZ2V0KGksIGsgKyAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrICsgMSwgVS5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGssIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZXIgPSAwO1xuICAgICAgICAgIHAtLTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBubyBkZWZhdWx0XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN3YXBwZWQpIHtcbiAgICAgIGxldCB0bXAgPSBWO1xuICAgICAgViA9IFU7XG4gICAgICBVID0gdG1wO1xuICAgIH1cblxuICAgIHRoaXMubSA9IG07XG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLnMgPSBzO1xuICAgIHRoaXMuVSA9IFU7XG4gICAgdGhpcy5WID0gVjtcbiAgfVxuXG4gIHNvbHZlKHZhbHVlKSB7XG4gICAgbGV0IFkgPSB2YWx1ZTtcbiAgICBsZXQgZSA9IHRoaXMudGhyZXNob2xkO1xuICAgIGxldCBzY29scyA9IHRoaXMucy5sZW5ndGg7XG4gICAgbGV0IExzID0gTWF0cml4Lnplcm9zKHNjb2xzLCBzY29scyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjb2xzOyBpKyspIHtcbiAgICAgIGlmIChNYXRoLmFicyh0aGlzLnNbaV0pIDw9IGUpIHtcbiAgICAgICAgTHMuc2V0KGksIGksIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTHMuc2V0KGksIGksIDEgLyB0aGlzLnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBVID0gdGhpcy5VO1xuICAgIGxldCBWID0gdGhpcy5yaWdodFNpbmd1bGFyVmVjdG9ycztcblxuICAgIGxldCBWTCA9IFYubW11bChMcyk7XG4gICAgbGV0IHZyb3dzID0gVi5yb3dzO1xuICAgIGxldCB1cm93cyA9IFUucm93cztcbiAgICBsZXQgVkxVID0gTWF0cml4Lnplcm9zKHZyb3dzLCB1cm93cyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdXJvd3M7IGorKykge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBzY29sczsgaysrKSB7XG4gICAgICAgICAgc3VtICs9IFZMLmdldChpLCBrKSAqIFUuZ2V0KGosIGspO1xuICAgICAgICB9XG4gICAgICAgIFZMVS5zZXQoaSwgaiwgc3VtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gVkxVLm1tdWwoWSk7XG4gIH1cblxuICBzb2x2ZUZvckRpYWdvbmFsKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuc29sdmUoTWF0cml4LmRpYWcodmFsdWUpKTtcbiAgfVxuXG4gIGludmVyc2UoKSB7XG4gICAgbGV0IFYgPSB0aGlzLlY7XG4gICAgbGV0IGUgPSB0aGlzLnRocmVzaG9sZDtcbiAgICBsZXQgdnJvd3MgPSBWLnJvd3M7XG4gICAgbGV0IHZjb2xzID0gVi5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeCh2cm93cywgdGhpcy5zLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmNvbHM7IGorKykge1xuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2pdKSA+IGUpIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBWLmdldChpLCBqKSAvIHRoaXMuc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgVSA9IHRoaXMuVTtcblxuICAgIGxldCB1cm93cyA9IFUucm93cztcbiAgICBsZXQgdWNvbHMgPSBVLmNvbHVtbnM7XG4gICAgbGV0IFkgPSBuZXcgTWF0cml4KHZyb3dzLCB1cm93cyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdXJvd3M7IGorKykge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB1Y29sczsgaysrKSB7XG4gICAgICAgICAgc3VtICs9IFguZ2V0KGksIGspICogVS5nZXQoaiwgayk7XG4gICAgICAgIH1cbiAgICAgICAgWS5zZXQoaSwgaiwgc3VtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc1swXSAvIHRoaXMuc1tNYXRoLm1pbih0aGlzLm0sIHRoaXMubikgLSAxXTtcbiAgfVxuXG4gIGdldCBub3JtMigpIHtcbiAgICByZXR1cm4gdGhpcy5zWzBdO1xuICB9XG5cbiAgZ2V0IHJhbmsoKSB7XG4gICAgbGV0IHRvbCA9IE1hdGgubWF4KHRoaXMubSwgdGhpcy5uKSAqIHRoaXMuc1swXSAqIE51bWJlci5FUFNJTE9OO1xuICAgIGxldCByID0gMDtcbiAgICBsZXQgcyA9IHRoaXMucztcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGlmIChzW2ldID4gdG9sKSB7XG4gICAgICAgIHIrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBnZXQgZGlhZ29uYWwoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zKTtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKSB7XG4gICAgcmV0dXJuIChOdW1iZXIuRVBTSUxPTiAvIDIpICogTWF0aC5tYXgodGhpcy5tLCB0aGlzLm4pICogdGhpcy5zWzBdO1xuICB9XG5cbiAgZ2V0IGxlZnRTaW5ndWxhclZlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuVTtcbiAgfVxuXG4gIGdldCByaWdodFNpbmd1bGFyVmVjdG9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5WO1xuICB9XG5cbiAgZ2V0IGRpYWdvbmFsTWF0cml4KCkge1xuICAgIHJldHVybiBNYXRyaXguZGlhZyh0aGlzLnMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpbnZlcnNlLCBNYXRyaXggfSBmcm9tICdtbC1tYXRyaXgnO1xuXG4vKipcbiAqIERpZmZlcmVuY2Ugb2YgdGhlIG1hdHJpeCBmdW5jdGlvbiBvdmVyIHRoZSBwYXJhbWV0ZXJzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGV2YWx1YXRlZERhdGEgLSBBcnJheSBvZiBwcmV2aW91cyBldmFsdWF0ZWQgZnVuY3Rpb24gdmFsdWVzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtcyAtIEFycmF5IG9mIHByZXZpb3VzIHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmFkaWVudERpZmZlcmVuY2UgLSBBZGp1c3RtZW50IGZvciBkZWNyZWFzZSB0aGUgZGFtcGluZyBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtNYXRyaXh9XG4gKi9cbmZ1bmN0aW9uIGdyYWRpZW50RnVuY3Rpb24oXG4gIGRhdGEsXG4gIGV2YWx1YXRlZERhdGEsXG4gIHBhcmFtcyxcbiAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICBwYXJhbUZ1bmN0aW9uLFxuKSB7XG4gIGNvbnN0IG4gPSBwYXJhbXMubGVuZ3RoO1xuICBjb25zdCBtID0gZGF0YS54Lmxlbmd0aDtcblxuICBsZXQgYW5zID0gbmV3IEFycmF5KG4pO1xuXG4gIGZvciAobGV0IHBhcmFtID0gMDsgcGFyYW0gPCBuOyBwYXJhbSsrKSB7XG4gICAgYW5zW3BhcmFtXSA9IG5ldyBBcnJheShtKTtcbiAgICBsZXQgYXV4UGFyYW1zID0gcGFyYW1zLnNsaWNlKCk7XG4gICAgYXV4UGFyYW1zW3BhcmFtXSArPSBncmFkaWVudERpZmZlcmVuY2U7XG4gICAgbGV0IGZ1bmNQYXJhbSA9IHBhcmFtRnVuY3Rpb24oYXV4UGFyYW1zKTtcblxuICAgIGZvciAobGV0IHBvaW50ID0gMDsgcG9pbnQgPCBtOyBwb2ludCsrKSB7XG4gICAgICBhbnNbcGFyYW1dW3BvaW50XSA9IGV2YWx1YXRlZERhdGFbcG9pbnRdIC0gZnVuY1BhcmFtKGRhdGEueFtwb2ludF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IE1hdHJpeChhbnMpO1xufVxuXG4vKipcbiAqIE1hdHJpeCBmdW5jdGlvbiBvdmVyIHRoZSBzYW1wbGVzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGV2YWx1YXRlZERhdGEgLSBBcnJheSBvZiBwcmV2aW91cyBldmFsdWF0ZWQgZnVuY3Rpb24gdmFsdWVzXG4gKiBAcmV0dXJuIHtNYXRyaXh9XG4gKi9cbmZ1bmN0aW9uIG1hdHJpeEZ1bmN0aW9uKGRhdGEsIGV2YWx1YXRlZERhdGEpIHtcbiAgY29uc3QgbSA9IGRhdGEueC5sZW5ndGg7XG5cbiAgbGV0IGFucyA9IG5ldyBBcnJheShtKTtcblxuICBmb3IgKGxldCBwb2ludCA9IDA7IHBvaW50IDwgbTsgcG9pbnQrKykge1xuICAgIGFuc1twb2ludF0gPSBbZGF0YS55W3BvaW50XSAtIGV2YWx1YXRlZERhdGFbcG9pbnRdXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgTWF0cml4KGFucyk7XG59XG5cbi8qKlxuICogSXRlcmF0aW9uIGZvciBMZXZlbmJlcmctTWFycXVhcmR0XG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtcyAtIEFycmF5IG9mIHByZXZpb3VzIHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYW1waW5nIC0gTGV2ZW5iZXJnLU1hcnF1YXJkdCBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmFkaWVudERpZmZlcmVuY2UgLSBBZGp1c3RtZW50IGZvciBkZWNyZWFzZSB0aGUgZGFtcGluZyBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEByZXR1cm4ge0FycmF5PG51bWJlcj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0ZXAoXG4gIGRhdGEsXG4gIHBhcmFtcyxcbiAgZGFtcGluZyxcbiAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sXG4pIHtcbiAgbGV0IHZhbHVlID0gZGFtcGluZyAqIGdyYWRpZW50RGlmZmVyZW5jZSAqIGdyYWRpZW50RGlmZmVyZW5jZTtcbiAgbGV0IGlkZW50aXR5ID0gTWF0cml4LmV5ZShwYXJhbXMubGVuZ3RoLCBwYXJhbXMubGVuZ3RoLCB2YWx1ZSk7XG5cbiAgY29uc3QgZnVuYyA9IHBhcmFtZXRlcml6ZWRGdW5jdGlvbihwYXJhbXMpO1xuXG4gIGxldCBldmFsdWF0ZWREYXRhID0gbmV3IEZsb2F0NjRBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBldmFsdWF0ZWREYXRhW2ldID0gZnVuYyhkYXRhLnhbaV0pO1xuICB9XG5cbiAgbGV0IGdyYWRpZW50RnVuYyA9IGdyYWRpZW50RnVuY3Rpb24oXG4gICAgZGF0YSxcbiAgICBldmFsdWF0ZWREYXRhLFxuICAgIHBhcmFtcyxcbiAgICBncmFkaWVudERpZmZlcmVuY2UsXG4gICAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuICApO1xuICBsZXQgbWF0cml4RnVuYyA9IG1hdHJpeEZ1bmN0aW9uKGRhdGEsIGV2YWx1YXRlZERhdGEpO1xuICBsZXQgaW52ZXJzZU1hdHJpeCA9IGludmVyc2UoXG4gICAgaWRlbnRpdHkuYWRkKGdyYWRpZW50RnVuYy5tbXVsKGdyYWRpZW50RnVuYy50cmFuc3Bvc2UoKSkpLFxuICApO1xuXG4gIHBhcmFtcyA9IG5ldyBNYXRyaXgoW3BhcmFtc10pO1xuICBwYXJhbXMgPSBwYXJhbXMuc3ViKFxuICAgIGludmVyc2VNYXRyaXhcbiAgICAgIC5tbXVsKGdyYWRpZW50RnVuYylcbiAgICAgIC5tbXVsKG1hdHJpeEZ1bmMpXG4gICAgICAubXVsKGdyYWRpZW50RGlmZmVyZW5jZSlcbiAgICAgIC50cmFuc3Bvc2UoKSxcbiAgKTtcblxuICByZXR1cm4gcGFyYW1zLnRvMURBcnJheSgpO1xufVxuIiwiaW1wb3J0IEx1RGVjb21wb3NpdGlvbiBmcm9tICcuL2RjL2x1JztcbmltcG9ydCBRckRlY29tcG9zaXRpb24gZnJvbSAnLi9kYy9xcic7XG5pbXBvcnQgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24gZnJvbSAnLi9kYy9zdmQnO1xuaW1wb3J0IE1hdHJpeCBmcm9tICcuL21hdHJpeCc7XG5pbXBvcnQgV3JhcHBlck1hdHJpeDJEIGZyb20gJy4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShtYXRyaXgsIHVzZVNWRCA9IGZhbHNlKSB7XG4gIG1hdHJpeCA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChtYXRyaXgpO1xuICBpZiAodXNlU1ZEKSB7XG4gICAgcmV0dXJuIG5ldyBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbihtYXRyaXgpLmludmVyc2UoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc29sdmUobWF0cml4LCBNYXRyaXguZXllKG1hdHJpeC5yb3dzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbHZlKGxlZnRIYW5kU2lkZSwgcmlnaHRIYW5kU2lkZSwgdXNlU1ZEID0gZmFsc2UpIHtcbiAgbGVmdEhhbmRTaWRlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KGxlZnRIYW5kU2lkZSk7XG4gIHJpZ2h0SGFuZFNpZGUgPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgocmlnaHRIYW5kU2lkZSk7XG4gIGlmICh1c2VTVkQpIHtcbiAgICByZXR1cm4gbmV3IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uKGxlZnRIYW5kU2lkZSkuc29sdmUocmlnaHRIYW5kU2lkZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxlZnRIYW5kU2lkZS5pc1NxdWFyZSgpXG4gICAgICA/IG5ldyBMdURlY29tcG9zaXRpb24obGVmdEhhbmRTaWRlKS5zb2x2ZShyaWdodEhhbmRTaWRlKVxuICAgICAgOiBuZXcgUXJEZWNvbXBvc2l0aW9uKGxlZnRIYW5kU2lkZSkuc29sdmUocmlnaHRIYW5kU2lkZSk7XG4gIH1cbn1cbiIsImltcG9ydCBpc0FycmF5IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmltcG9ydCBlcnJvckNhbGN1bGF0aW9uIGZyb20gJy4vZXJyb3JDYWxjdWxhdGlvbic7XG5pbXBvcnQgc3RlcCBmcm9tICcuL3N0ZXAnO1xuXG4vKipcbiAqIEN1cnZlIGZpdHRpbmcgYWxnb3JpdGhtXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gT3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kYW1waW5nXSAtIExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ3JhZGllbnREaWZmZXJlbmNlID0gMTBlLTJdIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLm1pblZhbHVlc10gLSBNaW5pbXVtIGFsbG93ZWQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLm1heFZhbHVlc10gLSBNYXhpbXVtIGFsbG93ZWQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmluaXRpYWxWYWx1ZXNdIC0gQXJyYXkgb2YgaW5pdGlhbCBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4SXRlcmF0aW9ucyA9IDEwMF0gLSBNYXhpbXVtIG9mIGFsbG93ZWQgaXRlcmF0aW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmVycm9yVG9sZXJhbmNlID0gMTBlLTNdIC0gTWluaW11bSB1bmNlcnRhaW50eSBhbGxvd2VkIGZvciBlYWNoIHBvaW50XG4gKiBAcmV0dXJuIHt7cGFyYW1ldGVyVmFsdWVzOiBBcnJheTxudW1iZXI+LCBwYXJhbWV0ZXJFcnJvcjogbnVtYmVyLCBpdGVyYXRpb25zOiBudW1iZXJ9fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsZXZlbmJlcmdNYXJxdWFyZHQoXG4gIGRhdGEsXG4gIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgb3B0aW9ucyA9IHt9LFxuKSB7XG4gIGxldCB7XG4gICAgbWF4SXRlcmF0aW9ucyA9IDEwMCxcbiAgICBncmFkaWVudERpZmZlcmVuY2UgPSAxMGUtMixcbiAgICBkYW1waW5nID0gMCxcbiAgICBlcnJvclRvbGVyYW5jZSA9IDEwZS0zLFxuICAgIG1pblZhbHVlcyxcbiAgICBtYXhWYWx1ZXMsXG4gICAgaW5pdGlhbFZhbHVlcyxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKGRhbXBpbmcgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhbXBpbmcgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgfSBlbHNlIGlmICghZGF0YS54IHx8ICFkYXRhLnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIHBhcmFtZXRlciBtdXN0IGhhdmUgeCBhbmQgeSBlbGVtZW50cycpO1xuICB9IGVsc2UgaWYgKFxuICAgICFpc0FycmF5KGRhdGEueCkgfHxcbiAgICBkYXRhLngubGVuZ3RoIDwgMiB8fFxuICAgICFpc0FycmF5KGRhdGEueSkgfHxcbiAgICBkYXRhLnkubGVuZ3RoIDwgMlxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gMiBwb2ludHMnLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoZGF0YS54Lmxlbmd0aCAhPT0gZGF0YS55Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplJyk7XG4gIH1cblxuICBsZXQgcGFyYW1ldGVycyA9XG4gICAgaW5pdGlhbFZhbHVlcyB8fCBuZXcgQXJyYXkocGFyYW1ldGVyaXplZEZ1bmN0aW9uLmxlbmd0aCkuZmlsbCgxKTtcbiAgbGV0IHBhckxlbiA9IHBhcmFtZXRlcnMubGVuZ3RoO1xuICBtYXhWYWx1ZXMgPSBtYXhWYWx1ZXMgfHwgbmV3IEFycmF5KHBhckxlbikuZmlsbChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gIG1pblZhbHVlcyA9IG1pblZhbHVlcyB8fCBuZXcgQXJyYXkocGFyTGVuKS5maWxsKE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcblxuICBpZiAobWF4VmFsdWVzLmxlbmd0aCAhPT0gbWluVmFsdWVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWluVmFsdWVzIGFuZCBtYXhWYWx1ZXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplJyk7XG4gIH1cblxuICBpZiAoIWlzQXJyYXkocGFyYW1ldGVycykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luaXRpYWxWYWx1ZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgbGV0IGVycm9yID0gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24pO1xuXG4gIGxldCBjb252ZXJnZWQgPSBlcnJvciA8PSBlcnJvclRvbGVyYW5jZTtcblxuICBsZXQgaXRlcmF0aW9uO1xuICBmb3IgKGl0ZXJhdGlvbiA9IDA7IGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMgJiYgIWNvbnZlcmdlZDsgaXRlcmF0aW9uKyspIHtcbiAgICBwYXJhbWV0ZXJzID0gc3RlcChcbiAgICAgIGRhdGEsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICAgZGFtcGluZyxcbiAgICAgIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgICAgIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgICApO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBwYXJMZW47IGsrKykge1xuICAgICAgcGFyYW1ldGVyc1trXSA9IE1hdGgubWluKFxuICAgICAgICBNYXRoLm1heChtaW5WYWx1ZXNba10sIHBhcmFtZXRlcnNba10pLFxuICAgICAgICBtYXhWYWx1ZXNba10sXG4gICAgICApO1xuICAgIH1cblxuICAgIGVycm9yID0gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24pO1xuICAgIGlmIChpc05hTihlcnJvcikpIGJyZWFrO1xuICAgIGNvbnZlcmdlZCA9IGVycm9yIDw9IGVycm9yVG9sZXJhbmNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJhbWV0ZXJWYWx1ZXM6IHBhcmFtZXRlcnMsXG4gICAgcGFyYW1ldGVyRXJyb3I6IGVycm9yLFxuICAgIGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbixcbiAgfTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxzXCIpKTtcbmZ1bmN0aW9uIG1ha2VIZWFwKG5Qb2ludHMsIHNpemUpIHtcbiAgICB2YXIgbWFrZUFycmF5cyA9IGZ1bmN0aW9uIChmaWxsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmVtcHR5KG5Qb2ludHMpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuZmlsbGVkKHNpemUsIGZpbGxWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGhlYXAgPSBbXTtcbiAgICBoZWFwLnB1c2gobWFrZUFycmF5cygtMSkpO1xuICAgIGhlYXAucHVzaChtYWtlQXJyYXlzKEluZmluaXR5KSk7XG4gICAgaGVhcC5wdXNoKG1ha2VBcnJheXMoMCkpO1xuICAgIHJldHVybiBoZWFwO1xufVxuZXhwb3J0cy5tYWtlSGVhcCA9IG1ha2VIZWFwO1xuZnVuY3Rpb24gcmVqZWN0aW9uU2FtcGxlKG5TYW1wbGVzLCBwb29sU2l6ZSwgcmFuZG9tKSB7XG4gICAgdmFyIHJlc3VsdCA9IHV0aWxzLnplcm9zKG5TYW1wbGVzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5TYW1wbGVzOyBpKyspIHtcbiAgICAgICAgdmFyIHJlamVjdFNhbXBsZSA9IHRydWU7XG4gICAgICAgIHZhciBqID0gMDtcbiAgICAgICAgd2hpbGUgKHJlamVjdFNhbXBsZSkge1xuICAgICAgICAgICAgaiA9IHV0aWxzLnRhdVJhbmRJbnQocG9vbFNpemUsIHJhbmRvbSk7XG4gICAgICAgICAgICB2YXIgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGk7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChqID09PSByZXN1bHRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFicm9rZW4pXG4gICAgICAgICAgICAgICAgcmVqZWN0U2FtcGxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W2ldID0gajtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucmVqZWN0aW9uU2FtcGxlID0gcmVqZWN0aW9uU2FtcGxlO1xuZnVuY3Rpb24gaGVhcFB1c2goaGVhcCwgcm93LCB3ZWlnaHQsIGluZGV4LCBmbGFnKSB7XG4gICAgcm93ID0gTWF0aC5mbG9vcihyb3cpO1xuICAgIHZhciBpbmRpY2VzID0gaGVhcFswXVtyb3ddO1xuICAgIHZhciB3ZWlnaHRzID0gaGVhcFsxXVtyb3ddO1xuICAgIHZhciBpc05ldyA9IGhlYXBbMl1bcm93XTtcbiAgICBpZiAod2VpZ2h0ID49IHdlaWdodHNbMF0pIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5kZXggPT09IGluZGljZXNbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmNoZWNrZWRIZWFwUHVzaChoZWFwLCByb3csIHdlaWdodCwgaW5kZXgsIGZsYWcpO1xufVxuZXhwb3J0cy5oZWFwUHVzaCA9IGhlYXBQdXNoO1xuZnVuY3Rpb24gdW5jaGVja2VkSGVhcFB1c2goaGVhcCwgcm93LCB3ZWlnaHQsIGluZGV4LCBmbGFnKSB7XG4gICAgdmFyIGluZGljZXMgPSBoZWFwWzBdW3Jvd107XG4gICAgdmFyIHdlaWdodHMgPSBoZWFwWzFdW3Jvd107XG4gICAgdmFyIGlzTmV3ID0gaGVhcFsyXVtyb3ddO1xuICAgIGlmICh3ZWlnaHQgPj0gd2VpZ2h0c1swXSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgd2VpZ2h0c1swXSA9IHdlaWdodDtcbiAgICBpbmRpY2VzWzBdID0gaW5kZXg7XG4gICAgaXNOZXdbMF0gPSBmbGFnO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaVN3YXAgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBpYzEgPSAyICogaSArIDE7XG4gICAgICAgIHZhciBpYzIgPSBpYzEgKyAxO1xuICAgICAgICB2YXIgaGVhcFNoYXBlMiA9IGhlYXBbMF1bMF0ubGVuZ3RoO1xuICAgICAgICBpZiAoaWMxID49IGhlYXBTaGFwZTIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGljMiA+PSBoZWFwU2hhcGUyKSB7XG4gICAgICAgICAgICBpZiAod2VpZ2h0c1tpYzFdID4gd2VpZ2h0KSB7XG4gICAgICAgICAgICAgICAgaVN3YXAgPSBpYzE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHRzW2ljMV0gPj0gd2VpZ2h0c1tpYzJdKSB7XG4gICAgICAgICAgICBpZiAod2VpZ2h0IDwgd2VpZ2h0c1tpYzFdKSB7XG4gICAgICAgICAgICAgICAgaVN3YXAgPSBpYzE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3ZWlnaHQgPCB3ZWlnaHRzW2ljMl0pIHtcbiAgICAgICAgICAgICAgICBpU3dhcCA9IGljMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdlaWdodHNbaV0gPSB3ZWlnaHRzW2lTd2FwXTtcbiAgICAgICAgaW5kaWNlc1tpXSA9IGluZGljZXNbaVN3YXBdO1xuICAgICAgICBpc05ld1tpXSA9IGlzTmV3W2lTd2FwXTtcbiAgICAgICAgaSA9IGlTd2FwO1xuICAgIH1cbiAgICB3ZWlnaHRzW2ldID0gd2VpZ2h0O1xuICAgIGluZGljZXNbaV0gPSBpbmRleDtcbiAgICBpc05ld1tpXSA9IGZsYWc7XG4gICAgcmV0dXJuIDE7XG59XG5leHBvcnRzLnVuY2hlY2tlZEhlYXBQdXNoID0gdW5jaGVja2VkSGVhcFB1c2g7XG5mdW5jdGlvbiBidWlsZENhbmRpZGF0ZXMoY3VycmVudEdyYXBoLCBuVmVydGljZXMsIG5OZWlnaGJvcnMsIG1heENhbmRpZGF0ZXMsIHJhbmRvbSkge1xuICAgIHZhciBjYW5kaWRhdGVOZWlnaGJvcnMgPSBtYWtlSGVhcChuVmVydGljZXMsIG1heENhbmRpZGF0ZXMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRpY2VzOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuTmVpZ2hib3JzOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50R3JhcGhbMF1baV1bal0gPCAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaWR4ID0gY3VycmVudEdyYXBoWzBdW2ldW2pdO1xuICAgICAgICAgICAgdmFyIGlzbiA9IGN1cnJlbnRHcmFwaFsyXVtpXVtqXTtcbiAgICAgICAgICAgIHZhciBkID0gdXRpbHMudGF1UmFuZChyYW5kb20pO1xuICAgICAgICAgICAgaGVhcFB1c2goY2FuZGlkYXRlTmVpZ2hib3JzLCBpLCBkLCBpZHgsIGlzbik7XG4gICAgICAgICAgICBoZWFwUHVzaChjYW5kaWRhdGVOZWlnaGJvcnMsIGlkeCwgZCwgaSwgaXNuKTtcbiAgICAgICAgICAgIGN1cnJlbnRHcmFwaFsyXVtpXVtqXSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZU5laWdoYm9ycztcbn1cbmV4cG9ydHMuYnVpbGRDYW5kaWRhdGVzID0gYnVpbGRDYW5kaWRhdGVzO1xuZnVuY3Rpb24gZGVoZWFwU29ydChoZWFwKSB7XG4gICAgdmFyIGluZGljZXMgPSBoZWFwWzBdO1xuICAgIHZhciB3ZWlnaHRzID0gaGVhcFsxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGluZEhlYXAgPSBpbmRpY2VzW2ldO1xuICAgICAgICB2YXIgZGlzdEhlYXAgPSB3ZWlnaHRzW2ldO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGluZEhlYXAubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgICB2YXIgaW5kSGVhcEluZGV4ID0gaW5kSGVhcC5sZW5ndGggLSBqIC0gMTtcbiAgICAgICAgICAgIHZhciBkaXN0SGVhcEluZGV4ID0gZGlzdEhlYXAubGVuZ3RoIC0gaiAtIDE7XG4gICAgICAgICAgICB2YXIgdGVtcDEgPSBpbmRIZWFwWzBdO1xuICAgICAgICAgICAgaW5kSGVhcFswXSA9IGluZEhlYXBbaW5kSGVhcEluZGV4XTtcbiAgICAgICAgICAgIGluZEhlYXBbaW5kSGVhcEluZGV4XSA9IHRlbXAxO1xuICAgICAgICAgICAgdmFyIHRlbXAyID0gZGlzdEhlYXBbMF07XG4gICAgICAgICAgICBkaXN0SGVhcFswXSA9IGRpc3RIZWFwW2Rpc3RIZWFwSW5kZXhdO1xuICAgICAgICAgICAgZGlzdEhlYXBbZGlzdEhlYXBJbmRleF0gPSB0ZW1wMjtcbiAgICAgICAgICAgIHNpZnREb3duKGRpc3RIZWFwLCBpbmRIZWFwLCBkaXN0SGVhcEluZGV4LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBpbmRpY2VzOiBpbmRpY2VzLCB3ZWlnaHRzOiB3ZWlnaHRzIH07XG59XG5leHBvcnRzLmRlaGVhcFNvcnQgPSBkZWhlYXBTb3J0O1xuZnVuY3Rpb24gc2lmdERvd24oaGVhcDEsIGhlYXAyLCBjZWlsaW5nLCBlbHQpIHtcbiAgICB3aGlsZSAoZWx0ICogMiArIDEgPCBjZWlsaW5nKSB7XG4gICAgICAgIHZhciBsZWZ0Q2hpbGQgPSBlbHQgKiAyICsgMTtcbiAgICAgICAgdmFyIHJpZ2h0Q2hpbGQgPSBsZWZ0Q2hpbGQgKyAxO1xuICAgICAgICB2YXIgc3dhcCA9IGVsdDtcbiAgICAgICAgaWYgKGhlYXAxW3N3YXBdIDwgaGVhcDFbbGVmdENoaWxkXSkge1xuICAgICAgICAgICAgc3dhcCA9IGxlZnRDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmlnaHRDaGlsZCA8IGNlaWxpbmcgJiYgaGVhcDFbc3dhcF0gPCBoZWFwMVtyaWdodENoaWxkXSkge1xuICAgICAgICAgICAgc3dhcCA9IHJpZ2h0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN3YXAgPT09IGVsdCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGVtcDEgPSBoZWFwMVtlbHRdO1xuICAgICAgICAgICAgaGVhcDFbZWx0XSA9IGhlYXAxW3N3YXBdO1xuICAgICAgICAgICAgaGVhcDFbc3dhcF0gPSB0ZW1wMTtcbiAgICAgICAgICAgIHZhciB0ZW1wMiA9IGhlYXAyW2VsdF07XG4gICAgICAgICAgICBoZWFwMltlbHRdID0gaGVhcDJbc3dhcF07XG4gICAgICAgICAgICBoZWFwMltzd2FwXSA9IHRlbXAyO1xuICAgICAgICAgICAgZWx0ID0gc3dhcDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNtYWxsZXN0RmxhZ2dlZChoZWFwLCByb3cpIHtcbiAgICB2YXIgaW5kID0gaGVhcFswXVtyb3ddO1xuICAgIHZhciBkaXN0ID0gaGVhcFsxXVtyb3ddO1xuICAgIHZhciBmbGFnID0gaGVhcFsyXVtyb3ddO1xuICAgIHZhciBtaW5EaXN0ID0gSW5maW5pdHk7XG4gICAgdmFyIHJlc3VsdEluZGV4ID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPiBpbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGZsYWdbaV0gPT09IDEgJiYgZGlzdFtpXSA8IG1pbkRpc3QpIHtcbiAgICAgICAgICAgIG1pbkRpc3QgPSBkaXN0W2ldO1xuICAgICAgICAgICAgcmVzdWx0SW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHRJbmRleCA+PSAwKSB7XG4gICAgICAgIGZsYWdbcmVzdWx0SW5kZXhdID0gMDtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoaW5kW3Jlc3VsdEluZGV4XSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxufVxuZXhwb3J0cy5zbWFsbGVzdEZsYWdnZWQgPSBzbWFsbGVzdEZsYWdnZWQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB1bWFwXzEgPSByZXF1aXJlKFwiLi91bWFwXCIpO1xuZXhwb3J0cy5VTUFQID0gdW1hcF8xLlVNQVA7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbn07XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xuICAgIHJlc3VsdFtcImRlZmF1bHRcIl0gPSBtb2Q7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgX2E7XG52YXIgdXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbHNcIikpO1xudmFyIFNwYXJzZU1hdHJpeCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHVlcywgZGltcykge1xuICAgICAgICB0aGlzLmVudHJpZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMublJvd3MgPSAwO1xuICAgICAgICB0aGlzLm5Db2xzID0gMDtcbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoICE9PSBjb2xzLmxlbmd0aCB8fCByb3dzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3dzLCBjb2xzIGFuZCB2YWx1ZXMgYXJyYXlzIG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uUm93cyA9IGRpbXNbMF07XG4gICAgICAgIHRoaXMubkNvbHMgPSBkaW1zWzFdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICB2YXIgY29sID0gY29sc1tpXTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tEaW1zKHJvdywgY29sKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLm1ha2VLZXkocm93LCBjb2wpO1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHsgdmFsdWU6IHZhbHVlc1tpXSwgcm93OiByb3csIGNvbDogY29sIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUubWFrZUtleSA9IGZ1bmN0aW9uIChyb3csIGNvbCkge1xuICAgICAgICByZXR1cm4gcm93ICsgXCI6XCIgKyBjb2w7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNoZWNrRGltcyA9IGZ1bmN0aW9uIChyb3csIGNvbCkge1xuICAgICAgICB2YXIgd2l0aGluQm91bmRzID0gcm93IDwgdGhpcy5uUm93cyAmJiBjb2wgPCB0aGlzLm5Db2xzO1xuICAgICAgICBpZiAoIXdpdGhpbkJvdW5kcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3cgYW5kL29yIGNvbCBzcGVjaWZpZWQgb3V0c2lkZSBvZiBtYXRyaXggZGltZW5zaW9ucycpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChyb3csIGNvbCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGVja0RpbXMocm93LCBjb2wpO1xuICAgICAgICB2YXIga2V5ID0gdGhpcy5tYWtlS2V5KHJvdywgY29sKTtcbiAgICAgICAgaWYgKCF0aGlzLmVudHJpZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB7IHZhbHVlOiB2YWx1ZSwgcm93OiByb3csIGNvbDogY29sIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmdldChrZXkpLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHJvdywgY29sLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdm9pZCAwKSB7IGRlZmF1bHRWYWx1ZSA9IDA7IH1cbiAgICAgICAgdGhpcy5jaGVja0RpbXMocm93LCBjb2wpO1xuICAgICAgICB2YXIga2V5ID0gdGhpcy5tYWtlS2V5KHJvdywgY29sKTtcbiAgICAgICAgaWYgKHRoaXMuZW50cmllcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoa2V5KS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24gKG9yZGVyZWQpIHtcbiAgICAgICAgaWYgKG9yZGVyZWQgPT09IHZvaWQgMCkgeyBvcmRlcmVkID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgcm93Q29sVmFsdWVzID0gW107XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93Q29sVmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yZGVyZWQpIHtcbiAgICAgICAgICAgIHJvd0NvbFZhbHVlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEucm93ID09PSBiLnJvdykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jb2wgLSBiLmNvbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnJvdyAtIGIucm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dDb2xWYWx1ZXM7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldERpbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5uUm93cywgdGhpcy5uQ29sc107XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDIpLCBrZXkgPSBfYlswXSwgdmFsdWUgPSBfYlsxXTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yb3c7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5nZXRDb2xzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIF9iID0gX19yZWFkKF9hLCAyKSwga2V5ID0gX2JbMF0sIHZhbHVlID0gX2JbMV07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuY29sO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIF9iID0gX19yZWFkKF9hLCAyKSwga2V5ID0gX2JbMF0sIHZhbHVlID0gX2JbMV07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gZm4odmFsdWUudmFsdWUsIHZhbHVlLnJvdywgdmFsdWUuY29sKTsgfSk7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgdmFscyA9IFtdO1xuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHMucHVzaChmbih2YWx1ZS52YWx1ZSwgdmFsdWUucm93LCB2YWx1ZS5jb2wpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkaW1zID0gW3RoaXMublJvd3MsIHRoaXMubkNvbHNdO1xuICAgICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeCh0aGlzLmdldFJvd3MoKSwgdGhpcy5nZXRDb2xzKCksIHZhbHMsIGRpbXMpO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcm93cyA9IHV0aWxzLmVtcHR5KHRoaXMublJvd3MpO1xuICAgICAgICB2YXIgb3V0cHV0ID0gcm93cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnplcm9zKF90aGlzLm5Db2xzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgb3V0cHV0W3ZhbHVlLnJvd11bdmFsdWUuY29sXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuICAgIHJldHVybiBTcGFyc2VNYXRyaXg7XG59KCkpO1xuZXhwb3J0cy5TcGFyc2VNYXRyaXggPSBTcGFyc2VNYXRyaXg7XG5mdW5jdGlvbiB0cmFuc3Bvc2UobWF0cml4KSB7XG4gICAgdmFyIGNvbHMgPSBbXTtcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciB2YWxzID0gW107XG4gICAgbWF0cml4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCByb3csIGNvbCkge1xuICAgICAgICBjb2xzLnB1c2gocm93KTtcbiAgICAgICAgcm93cy5wdXNoKGNvbCk7XG4gICAgICAgIHZhbHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgdmFyIGRpbXMgPSBbbWF0cml4Lm5Db2xzLCBtYXRyaXgublJvd3NdO1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIGRpbXMpO1xufVxuZXhwb3J0cy50cmFuc3Bvc2UgPSB0cmFuc3Bvc2U7XG5mdW5jdGlvbiBpZGVudGl0eShzaXplKSB7XG4gICAgdmFyIF9hID0gX19yZWFkKHNpemUsIDEpLCByb3dzID0gX2FbMF07XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBTcGFyc2VNYXRyaXgoW10sIFtdLCBbXSwgc2l6ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgbWF0cml4LnNldChpLCBpLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbmV4cG9ydHMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbmZ1bmN0aW9uIHBhaXJ3aXNlTXVsdGlwbHkoYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCAqIHk7IH0pO1xufVxuZXhwb3J0cy5wYWlyd2lzZU11bHRpcGx5ID0gcGFpcndpc2VNdWx0aXBseTtcbmZ1bmN0aW9uIGFkZChhLCBiKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRXaXNlKGEsIGIsIGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4ICsgeTsgfSk7XG59XG5leHBvcnRzLmFkZCA9IGFkZDtcbmZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIpIHtcbiAgICByZXR1cm4gZWxlbWVudFdpc2UoYSwgYiwgZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIHggLSB5OyB9KTtcbn1cbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbmZ1bmN0aW9uIG1heGltdW0oYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKHggPiB5ID8geCA6IHkpOyB9KTtcbn1cbmV4cG9ydHMubWF4aW11bSA9IG1heGltdW07XG5mdW5jdGlvbiBtdWx0aXBseVNjYWxhcihhLCBzY2FsYXIpIHtcbiAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAqIHNjYWxhcjtcbiAgICB9KTtcbn1cbmV4cG9ydHMubXVsdGlwbHlTY2FsYXIgPSBtdWx0aXBseVNjYWxhcjtcbmZ1bmN0aW9uIGVsaW1pbmF0ZVplcm9zKG0pIHtcbiAgICB2YXIgemVyb0luZGljZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHZhbHVlcyA9IG0uZ2V0VmFsdWVzKCk7XG4gICAgdmFyIHJvd3MgPSBtLmdldFJvd3MoKTtcbiAgICB2YXIgY29scyA9IG0uZ2V0Q29scygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbaV0gPT09IDApIHtcbiAgICAgICAgICAgIHplcm9JbmRpY2VzLmFkZChpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmVtb3ZlQnlaZXJvSW5kZXggPSBmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICF6ZXJvSW5kaWNlcy5oYXMoaW5kZXgpOyB9O1xuICAgIHZhciBuZXh0VmFsdWVzID0gdmFsdWVzLmZpbHRlcihyZW1vdmVCeVplcm9JbmRleCk7XG4gICAgdmFyIG5leHRSb3dzID0gcm93cy5maWx0ZXIocmVtb3ZlQnlaZXJvSW5kZXgpO1xuICAgIHZhciBuZXh0Q29scyA9IGNvbHMuZmlsdGVyKHJlbW92ZUJ5WmVyb0luZGV4KTtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChuZXh0Um93cywgbmV4dENvbHMsIG5leHRWYWx1ZXMsIG0uZ2V0RGltcygpKTtcbn1cbmV4cG9ydHMuZWxpbWluYXRlWmVyb3MgPSBlbGltaW5hdGVaZXJvcztcbmZ1bmN0aW9uIG5vcm1hbGl6ZShtLCBub3JtVHlwZSkge1xuICAgIGlmIChub3JtVHlwZSA9PT0gdm9pZCAwKSB7IG5vcm1UeXBlID0gXCJsMlwiOyB9XG4gICAgdmFyIGVfMSwgX2E7XG4gICAgdmFyIG5vcm1GbiA9IG5vcm1GbnNbbm9ybVR5cGVdO1xuICAgIHZhciBjb2xzQnlSb3cgPSBuZXcgTWFwKCk7XG4gICAgbS5mb3JFYWNoKGZ1bmN0aW9uIChfLCByb3csIGNvbCkge1xuICAgICAgICB2YXIgY29scyA9IGNvbHNCeVJvdy5nZXQocm93KSB8fCBbXTtcbiAgICAgICAgY29scy5wdXNoKGNvbCk7XG4gICAgICAgIGNvbHNCeVJvdy5zZXQocm93LCBjb2xzKTtcbiAgICB9KTtcbiAgICB2YXIgbmV4dE1hdHJpeCA9IG5ldyBTcGFyc2VNYXRyaXgoW10sIFtdLCBbXSwgbS5nZXREaW1zKCkpO1xuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgY29scyA9IGNvbHNCeVJvdy5nZXQocm93KS5zb3J0KCk7XG4gICAgICAgIHZhciB2YWxzID0gY29scy5tYXAoZnVuY3Rpb24gKGNvbCkgeyByZXR1cm4gbS5nZXQocm93LCBjb2wpOyB9KTtcbiAgICAgICAgdmFyIG5vcm0gPSBub3JtRm4odmFscyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9ybS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbmV4dE1hdHJpeC5zZXQocm93LCBjb2xzW2ldLCBub3JtW2ldKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhjb2xzQnlSb3cua2V5cygpKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgX2xvb3BfMShyb3cpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dE1hdHJpeDtcbn1cbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xudmFyIG5vcm1GbnMgPSAoX2EgPSB7fSxcbiAgICBfYVtcIm1heFwiXSA9IGZ1bmN0aW9uICh4cykge1xuICAgICAgICB2YXIgbWF4ID0gLUluZmluaXR5O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtYXggPSB4c1tpXSA+IG1heCA/IHhzW2ldIDogbWF4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4cy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggLyBtYXg7IH0pO1xuICAgIH0sXG4gICAgX2FbXCJsMVwiXSA9IGZ1bmN0aW9uICh4cykge1xuICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtICs9IHhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4cy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggLyBzdW07IH0pO1xuICAgIH0sXG4gICAgX2FbXCJsMlwiXSA9IGZ1bmN0aW9uICh4cykge1xuICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtICs9IE1hdGgucG93KHhzW2ldLCAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geHMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coeCwgMikgLyBzdW0pOyB9KTtcbiAgICB9LFxuICAgIF9hKTtcbmZ1bmN0aW9uIGVsZW1lbnRXaXNlKGEsIGIsIG9wKSB7XG4gICAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgY29scyA9IFtdO1xuICAgIHZhciB2YWxzID0gW107XG4gICAgdmFyIG9wZXJhdGUgPSBmdW5jdGlvbiAocm93LCBjb2wpIHtcbiAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICAgIGNvbHMucHVzaChjb2wpO1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gb3AoYS5nZXQocm93LCBjb2wpLCBiLmdldChyb3csIGNvbCkpO1xuICAgICAgICB2YWxzLnB1c2gobmV4dFZhbHVlKTtcbiAgICB9O1xuICAgIHZhciB2YWx1ZXNBID0gYS5nZXRWYWx1ZXMoKTtcbiAgICB2YXIgcm93c0EgPSBhLmdldFJvd3MoKTtcbiAgICB2YXIgY29sc0EgPSBhLmdldENvbHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlc0EubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHJvd3NBW2ldO1xuICAgICAgICB2YXIgY29sID0gY29sc0FbaV07XG4gICAgICAgIHZhciBrZXkgPSByb3cgKyBcIjpcIiArIGNvbDtcbiAgICAgICAgdmlzaXRlZC5hZGQoa2V5KTtcbiAgICAgICAgb3BlcmF0ZShyb3csIGNvbCk7XG4gICAgfVxuICAgIHZhciB2YWx1ZXNCID0gYi5nZXRWYWx1ZXMoKTtcbiAgICB2YXIgcm93c0IgPSBiLmdldFJvd3MoKTtcbiAgICB2YXIgY29sc0IgPSBiLmdldENvbHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlc0IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHJvd3NCW2ldO1xuICAgICAgICB2YXIgY29sID0gY29sc0JbaV07XG4gICAgICAgIHZhciBrZXkgPSByb3cgKyBcIjpcIiArIGNvbDtcbiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKGtleSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgb3BlcmF0ZShyb3csIGNvbCk7XG4gICAgfVxuICAgIHZhciBkaW1zID0gW2EublJvd3MsIGEubkNvbHNdO1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIGRpbXMpO1xufVxuZnVuY3Rpb24gZ2V0Q1NSKHgpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIHJvdywgY29sKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHZhbHVlOiB2YWx1ZSwgcm93OiByb3csIGNvbDogY29sIH0pO1xuICAgIH0pO1xuICAgIGVudHJpZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBpZiAoYS5yb3cgPT09IGIucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gYS5jb2wgLSBiLmNvbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhLnJvdyAtIGIucm93O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdmFyIGluZHB0ciA9IFtdO1xuICAgIHZhciBjdXJyZW50Um93ID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBfYSA9IGVudHJpZXNbaV0sIHJvdyA9IF9hLnJvdywgY29sID0gX2EuY29sLCB2YWx1ZSA9IF9hLnZhbHVlO1xuICAgICAgICBpZiAocm93ICE9PSBjdXJyZW50Um93KSB7XG4gICAgICAgICAgICBjdXJyZW50Um93ID0gcm93O1xuICAgICAgICAgICAgaW5kcHRyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5kaWNlcy5wdXNoKGNvbCk7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW5kaWNlczogaW5kaWNlcywgdmFsdWVzOiB2YWx1ZXMsIGluZHB0cjogaW5kcHRyIH07XG59XG5leHBvcnRzLmdldENTUiA9IGdldENTUjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xufTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XG4gICAgcmVzdWx0W1wiZGVmYXVsdFwiXSA9IG1vZDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBoZWFwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2hlYXBcIikpO1xudmFyIG1hdHJpeCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9tYXRyaXhcIikpO1xudmFyIHRyZWUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdHJlZVwiKSk7XG52YXIgdXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbHNcIikpO1xuZnVuY3Rpb24gbWFrZU5ORGVzY2VudChkaXN0YW5jZUZuLCByYW5kb20pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbk5EZXNjZW50KGRhdGEsIGxlYWZBcnJheSwgbk5laWdoYm9ycywgbkl0ZXJzLCBtYXhDYW5kaWRhdGVzLCBkZWx0YSwgcmhvLCBycFRyZWVJbml0KSB7XG4gICAgICAgIGlmIChuSXRlcnMgPT09IHZvaWQgMCkgeyBuSXRlcnMgPSAxMDsgfVxuICAgICAgICBpZiAobWF4Q2FuZGlkYXRlcyA9PT0gdm9pZCAwKSB7IG1heENhbmRpZGF0ZXMgPSA1MDsgfVxuICAgICAgICBpZiAoZGVsdGEgPT09IHZvaWQgMCkgeyBkZWx0YSA9IDAuMDAxOyB9XG4gICAgICAgIGlmIChyaG8gPT09IHZvaWQgMCkgeyByaG8gPSAwLjU7IH1cbiAgICAgICAgaWYgKHJwVHJlZUluaXQgPT09IHZvaWQgMCkgeyBycFRyZWVJbml0ID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgblZlcnRpY2VzID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBjdXJyZW50R3JhcGggPSBoZWFwLm1ha2VIZWFwKGRhdGEubGVuZ3RoLCBuTmVpZ2hib3JzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IGhlYXAucmVqZWN0aW9uU2FtcGxlKG5OZWlnaGJvcnMsIGRhdGEubGVuZ3RoLCByYW5kb20pO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZUZuKGRhdGFbaV0sIGRhdGFbaW5kaWNlc1tqXV0pO1xuICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBpLCBkLCBpbmRpY2VzW2pdLCAxKTtcbiAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgaW5kaWNlc1tqXSwgZCwgaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJwVHJlZUluaXQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbGVhZkFycmF5Lmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZWFmQXJyYXlbbl0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlYWZBcnJheVtuXVtpXSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGxlYWZBcnJheVtuXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlYWZBcnJheVtuXVtqXSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW2xlYWZBcnJheVtuXVtpXV0sIGRhdGFbbGVhZkFycmF5W25dW2pdXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgbGVhZkFycmF5W25dW2ldLCBkLCBsZWFmQXJyYXlbbl1bal0sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGxlYWZBcnJheVtuXVtqXSwgZCwgbGVhZkFycmF5W25dW2ldLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5JdGVyczsgbisrKSB7XG4gICAgICAgICAgICB2YXIgY2FuZGlkYXRlTmVpZ2hib3JzID0gaGVhcC5idWlsZENhbmRpZGF0ZXMoY3VycmVudEdyYXBoLCBuVmVydGljZXMsIG5OZWlnaGJvcnMsIG1heENhbmRpZGF0ZXMsIHJhbmRvbSk7XG4gICAgICAgICAgICB2YXIgYyA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXhDYW5kaWRhdGVzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBNYXRoLmZsb29yKGNhbmRpZGF0ZU5laWdoYm9yc1swXVtpXVtqXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwIDwgMCB8fCB1dGlscy50YXVSYW5kKHJhbmRvbSkgPCByaG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWF4Q2FuZGlkYXRlczsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IE1hdGguZmxvb3IoY2FuZGlkYXRlTmVpZ2hib3JzWzBdW2ldW2tdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaiA9IGNhbmRpZGF0ZU5laWdoYm9yc1syXVtpXVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjayA9IGNhbmRpZGF0ZU5laWdoYm9yc1syXVtpXVtrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxIDwgMCB8fCAoIWNqICYmICFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW3BdLCBkYXRhW3FdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgKz0gaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIHAsIGQsIHEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYyArPSBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgcSwgZCwgcCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA8PSBkZWx0YSAqIG5OZWlnaGJvcnMgKiBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBzb3J0ZWQgPSBoZWFwLmRlaGVhcFNvcnQoY3VycmVudEdyYXBoKTtcbiAgICAgICAgcmV0dXJuIHNvcnRlZDtcbiAgICB9O1xufVxuZXhwb3J0cy5tYWtlTk5EZXNjZW50ID0gbWFrZU5ORGVzY2VudDtcbmZ1bmN0aW9uIG1ha2VJbml0aWFsaXphdGlvbnMoZGlzdGFuY2VGbikge1xuICAgIGZ1bmN0aW9uIGluaXRGcm9tUmFuZG9tKG5OZWlnaGJvcnMsIGRhdGEsIHF1ZXJ5UG9pbnRzLCBfaGVhcCwgcmFuZG9tKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnlQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpbmRpY2VzID0gdXRpbHMucmVqZWN0aW9uU2FtcGxlKG5OZWlnaGJvcnMsIGRhdGEubGVuZ3RoLCByYW5kb20pO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGljZXNbal0gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RhbmNlRm4oZGF0YVtpbmRpY2VzW2pdXSwgcXVlcnlQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goX2hlYXAsIGksIGQsIGluZGljZXNbal0sIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRGcm9tVHJlZShfdHJlZSwgZGF0YSwgcXVlcnlQb2ludHMsIF9oZWFwLCByYW5kb20pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVyeVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0cmVlLnNlYXJjaEZsYXRUcmVlKHF1ZXJ5UG9pbnRzW2ldLCBfdHJlZSwgcmFuZG9tKTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmRpY2VzW2pdIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW2luZGljZXNbal1dLCBxdWVyeVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChfaGVhcCwgaSwgZCwgaW5kaWNlc1tqXSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4geyBpbml0RnJvbVJhbmRvbTogaW5pdEZyb21SYW5kb20sIGluaXRGcm9tVHJlZTogaW5pdEZyb21UcmVlIH07XG59XG5leHBvcnRzLm1ha2VJbml0aWFsaXphdGlvbnMgPSBtYWtlSW5pdGlhbGl6YXRpb25zO1xuZnVuY3Rpb24gbWFrZUluaXRpYWxpemVkTk5TZWFyY2goZGlzdGFuY2VGbikge1xuICAgIHJldHVybiBmdW5jdGlvbiBublNlYXJjaEZuKGRhdGEsIGdyYXBoLCBpbml0aWFsaXphdGlvbiwgcXVlcnlQb2ludHMpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHZhciBfYiA9IG1hdHJpeC5nZXRDU1IoZ3JhcGgpLCBpbmRpY2VzID0gX2IuaW5kaWNlcywgaW5kcHRyID0gX2IuaW5kcHRyO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXJ5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdHJpZWQgPSBuZXcgU2V0KGluaXRpYWxpemF0aW9uWzBdW2ldKTtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IGhlYXAuc21hbGxlc3RGbGFnZ2VkKGluaXRpYWxpemF0aW9uLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZXMgPSBpbmRpY2VzLnNsaWNlKGluZHB0clt2ZXJ0ZXhdLCBpbmRwdHJbdmVydGV4ICsgMV0pO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNhbmRpZGF0ZXNfMSA9IF9fdmFsdWVzKGNhbmRpZGF0ZXMpLCBjYW5kaWRhdGVzXzFfMSA9IGNhbmRpZGF0ZXNfMS5uZXh0KCk7ICFjYW5kaWRhdGVzXzFfMS5kb25lOyBjYW5kaWRhdGVzXzFfMSA9IGNhbmRpZGF0ZXNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUgPT09IHZlcnRleCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9PT0gLTEgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmllZC5oYXMoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZUZuKGRhdGFbY2FuZGlkYXRlXSwgcXVlcnlQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhcC51bmNoZWNrZWRIZWFwUHVzaChpbml0aWFsaXphdGlvbiwgaSwgZCwgY2FuZGlkYXRlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWVkLmFkZChjYW5kaWRhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlc18xXzEgJiYgIWNhbmRpZGF0ZXNfMV8xLmRvbmUgJiYgKF9hID0gY2FuZGlkYXRlc18xLnJldHVybikpIF9hLmNhbGwoY2FuZGlkYXRlc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbml0aWFsaXphdGlvbjtcbiAgICB9O1xufVxuZXhwb3J0cy5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCA9IG1ha2VJbml0aWFsaXplZE5OU2VhcmNoO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZVNlYXJjaChmb3Jlc3QsIGRhdGEsIHF1ZXJ5UG9pbnRzLCBuTmVpZ2hib3JzLCBpbml0RnJvbVJhbmRvbSwgaW5pdEZyb21UcmVlLCByYW5kb20pIHtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICB2YXIgcmVzdWx0cyA9IGhlYXAubWFrZUhlYXAocXVlcnlQb2ludHMubGVuZ3RoLCBuTmVpZ2hib3JzKTtcbiAgICBpbml0RnJvbVJhbmRvbShuTmVpZ2hib3JzLCBkYXRhLCBxdWVyeVBvaW50cywgcmVzdWx0cywgcmFuZG9tKTtcbiAgICBpZiAoZm9yZXN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBmb3Jlc3RfMSA9IF9fdmFsdWVzKGZvcmVzdCksIGZvcmVzdF8xXzEgPSBmb3Jlc3RfMS5uZXh0KCk7ICFmb3Jlc3RfMV8xLmRvbmU7IGZvcmVzdF8xXzEgPSBmb3Jlc3RfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHJlZV8xID0gZm9yZXN0XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpbml0RnJvbVRyZWUodHJlZV8xLCBkYXRhLCBxdWVyeVBvaW50cywgcmVzdWx0cywgcmFuZG9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcmVzdF8xXzEgJiYgIWZvcmVzdF8xXzEuZG9uZSAmJiAoX2EgPSBmb3Jlc3RfMS5yZXR1cm4pKSBfYS5jYWxsKGZvcmVzdF8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbn1cbmV4cG9ydHMuaW5pdGlhbGl6ZVNlYXJjaCA9IGluaXRpYWxpemVTZWFyY2g7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZCA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWQpIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICAgIHJldHVybiBhcjtcbn07XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxzXCIpKTtcbnZhciBGbGF0VHJlZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmxhdFRyZWUoaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzKSB7XG4gICAgICAgIHRoaXMuaHlwZXJwbGFuZXMgPSBoeXBlcnBsYW5lcztcbiAgICAgICAgdGhpcy5vZmZzZXRzID0gb2Zmc2V0cztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzO1xuICAgIH1cbiAgICByZXR1cm4gRmxhdFRyZWU7XG59KCkpO1xuZXhwb3J0cy5GbGF0VHJlZSA9IEZsYXRUcmVlO1xuZnVuY3Rpb24gbWFrZUZvcmVzdChkYXRhLCBuTmVpZ2hib3JzLCBuVHJlZXMsIHJhbmRvbSkge1xuICAgIHZhciBsZWFmU2l6ZSA9IE1hdGgubWF4KDEwLCBuTmVpZ2hib3JzKTtcbiAgICB2YXIgdHJlZXMgPSB1dGlsc1xuICAgICAgICAucmFuZ2UoblRyZWVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChfLCBpKSB7IHJldHVybiBtYWtlVHJlZShkYXRhLCBsZWFmU2l6ZSwgaSwgcmFuZG9tKTsgfSk7XG4gICAgdmFyIGZvcmVzdCA9IHRyZWVzLm1hcChmdW5jdGlvbiAodHJlZSkgeyByZXR1cm4gZmxhdHRlblRyZWUodHJlZSwgbGVhZlNpemUpOyB9KTtcbiAgICByZXR1cm4gZm9yZXN0O1xufVxuZXhwb3J0cy5tYWtlRm9yZXN0ID0gbWFrZUZvcmVzdDtcbmZ1bmN0aW9uIG1ha2VUcmVlKGRhdGEsIGxlYWZTaXplLCBuLCByYW5kb20pIHtcbiAgICBpZiAobGVhZlNpemUgPT09IHZvaWQgMCkgeyBsZWFmU2l6ZSA9IDMwOyB9XG4gICAgdmFyIGluZGljZXMgPSB1dGlscy5yYW5nZShkYXRhLmxlbmd0aCk7XG4gICAgdmFyIHRyZWUgPSBtYWtlRXVjbGlkZWFuVHJlZShkYXRhLCBpbmRpY2VzLCBsZWFmU2l6ZSwgbiwgcmFuZG9tKTtcbiAgICByZXR1cm4gdHJlZTtcbn1cbmZ1bmN0aW9uIG1ha2VFdWNsaWRlYW5UcmVlKGRhdGEsIGluZGljZXMsIGxlYWZTaXplLCBxLCByYW5kb20pIHtcbiAgICBpZiAobGVhZlNpemUgPT09IHZvaWQgMCkgeyBsZWFmU2l6ZSA9IDMwOyB9XG4gICAgaWYgKGluZGljZXMubGVuZ3RoID4gbGVhZlNpemUpIHtcbiAgICAgICAgdmFyIHNwbGl0UmVzdWx0cyA9IGV1Y2xpZGVhblJhbmRvbVByb2plY3Rpb25TcGxpdChkYXRhLCBpbmRpY2VzLCByYW5kb20pO1xuICAgICAgICB2YXIgaW5kaWNlc0xlZnQgPSBzcGxpdFJlc3VsdHMuaW5kaWNlc0xlZnQsIGluZGljZXNSaWdodCA9IHNwbGl0UmVzdWx0cy5pbmRpY2VzUmlnaHQsIGh5cGVycGxhbmUgPSBzcGxpdFJlc3VsdHMuaHlwZXJwbGFuZSwgb2Zmc2V0ID0gc3BsaXRSZXN1bHRzLm9mZnNldDtcbiAgICAgICAgdmFyIGxlZnRDaGlsZCA9IG1ha2VFdWNsaWRlYW5UcmVlKGRhdGEsIGluZGljZXNMZWZ0LCBsZWFmU2l6ZSwgcSArIDEsIHJhbmRvbSk7XG4gICAgICAgIHZhciByaWdodENoaWxkID0gbWFrZUV1Y2xpZGVhblRyZWUoZGF0YSwgaW5kaWNlc1JpZ2h0LCBsZWFmU2l6ZSwgcSArIDEsIHJhbmRvbSk7XG4gICAgICAgIHZhciBub2RlID0geyBsZWZ0Q2hpbGQ6IGxlZnRDaGlsZCwgcmlnaHRDaGlsZDogcmlnaHRDaGlsZCwgaXNMZWFmOiBmYWxzZSwgaHlwZXJwbGFuZTogaHlwZXJwbGFuZSwgb2Zmc2V0OiBvZmZzZXQgfTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgbm9kZSA9IHsgaW5kaWNlczogaW5kaWNlcywgaXNMZWFmOiB0cnVlIH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGV1Y2xpZGVhblJhbmRvbVByb2plY3Rpb25TcGxpdChkYXRhLCBpbmRpY2VzLCByYW5kb20pIHtcbiAgICB2YXIgZGltID0gZGF0YVswXS5sZW5ndGg7XG4gICAgdmFyIGxlZnRJbmRleCA9IHV0aWxzLnRhdVJhbmRJbnQoaW5kaWNlcy5sZW5ndGgsIHJhbmRvbSk7XG4gICAgdmFyIHJpZ2h0SW5kZXggPSB1dGlscy50YXVSYW5kSW50KGluZGljZXMubGVuZ3RoLCByYW5kb20pO1xuICAgIHJpZ2h0SW5kZXggKz0gbGVmdEluZGV4ID09PSByaWdodEluZGV4ID8gMSA6IDA7XG4gICAgcmlnaHRJbmRleCA9IHJpZ2h0SW5kZXggJSBpbmRpY2VzLmxlbmd0aDtcbiAgICB2YXIgbGVmdCA9IGluZGljZXNbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHQgPSBpbmRpY2VzW3JpZ2h0SW5kZXhdO1xuICAgIHZhciBoeXBlcnBsYW5lT2Zmc2V0ID0gMDtcbiAgICB2YXIgaHlwZXJwbGFuZVZlY3RvciA9IHV0aWxzLnplcm9zKGRpbSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoeXBlcnBsYW5lVmVjdG9yLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGh5cGVycGxhbmVWZWN0b3JbaV0gPSBkYXRhW2xlZnRdW2ldIC0gZGF0YVtyaWdodF1baV07XG4gICAgICAgIGh5cGVycGxhbmVPZmZzZXQgLT1cbiAgICAgICAgICAgIChoeXBlcnBsYW5lVmVjdG9yW2ldICogKGRhdGFbbGVmdF1baV0gKyBkYXRhW3JpZ2h0XVtpXSkpIC8gMi4wO1xuICAgIH1cbiAgICB2YXIgbkxlZnQgPSAwO1xuICAgIHZhciBuUmlnaHQgPSAwO1xuICAgIHZhciBzaWRlID0gdXRpbHMuemVyb3MoaW5kaWNlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbWFyZ2luID0gaHlwZXJwbGFuZU9mZnNldDtcbiAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgbWFyZ2luICs9IGh5cGVycGxhbmVWZWN0b3JbZF0gKiBkYXRhW2luZGljZXNbaV1dW2RdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXJnaW4gPT09IDApIHtcbiAgICAgICAgICAgIHNpZGVbaV0gPSB1dGlscy50YXVSYW5kSW50KDIsIHJhbmRvbSk7XG4gICAgICAgICAgICBpZiAoc2lkZVtpXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIG5MZWZ0ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBuUmlnaHQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXJnaW4gPiAwKSB7XG4gICAgICAgICAgICBzaWRlW2ldID0gMDtcbiAgICAgICAgICAgIG5MZWZ0ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzaWRlW2ldID0gMTtcbiAgICAgICAgICAgIG5SaWdodCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBpbmRpY2VzTGVmdCA9IHV0aWxzLnplcm9zKG5MZWZ0KTtcbiAgICB2YXIgaW5kaWNlc1JpZ2h0ID0gdXRpbHMuemVyb3MoblJpZ2h0KTtcbiAgICBuTGVmdCA9IDA7XG4gICAgblJpZ2h0ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNpZGVbaV0gPT09IDApIHtcbiAgICAgICAgICAgIGluZGljZXNMZWZ0W25MZWZ0XSA9IGluZGljZXNbaV07XG4gICAgICAgICAgICBuTGVmdCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5kaWNlc1JpZ2h0W25SaWdodF0gPSBpbmRpY2VzW2ldO1xuICAgICAgICAgICAgblJpZ2h0ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5kaWNlc0xlZnQ6IGluZGljZXNMZWZ0LFxuICAgICAgICBpbmRpY2VzUmlnaHQ6IGluZGljZXNSaWdodCxcbiAgICAgICAgaHlwZXJwbGFuZTogaHlwZXJwbGFuZVZlY3RvcixcbiAgICAgICAgb2Zmc2V0OiBoeXBlcnBsYW5lT2Zmc2V0LFxuICAgIH07XG59XG5mdW5jdGlvbiBmbGF0dGVuVHJlZSh0cmVlLCBsZWFmU2l6ZSkge1xuICAgIHZhciBuTm9kZXMgPSBudW1Ob2Rlcyh0cmVlKTtcbiAgICB2YXIgbkxlYXZlcyA9IG51bUxlYXZlcyh0cmVlKTtcbiAgICB2YXIgaHlwZXJwbGFuZXMgPSB1dGlsc1xuICAgICAgICAucmFuZ2Uobk5vZGVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxzLnplcm9zKHRyZWUuaHlwZXJwbGFuZSA/IHRyZWUuaHlwZXJwbGFuZS5sZW5ndGggOiAwKTsgfSk7XG4gICAgdmFyIG9mZnNldHMgPSB1dGlscy56ZXJvcyhuTm9kZXMpO1xuICAgIHZhciBjaGlsZHJlbiA9IHV0aWxzLnJhbmdlKG5Ob2RlcykubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIFstMSwgLTFdOyB9KTtcbiAgICB2YXIgaW5kaWNlcyA9IHV0aWxzXG4gICAgICAgIC5yYW5nZShuTGVhdmVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxzLnJhbmdlKGxlYWZTaXplKS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gLTE7IH0pOyB9KTtcbiAgICByZWN1cnNpdmVGbGF0dGVuKHRyZWUsIGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcywgMCwgMCk7XG4gICAgcmV0dXJuIG5ldyBGbGF0VHJlZShoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMpO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlRmxhdHRlbih0cmVlLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0sIGxlYWZOdW0pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRyZWUuaXNMZWFmKSB7XG4gICAgICAgIGNoaWxkcmVuW25vZGVOdW1dWzBdID0gLWxlYWZOdW07XG4gICAgICAgIChfYSA9IGluZGljZXNbbGVhZk51bV0pLnNwbGljZS5hcHBseShfYSwgX19zcHJlYWQoWzAsIHRyZWUuaW5kaWNlcy5sZW5ndGhdLCB0cmVlLmluZGljZXMpKTtcbiAgICAgICAgbGVhZk51bSArPSAxO1xuICAgICAgICByZXR1cm4geyBub2RlTnVtOiBub2RlTnVtLCBsZWFmTnVtOiBsZWFmTnVtIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBoeXBlcnBsYW5lc1tub2RlTnVtXSA9IHRyZWUuaHlwZXJwbGFuZTtcbiAgICAgICAgb2Zmc2V0c1tub2RlTnVtXSA9IHRyZWUub2Zmc2V0O1xuICAgICAgICBjaGlsZHJlbltub2RlTnVtXVswXSA9IG5vZGVOdW0gKyAxO1xuICAgICAgICB2YXIgb2xkTm9kZU51bSA9IG5vZGVOdW07XG4gICAgICAgIHZhciByZXMgPSByZWN1cnNpdmVGbGF0dGVuKHRyZWUubGVmdENoaWxkLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0gKyAxLCBsZWFmTnVtKTtcbiAgICAgICAgbm9kZU51bSA9IHJlcy5ub2RlTnVtO1xuICAgICAgICBsZWFmTnVtID0gcmVzLmxlYWZOdW07XG4gICAgICAgIGNoaWxkcmVuW29sZE5vZGVOdW1dWzFdID0gbm9kZU51bSArIDE7XG4gICAgICAgIHJlcyA9IHJlY3Vyc2l2ZUZsYXR0ZW4odHJlZS5yaWdodENoaWxkLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0gKyAxLCBsZWFmTnVtKTtcbiAgICAgICAgcmV0dXJuIHsgbm9kZU51bTogcmVzLm5vZGVOdW0sIGxlYWZOdW06IHJlcy5sZWFmTnVtIH07XG4gICAgfVxufVxuZnVuY3Rpb24gbnVtTm9kZXModHJlZSkge1xuICAgIGlmICh0cmVlLmlzTGVhZikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAxICsgbnVtTm9kZXModHJlZS5sZWZ0Q2hpbGQpICsgbnVtTm9kZXModHJlZS5yaWdodENoaWxkKTtcbiAgICB9XG59XG5mdW5jdGlvbiBudW1MZWF2ZXModHJlZSkge1xuICAgIGlmICh0cmVlLmlzTGVhZikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudW1MZWF2ZXModHJlZS5sZWZ0Q2hpbGQpICsgbnVtTGVhdmVzKHRyZWUucmlnaHRDaGlsZCk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZUxlYWZBcnJheShycEZvcmVzdCkge1xuICAgIHZhciBlXzEsIF9hO1xuICAgIGlmIChycEZvcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIHJwRm9yZXN0XzEgPSBfX3ZhbHVlcyhycEZvcmVzdCksIHJwRm9yZXN0XzFfMSA9IHJwRm9yZXN0XzEubmV4dCgpOyAhcnBGb3Jlc3RfMV8xLmRvbmU7IHJwRm9yZXN0XzFfMSA9IHJwRm9yZXN0XzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRyZWUgPSBycEZvcmVzdF8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2guYXBwbHkob3V0cHV0LCBfX3NwcmVhZCh0cmVlLmluZGljZXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHJwRm9yZXN0XzFfMSAmJiAhcnBGb3Jlc3RfMV8xLmRvbmUgJiYgKF9hID0gcnBGb3Jlc3RfMS5yZXR1cm4pKSBfYS5jYWxsKHJwRm9yZXN0XzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW1stMV1dO1xuICAgIH1cbn1cbmV4cG9ydHMubWFrZUxlYWZBcnJheSA9IG1ha2VMZWFmQXJyYXk7XG5mdW5jdGlvbiBzZWxlY3RTaWRlKGh5cGVycGxhbmUsIG9mZnNldCwgcG9pbnQsIHJhbmRvbSkge1xuICAgIHZhciBtYXJnaW4gPSBvZmZzZXQ7XG4gICAgZm9yICh2YXIgZCA9IDA7IGQgPCBwb2ludC5sZW5ndGg7IGQrKykge1xuICAgICAgICBtYXJnaW4gKz0gaHlwZXJwbGFuZVtkXSAqIHBvaW50W2RdO1xuICAgIH1cbiAgICBpZiAobWFyZ2luID09PSAwKSB7XG4gICAgICAgIHZhciBzaWRlID0gdXRpbHMudGF1UmFuZEludCgyLCByYW5kb20pO1xuICAgICAgICByZXR1cm4gc2lkZTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWFyZ2luID4gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNlYXJjaEZsYXRUcmVlKHBvaW50LCB0cmVlLCByYW5kb20pIHtcbiAgICB2YXIgbm9kZSA9IDA7XG4gICAgd2hpbGUgKHRyZWUuY2hpbGRyZW5bbm9kZV1bMF0gPiAwKSB7XG4gICAgICAgIHZhciBzaWRlID0gc2VsZWN0U2lkZSh0cmVlLmh5cGVycGxhbmVzW25vZGVdLCB0cmVlLm9mZnNldHNbbm9kZV0sIHBvaW50LCByYW5kb20pO1xuICAgICAgICBpZiAoc2lkZSA9PT0gMCkge1xuICAgICAgICAgICAgbm9kZSA9IHRyZWUuY2hpbGRyZW5bbm9kZV1bMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gdHJlZS5jaGlsZHJlbltub2RlXVsxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW5kZXggPSAtMSAqIHRyZWUuY2hpbGRyZW5bbm9kZV1bMF07XG4gICAgcmV0dXJuIHRyZWUuaW5kaWNlc1tpbmRleF07XG59XG5leHBvcnRzLnNlYXJjaEZsYXRUcmVlID0gc2VhcmNoRmxhdFRyZWU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWQgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGhlYXAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaGVhcFwiKSk7XG52YXIgbWF0cml4ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL21hdHJpeFwiKSk7XG52YXIgbm5EZXNjZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL25uX2Rlc2NlbnRcIikpO1xudmFyIHRyZWUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdHJlZVwiKSk7XG52YXIgdXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbHNcIikpO1xudmFyIG1sX2xldmVuYmVyZ19tYXJxdWFyZHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibWwtbGV2ZW5iZXJnLW1hcnF1YXJkdFwiKSk7XG52YXIgU01PT1RIX0tfVE9MRVJBTkNFID0gMWUtNTtcbnZhciBNSU5fS19ESVNUX1NDQUxFID0gMWUtMztcbnZhciBVTUFQID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBVTUFQKHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zID09PSB2b2lkIDApIHsgcGFyYW1zID0ge307IH1cbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5sZWFybmluZ1JhdGUgPSAxLjA7XG4gICAgICAgIHRoaXMubG9jYWxDb25uZWN0aXZpdHkgPSAxLjA7XG4gICAgICAgIHRoaXMubWluRGlzdCA9IDAuMTtcbiAgICAgICAgdGhpcy5uQ29tcG9uZW50cyA9IDI7XG4gICAgICAgIHRoaXMubkVwb2NocyA9IDA7XG4gICAgICAgIHRoaXMubk5laWdoYm9ycyA9IDE1O1xuICAgICAgICB0aGlzLm5lZ2F0aXZlU2FtcGxlUmF0ZSA9IDU7XG4gICAgICAgIHRoaXMucmFuZG9tID0gTWF0aC5yYW5kb207XG4gICAgICAgIHRoaXMucmVwdWxzaW9uU3RyZW5ndGggPSAxLjA7XG4gICAgICAgIHRoaXMuc2V0T3BNaXhSYXRpbyA9IDEuMDtcbiAgICAgICAgdGhpcy5zcHJlYWQgPSAxLjA7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUXVldWVTaXplID0gNC4wO1xuICAgICAgICB0aGlzLnRhcmdldE1ldHJpYyA9IFwiY2F0ZWdvcmljYWxcIjtcbiAgICAgICAgdGhpcy50YXJnZXRXZWlnaHQgPSAwLjU7XG4gICAgICAgIHRoaXMudGFyZ2V0Tk5laWdoYm9ycyA9IHRoaXMubk5laWdoYm9ycztcbiAgICAgICAgdGhpcy5kaXN0YW5jZUZuID0gZXVjbGlkZWFuO1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ycEZvcmVzdCA9IFtdO1xuICAgICAgICB0aGlzLmVtYmVkZGluZyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlID0gbmV3IE9wdGltaXphdGlvblN0YXRlKCk7XG4gICAgICAgIHZhciBzZXRQYXJhbSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIF90aGlzW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgICAgfTtcbiAgICAgICAgc2V0UGFyYW0oJ2Rpc3RhbmNlRm4nKTtcbiAgICAgICAgc2V0UGFyYW0oJ2xlYXJuaW5nUmF0ZScpO1xuICAgICAgICBzZXRQYXJhbSgnbG9jYWxDb25uZWN0aXZpdHknKTtcbiAgICAgICAgc2V0UGFyYW0oJ21pbkRpc3QnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25Db21wb25lbnRzJyk7XG4gICAgICAgIHNldFBhcmFtKCduRXBvY2hzJyk7XG4gICAgICAgIHNldFBhcmFtKCduTmVpZ2hib3JzJyk7XG4gICAgICAgIHNldFBhcmFtKCduZWdhdGl2ZVNhbXBsZVJhdGUnKTtcbiAgICAgICAgc2V0UGFyYW0oJ3JhbmRvbScpO1xuICAgICAgICBzZXRQYXJhbSgncmVwdWxzaW9uU3RyZW5ndGgnKTtcbiAgICAgICAgc2V0UGFyYW0oJ3NldE9wTWl4UmF0aW8nKTtcbiAgICAgICAgc2V0UGFyYW0oJ3NwcmVhZCcpO1xuICAgICAgICBzZXRQYXJhbSgndHJhbnNmb3JtUXVldWVTaXplJyk7XG4gICAgfVxuICAgIFVNQVAucHJvdG90eXBlLmZpdCA9IGZ1bmN0aW9uIChYKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpdChYKTtcbiAgICAgICAgdGhpcy5vcHRpbWl6ZUxheW91dCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbWJlZGRpbmc7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5maXRBc3luYyA9IGZ1bmN0aW9uIChYLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHZvaWQgMCkgeyBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplRml0KFgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCB0aGlzLm9wdGltaXplTGF5b3V0QXN5bmMoY2FsbGJhY2spXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyLCB0aGlzLmVtYmVkZGluZ107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuc2V0U3VwZXJ2aXNlZFByb2plY3Rpb24gPSBmdW5jdGlvbiAoWSwgcGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXMgPT09IHZvaWQgMCkgeyBwYXJhbXMgPSB7fTsgfVxuICAgICAgICB0aGlzLlkgPSBZO1xuICAgICAgICB0aGlzLnRhcmdldE1ldHJpYyA9IHBhcmFtcy50YXJnZXRNZXRyaWMgfHwgdGhpcy50YXJnZXRNZXRyaWM7XG4gICAgICAgIHRoaXMudGFyZ2V0V2VpZ2h0ID0gcGFyYW1zLnRhcmdldFdlaWdodCB8fCB0aGlzLnRhcmdldFdlaWdodDtcbiAgICAgICAgdGhpcy50YXJnZXROTmVpZ2hib3JzID0gcGFyYW1zLnRhcmdldE5OZWlnaGJvcnMgfHwgdGhpcy50YXJnZXROTmVpZ2hib3JzO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuc2V0UHJlY29tcHV0ZWRLTk4gPSBmdW5jdGlvbiAoa25uSW5kaWNlcywga25uRGlzdGFuY2VzKSB7XG4gICAgICAgIHRoaXMua25uSW5kaWNlcyA9IGtubkluZGljZXM7XG4gICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uRGlzdGFuY2VzO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuaW5pdGlhbGl6ZUZpdCA9IGZ1bmN0aW9uIChYKSB7XG4gICAgICAgIGlmIChYLmxlbmd0aCA8PSB0aGlzLm5OZWlnaGJvcnMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBlbm91Z2ggZGF0YSBwb2ludHMgKFwiICsgWC5sZW5ndGggKyBcIikgdG8gY3JlYXRlIG5OZWlnaGJvcnM6IFwiICsgdGhpcy5uTmVpZ2hib3JzICsgXCIuICBBZGQgbW9yZSBkYXRhIHBvaW50cyBvciBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLlggPT09IFggJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRORXBvY2hzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5YID0gWDtcbiAgICAgICAgaWYgKCF0aGlzLmtubkluZGljZXMgJiYgIXRoaXMua25uRGlzdGFuY2VzKSB7XG4gICAgICAgICAgICB2YXIga25uUmVzdWx0cyA9IHRoaXMubmVhcmVzdE5laWdoYm9ycyhYKTtcbiAgICAgICAgICAgIHRoaXMua25uSW5kaWNlcyA9IGtublJlc3VsdHMua25uSW5kaWNlcztcbiAgICAgICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uUmVzdWx0cy5rbm5EaXN0YW5jZXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuZnV6enlTaW1wbGljaWFsU2V0KFgsIHRoaXMubk5laWdoYm9ycywgdGhpcy5zZXRPcE1peFJhdGlvKTtcbiAgICAgICAgdGhpcy5tYWtlU2VhcmNoRm5zKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JhcGggPSB0aGlzLm1ha2VTZWFyY2hHcmFwaChYKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbigpO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLmluaXRpYWxpemVTaW1wbGljaWFsU2V0RW1iZWRkaW5nKCksIGhlYWQgPSBfYS5oZWFkLCB0YWlsID0gX2EudGFpbCwgZXBvY2hzUGVyU2FtcGxlID0gX2EuZXBvY2hzUGVyU2FtcGxlO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLmhlYWQgPSBoZWFkO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLnRhaWwgPSB0YWlsO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLmVwb2Noc1BlclNhbXBsZSA9IGVwb2Noc1BlclNhbXBsZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3B0aW1pemF0aW9uKCk7XG4gICAgICAgIHRoaXMucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AoKTtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TkVwb2NocygpO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUubWFrZVNlYXJjaEZucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gbm5EZXNjZW50Lm1ha2VJbml0aWFsaXphdGlvbnModGhpcy5kaXN0YW5jZUZuKSwgaW5pdEZyb21UcmVlID0gX2EuaW5pdEZyb21UcmVlLCBpbml0RnJvbVJhbmRvbSA9IF9hLmluaXRGcm9tUmFuZG9tO1xuICAgICAgICB0aGlzLmluaXRGcm9tVHJlZSA9IGluaXRGcm9tVHJlZTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVJhbmRvbSA9IGluaXRGcm9tUmFuZG9tO1xuICAgICAgICB0aGlzLnNlYXJjaCA9IG5uRGVzY2VudC5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCh0aGlzLmRpc3RhbmNlRm4pO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUubWFrZVNlYXJjaEdyYXBoID0gZnVuY3Rpb24gKFgpIHtcbiAgICAgICAgdmFyIGtubkluZGljZXMgPSB0aGlzLmtubkluZGljZXM7XG4gICAgICAgIHZhciBrbm5EaXN0YW5jZXMgPSB0aGlzLmtubkRpc3RhbmNlcztcbiAgICAgICAgdmFyIGRpbXMgPSBbWC5sZW5ndGgsIFgubGVuZ3RoXTtcbiAgICAgICAgdmFyIHNlYXJjaEdyYXBoID0gbmV3IG1hdHJpeC5TcGFyc2VNYXRyaXgoW10sIFtdLCBbXSwgZGltcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga25uSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtubiA9IGtubkluZGljZXNbaV07XG4gICAgICAgICAgICB2YXIgZGlzdGFuY2VzID0ga25uRGlzdGFuY2VzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrbm4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbmVpZ2hib3IgPSBrbm5bal07XG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gZGlzdGFuY2VzW2pdO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoR3JhcGguc2V0KGksIG5laWdoYm9yLCBkaXN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFuc3Bvc2UgPSBtYXRyaXgudHJhbnNwb3NlKHNlYXJjaEdyYXBoKTtcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tYXhpbXVtKHNlYXJjaEdyYXBoLCB0cmFuc3Bvc2UpO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKHRvVHJhbnNmb3JtKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciByYXdEYXRhID0gdGhpcy5YO1xuICAgICAgICBpZiAocmF3RGF0YSA9PT0gdW5kZWZpbmVkIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRhdGEgaGFzIGJlZW4gZml0LicpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuTmVpZ2hib3JzID0gTWF0aC5mbG9vcih0aGlzLm5OZWlnaGJvcnMgKiB0aGlzLnRyYW5zZm9ybVF1ZXVlU2l6ZSk7XG4gICAgICAgIG5OZWlnaGJvcnMgPSBNYXRoLm1pbihyYXdEYXRhLmxlbmd0aCwgbk5laWdoYm9ycyk7XG4gICAgICAgIHZhciBpbml0ID0gbm5EZXNjZW50LmluaXRpYWxpemVTZWFyY2godGhpcy5ycEZvcmVzdCwgcmF3RGF0YSwgdG9UcmFuc2Zvcm0sIG5OZWlnaGJvcnMsIHRoaXMuaW5pdEZyb21SYW5kb20sIHRoaXMuaW5pdEZyb21UcmVlLCB0aGlzLnJhbmRvbSk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlYXJjaChyYXdEYXRhLCB0aGlzLnNlYXJjaEdyYXBoLCBpbml0LCB0b1RyYW5zZm9ybSk7XG4gICAgICAgIHZhciBfYSA9IGhlYXAuZGVoZWFwU29ydChyZXN1bHQpLCBpbmRpY2VzID0gX2EuaW5kaWNlcywgZGlzdGFuY2VzID0gX2Eud2VpZ2h0cztcbiAgICAgICAgaW5kaWNlcyA9IGluZGljZXMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnNsaWNlKDAsIF90aGlzLm5OZWlnaGJvcnMpOyB9KTtcbiAgICAgICAgZGlzdGFuY2VzID0gZGlzdGFuY2VzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5zbGljZSgwLCBfdGhpcy5uTmVpZ2hib3JzKTsgfSk7XG4gICAgICAgIHZhciBhZGp1c3RlZExvY2FsQ29ubmVjdGl2aXR5ID0gTWF0aC5tYXgoMCwgdGhpcy5sb2NhbENvbm5lY3Rpdml0eSAtIDEpO1xuICAgICAgICB2YXIgX2IgPSB0aGlzLnNtb290aEtOTkRpc3RhbmNlKGRpc3RhbmNlcywgdGhpcy5uTmVpZ2hib3JzLCBhZGp1c3RlZExvY2FsQ29ubmVjdGl2aXR5KSwgc2lnbWFzID0gX2Iuc2lnbWFzLCByaG9zID0gX2IucmhvcztcbiAgICAgICAgdmFyIF9jID0gdGhpcy5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3RocyhpbmRpY2VzLCBkaXN0YW5jZXMsIHNpZ21hcywgcmhvcyksIHJvd3MgPSBfYy5yb3dzLCBjb2xzID0gX2MuY29scywgdmFscyA9IF9jLnZhbHM7XG4gICAgICAgIHZhciBzaXplID0gW3RvVHJhbnNmb3JtLmxlbmd0aCwgcmF3RGF0YS5sZW5ndGhdO1xuICAgICAgICB2YXIgZ3JhcGggPSBuZXcgbWF0cml4LlNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWxzLCBzaXplKTtcbiAgICAgICAgdmFyIG5vcm1lZCA9IG1hdHJpeC5ub3JtYWxpemUoZ3JhcGgsIFwibDFcIik7XG4gICAgICAgIHZhciBjc3JNYXRyaXggPSBtYXRyaXguZ2V0Q1NSKG5vcm1lZCk7XG4gICAgICAgIHZhciBuUG9pbnRzID0gdG9UcmFuc2Zvcm0ubGVuZ3RoO1xuICAgICAgICB2YXIgZUluZGljZXMgPSB1dGlscy5yZXNoYXBlMmQoY3NyTWF0cml4LmluZGljZXMsIG5Qb2ludHMsIHRoaXMubk5laWdoYm9ycyk7XG4gICAgICAgIHZhciBlV2VpZ2h0cyA9IHV0aWxzLnJlc2hhcGUyZChjc3JNYXRyaXgudmFsdWVzLCBuUG9pbnRzLCB0aGlzLm5OZWlnaGJvcnMpO1xuICAgICAgICB2YXIgZW1iZWRkaW5nID0gaW5pdFRyYW5zZm9ybShlSW5kaWNlcywgZVdlaWdodHMsIHRoaXMuZW1iZWRkaW5nKTtcbiAgICAgICAgdmFyIG5FcG9jaHMgPSB0aGlzLm5FcG9jaHNcbiAgICAgICAgICAgID8gdGhpcy5uRXBvY2hzIC8gM1xuICAgICAgICAgICAgOiBncmFwaC5uUm93cyA8PSAxMDAwMFxuICAgICAgICAgICAgICAgID8gMTAwXG4gICAgICAgICAgICAgICAgOiAzMDtcbiAgICAgICAgdmFyIGdyYXBoTWF4ID0gZ3JhcGhcbiAgICAgICAgICAgIC5nZXRWYWx1ZXMoKVxuICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAobWF4LCB2YWwpIHsgcmV0dXJuICh2YWwgPiBtYXggPyB2YWwgOiBtYXgpOyB9LCAwKTtcbiAgICAgICAgZ3JhcGggPSBncmFwaC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPCBncmFwaE1heCAvIG5FcG9jaHMgPyAwIDogdmFsdWUpOyB9KTtcbiAgICAgICAgZ3JhcGggPSBtYXRyaXguZWxpbWluYXRlWmVyb3MoZ3JhcGgpO1xuICAgICAgICB2YXIgZXBvY2hzUGVyU2FtcGxlID0gdGhpcy5tYWtlRXBvY2hzUGVyU2FtcGxlKGdyYXBoLmdldFZhbHVlcygpLCBuRXBvY2hzKTtcbiAgICAgICAgdmFyIGhlYWQgPSBncmFwaC5nZXRSb3dzKCk7XG4gICAgICAgIHZhciB0YWlsID0gZ3JhcGguZ2V0Q29scygpO1xuICAgICAgICB0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7XG4gICAgICAgICAgICBoZWFkRW1iZWRkaW5nOiBlbWJlZGRpbmcsXG4gICAgICAgICAgICB0YWlsRW1iZWRkaW5nOiB0aGlzLmVtYmVkZGluZyxcbiAgICAgICAgICAgIGhlYWQ6IGhlYWQsXG4gICAgICAgICAgICB0YWlsOiB0YWlsLFxuICAgICAgICAgICAgY3VycmVudEVwb2NoOiAwLFxuICAgICAgICAgICAgbkVwb2NoczogbkVwb2NocyxcbiAgICAgICAgICAgIG5WZXJ0aWNlczogZ3JhcGguZ2V0RGltcygpWzFdLFxuICAgICAgICAgICAgZXBvY2hzUGVyU2FtcGxlOiBlcG9jaHNQZXJTYW1wbGUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGltaXplTGF5b3V0KCk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgWSA9IF9hLlksIFggPSBfYS5YO1xuICAgICAgICBpZiAoWSkge1xuICAgICAgICAgICAgaWYgKFkubGVuZ3RoICE9PSBYLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTGVuZ3RoIG9mIFggYW5kIHkgbXVzdCBiZSBlcXVhbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0TWV0cmljID09PSBcImNhdGVnb3JpY2FsXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbHQgPSB0aGlzLnRhcmdldFdlaWdodCA8IDEuMDtcbiAgICAgICAgICAgICAgICB2YXIgZmFyRGlzdCA9IGx0ID8gMi41ICogKDEuMCAvICgxLjAgLSB0aGlzLnRhcmdldFdlaWdodCkpIDogMS4wZTEyO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLmNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbih0aGlzLmdyYXBoLCBZLCBmYXJEaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRFcG9jaCA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgICAgICBpZiAoY3VycmVudEVwb2NoIDwgdGhpcy5nZXRORXBvY2hzKCkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGN1cnJlbnRFcG9jaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuZ2V0RW1iZWRkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWJlZGRpbmc7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5uZWFyZXN0TmVpZ2hib3JzID0gZnVuY3Rpb24gKFgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgZGlzdGFuY2VGbiA9IF9hLmRpc3RhbmNlRm4sIG5OZWlnaGJvcnMgPSBfYS5uTmVpZ2hib3JzO1xuICAgICAgICB2YXIgbG9nMiA9IGZ1bmN0aW9uIChuKSB7IHJldHVybiBNYXRoLmxvZyhuKSAvIE1hdGgubG9nKDIpOyB9O1xuICAgICAgICB2YXIgbWV0cmljTk5EZXNjZW50ID0gbm5EZXNjZW50Lm1ha2VOTkRlc2NlbnQoZGlzdGFuY2VGbiwgdGhpcy5yYW5kb20pO1xuICAgICAgICB2YXIgcm91bmQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDAuNSA/IDAgOiBNYXRoLnJvdW5kKG4pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgblRyZWVzID0gNSArIE1hdGguZmxvb3Iocm91bmQoTWF0aC5wb3coWC5sZW5ndGgsIDAuNSkgLyAyMC4wKSk7XG4gICAgICAgIHZhciBuSXRlcnMgPSBNYXRoLm1heCg1LCBNYXRoLmZsb29yKE1hdGgucm91bmQobG9nMihYLmxlbmd0aCkpKSk7XG4gICAgICAgIHRoaXMucnBGb3Jlc3QgPSB0cmVlLm1ha2VGb3Jlc3QoWCwgbk5laWdoYm9ycywgblRyZWVzLCB0aGlzLnJhbmRvbSk7XG4gICAgICAgIHZhciBsZWFmQXJyYXkgPSB0cmVlLm1ha2VMZWFmQXJyYXkodGhpcy5ycEZvcmVzdCk7XG4gICAgICAgIHZhciBfYiA9IG1ldHJpY05ORGVzY2VudChYLCBsZWFmQXJyYXksIG5OZWlnaGJvcnMsIG5JdGVycyksIGluZGljZXMgPSBfYi5pbmRpY2VzLCB3ZWlnaHRzID0gX2Iud2VpZ2h0cztcbiAgICAgICAgcmV0dXJuIHsga25uSW5kaWNlczogaW5kaWNlcywga25uRGlzdGFuY2VzOiB3ZWlnaHRzIH07XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5mdXp6eVNpbXBsaWNpYWxTZXQgPSBmdW5jdGlvbiAoWCwgbk5laWdoYm9ycywgc2V0T3BNaXhSYXRpbykge1xuICAgICAgICBpZiAoc2V0T3BNaXhSYXRpbyA9PT0gdm9pZCAwKSB7IHNldE9wTWl4UmF0aW8gPSAxLjA7IH1cbiAgICAgICAgdmFyIF9hID0gdGhpcywgX2IgPSBfYS5rbm5JbmRpY2VzLCBrbm5JbmRpY2VzID0gX2IgPT09IHZvaWQgMCA/IFtdIDogX2IsIF9jID0gX2Eua25uRGlzdGFuY2VzLCBrbm5EaXN0YW5jZXMgPSBfYyA9PT0gdm9pZCAwID8gW10gOiBfYywgbG9jYWxDb25uZWN0aXZpdHkgPSBfYS5sb2NhbENvbm5lY3Rpdml0eTtcbiAgICAgICAgdmFyIF9kID0gdGhpcy5zbW9vdGhLTk5EaXN0YW5jZShrbm5EaXN0YW5jZXMsIG5OZWlnaGJvcnMsIGxvY2FsQ29ubmVjdGl2aXR5KSwgc2lnbWFzID0gX2Quc2lnbWFzLCByaG9zID0gX2QucmhvcztcbiAgICAgICAgdmFyIF9lID0gdGhpcy5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Rocyhrbm5JbmRpY2VzLCBrbm5EaXN0YW5jZXMsIHNpZ21hcywgcmhvcyksIHJvd3MgPSBfZS5yb3dzLCBjb2xzID0gX2UuY29scywgdmFscyA9IF9lLnZhbHM7XG4gICAgICAgIHZhciBzaXplID0gW1gubGVuZ3RoLCBYLmxlbmd0aF07XG4gICAgICAgIHZhciBzcGFyc2VNYXRyaXggPSBuZXcgbWF0cml4LlNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWxzLCBzaXplKTtcbiAgICAgICAgdmFyIHRyYW5zcG9zZSA9IG1hdHJpeC50cmFuc3Bvc2Uoc3BhcnNlTWF0cml4KTtcbiAgICAgICAgdmFyIHByb2RNYXRyaXggPSBtYXRyaXgucGFpcndpc2VNdWx0aXBseShzcGFyc2VNYXRyaXgsIHRyYW5zcG9zZSk7XG4gICAgICAgIHZhciBhID0gbWF0cml4LnN1YnRyYWN0KG1hdHJpeC5hZGQoc3BhcnNlTWF0cml4LCB0cmFuc3Bvc2UpLCBwcm9kTWF0cml4KTtcbiAgICAgICAgdmFyIGIgPSBtYXRyaXgubXVsdGlwbHlTY2FsYXIoYSwgc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgIHZhciBjID0gbWF0cml4Lm11bHRpcGx5U2NhbGFyKHByb2RNYXRyaXgsIDEuMCAtIHNldE9wTWl4UmF0aW8pO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbWF0cml4LmFkZChiLCBjKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChzaW1wbGljaWFsU2V0LCB0YXJnZXQsIGZhckRpc3QsIHVua25vd25EaXN0KSB7XG4gICAgICAgIGlmICh1bmtub3duRGlzdCA9PT0gdm9pZCAwKSB7IHVua25vd25EaXN0ID0gMS4wOyB9XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBmYXN0SW50ZXJzZWN0aW9uKHNpbXBsaWNpYWxTZXQsIHRhcmdldCwgdW5rbm93bkRpc3QsIGZhckRpc3QpO1xuICAgICAgICBpbnRlcnNlY3Rpb24gPSBtYXRyaXguZWxpbWluYXRlWmVyb3MoaW50ZXJzZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc2V0TG9jYWxDb25uZWN0aXZpdHkoaW50ZXJzZWN0aW9uKTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLnNtb290aEtOTkRpc3RhbmNlID0gZnVuY3Rpb24gKGRpc3RhbmNlcywgaywgbG9jYWxDb25uZWN0aXZpdHksIG5JdGVyLCBiYW5kd2lkdGgpIHtcbiAgICAgICAgaWYgKGxvY2FsQ29ubmVjdGl2aXR5ID09PSB2b2lkIDApIHsgbG9jYWxDb25uZWN0aXZpdHkgPSAxLjA7IH1cbiAgICAgICAgaWYgKG5JdGVyID09PSB2b2lkIDApIHsgbkl0ZXIgPSA2NDsgfVxuICAgICAgICBpZiAoYmFuZHdpZHRoID09PSB2b2lkIDApIHsgYmFuZHdpZHRoID0gMS4wOyB9XG4gICAgICAgIHZhciB0YXJnZXQgPSAoTWF0aC5sb2coaykgLyBNYXRoLmxvZygyKSkgKiBiYW5kd2lkdGg7XG4gICAgICAgIHZhciByaG8gPSB1dGlscy56ZXJvcyhkaXN0YW5jZXMubGVuZ3RoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHV0aWxzLnplcm9zKGRpc3RhbmNlcy5sZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGxvID0gMC4wO1xuICAgICAgICAgICAgdmFyIGhpID0gSW5maW5pdHk7XG4gICAgICAgICAgICB2YXIgbWlkID0gMS4wO1xuICAgICAgICAgICAgdmFyIGl0aERpc3RhbmNlcyA9IGRpc3RhbmNlc1tpXTtcbiAgICAgICAgICAgIHZhciBub25aZXJvRGlzdHMgPSBpdGhEaXN0YW5jZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBkID4gMC4wOyB9KTtcbiAgICAgICAgICAgIGlmIChub25aZXJvRGlzdHMubGVuZ3RoID49IGxvY2FsQ29ubmVjdGl2aXR5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gTWF0aC5mbG9vcihsb2NhbENvbm5lY3Rpdml0eSk7XG4gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBsb2NhbENvbm5lY3Rpdml0eSAtIGluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmhvW2ldID0gbm9uWmVyb0Rpc3RzW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uID4gU01PT1RIX0tfVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByaG9baV0gKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uICogKG5vblplcm9EaXN0c1tpbmRleF0gLSBub25aZXJvRGlzdHNbaW5kZXggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJob1tpXSA9IGludGVycG9sYXRpb24gKiBub25aZXJvRGlzdHNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9uWmVyb0Rpc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByaG9baV0gPSB1dGlscy5tYXgobm9uWmVyb0Rpc3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbkl0ZXI7IG4rKykge1xuICAgICAgICAgICAgICAgIHZhciBwc3VtID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgZGlzdGFuY2VzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VzW2ldW2pdIC0gcmhvW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gTWF0aC5leHAoLShkIC8gbWlkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwc3VtICs9IDEuMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMocHN1bSAtIHRhcmdldCkgPCBTTU9PVEhfS19UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwc3VtID4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGhpID0gbWlkO1xuICAgICAgICAgICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyLjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsbyA9IG1pZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhpID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWlkICo9IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyLjA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBtaWQ7XG4gICAgICAgICAgICBpZiAocmhvW2ldID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1lYW5JdGhEaXN0YW5jZXMgPSB1dGlscy5tZWFuKGl0aERpc3RhbmNlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpXSA8IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuSXRoRGlzdGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuSXRoRGlzdGFuY2VzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBtZWFuRGlzdGFuY2VzID0gdXRpbHMubWVhbihkaXN0YW5jZXMubWFwKHV0aWxzLm1lYW4pKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2ldIDwgTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5EaXN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5EaXN0YW5jZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNpZ21hczogcmVzdWx0LCByaG9zOiByaG8gfTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzID0gZnVuY3Rpb24gKGtubkluZGljZXMsIGtubkRpc3RhbmNlcywgc2lnbWFzLCByaG9zKSB7XG4gICAgICAgIHZhciBuU2FtcGxlcyA9IGtubkluZGljZXMubGVuZ3RoO1xuICAgICAgICB2YXIgbk5laWdoYm9ycyA9IGtubkluZGljZXNbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgcm93cyA9IHV0aWxzLnplcm9zKG5TYW1wbGVzICogbk5laWdoYm9ycyk7XG4gICAgICAgIHZhciBjb2xzID0gdXRpbHMuemVyb3MoblNhbXBsZXMgKiBuTmVpZ2hib3JzKTtcbiAgICAgICAgdmFyIHZhbHMgPSB1dGlscy56ZXJvcyhuU2FtcGxlcyAqIG5OZWlnaGJvcnMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5TYW1wbGVzOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbk5laWdoYm9yczsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGtubkluZGljZXNbaV1bal0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa25uSW5kaWNlc1tpXVtqXSA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICB2YWwgPSAwLjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtubkRpc3RhbmNlc1tpXVtqXSAtIHJob3NbaV0gPD0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IDEuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IE1hdGguZXhwKC0oKGtubkRpc3RhbmNlc1tpXVtqXSAtIHJob3NbaV0pIC8gc2lnbWFzW2ldKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvd3NbaSAqIG5OZWlnaGJvcnMgKyBqXSA9IGk7XG4gICAgICAgICAgICAgICAgY29sc1tpICogbk5laWdoYm9ycyArIGpdID0ga25uSW5kaWNlc1tpXVtqXTtcbiAgICAgICAgICAgICAgICB2YWxzW2kgKiBuTmVpZ2hib3JzICsgal0gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcm93czogcm93cywgY29sczogY29scywgdmFsczogdmFscyB9O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBuRXBvY2hzID0gdGhpcy5nZXRORXBvY2hzKCk7XG4gICAgICAgIHZhciBuQ29tcG9uZW50cyA9IHRoaXMubkNvbXBvbmVudHM7XG4gICAgICAgIHZhciBncmFwaFZhbHVlcyA9IHRoaXMuZ3JhcGguZ2V0VmFsdWVzKCk7XG4gICAgICAgIHZhciBncmFwaE1heCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdyYXBoVmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKGdyYXBoTWF4IDwgZ3JhcGhWYWx1ZXNbaV0pIHtcbiAgICAgICAgICAgICAgICBncmFwaE1heCA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBncmFwaCA9IHRoaXMuZ3JhcGgubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgZ3JhcGhNYXggLyBuRXBvY2hzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVtYmVkZGluZyA9IHV0aWxzLnplcm9zKGdyYXBoLm5Sb3dzKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnplcm9zKG5Db21wb25lbnRzKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1dGlscy50YXVSYW5kKF90aGlzLnJhbmRvbSkgKiAyMCArIC0xMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHdlaWdodHMgPSBbXTtcbiAgICAgICAgdmFyIGhlYWQgPSBbXTtcbiAgICAgICAgdmFyIHRhaWwgPSBbXTtcbiAgICAgICAgdmFyIHJvd0NvbFZhbHVlcyA9IGdyYXBoLmdldEFsbCgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd0NvbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0gcm93Q29sVmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgd2VpZ2h0cy5wdXNoKGVudHJ5LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0YWlsLnB1c2goZW50cnkucm93KTtcbiAgICAgICAgICAgICAgICBoZWFkLnB1c2goZW50cnkuY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZXBvY2hzUGVyU2FtcGxlID0gdGhpcy5tYWtlRXBvY2hzUGVyU2FtcGxlKHdlaWdodHMsIG5FcG9jaHMpO1xuICAgICAgICByZXR1cm4geyBoZWFkOiBoZWFkLCB0YWlsOiB0YWlsLCBlcG9jaHNQZXJTYW1wbGU6IGVwb2Noc1BlclNhbXBsZSB9O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUubWFrZUVwb2Noc1BlclNhbXBsZSA9IGZ1bmN0aW9uICh3ZWlnaHRzLCBuRXBvY2hzKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB1dGlscy5maWxsZWQod2VpZ2h0cy5sZW5ndGgsIC0xLjApO1xuICAgICAgICB2YXIgbWF4ID0gdXRpbHMubWF4KHdlaWdodHMpO1xuICAgICAgICB2YXIgblNhbXBsZXMgPSB3ZWlnaHRzLm1hcChmdW5jdGlvbiAodykgeyByZXR1cm4gKHcgLyBtYXgpICogbkVwb2NoczsgfSk7XG4gICAgICAgIG5TYW1wbGVzLmZvckVhY2goZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgICAgICAgIGlmIChuID4gMClcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBuRXBvY2hzIC8gblNhbXBsZXNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpbWl6YXRpb25TdGF0ZSwgc3RhdGUpO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHJlcHVsc2lvblN0cmVuZ3RoID0gX2EucmVwdWxzaW9uU3RyZW5ndGgsIGxlYXJuaW5nUmF0ZSA9IF9hLmxlYXJuaW5nUmF0ZSwgbmVnYXRpdmVTYW1wbGVSYXRlID0gX2EubmVnYXRpdmVTYW1wbGVSYXRlO1xuICAgICAgICB2YXIgX2IgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLCBlcG9jaHNQZXJTYW1wbGUgPSBfYi5lcG9jaHNQZXJTYW1wbGUsIGhlYWRFbWJlZGRpbmcgPSBfYi5oZWFkRW1iZWRkaW5nLCB0YWlsRW1iZWRkaW5nID0gX2IudGFpbEVtYmVkZGluZztcbiAgICAgICAgdmFyIGRpbSA9IGhlYWRFbWJlZGRpbmdbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgbW92ZU90aGVyID0gaGVhZEVtYmVkZGluZy5sZW5ndGggPT09IHRhaWxFbWJlZGRpbmcubGVuZ3RoO1xuICAgICAgICB2YXIgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUgPSBlcG9jaHNQZXJTYW1wbGUubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlIC8gbmVnYXRpdmVTYW1wbGVSYXRlOyB9KTtcbiAgICAgICAgdmFyIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUgPSBfX3NwcmVhZChlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSk7XG4gICAgICAgIHZhciBlcG9jaE9mTmV4dFNhbXBsZSA9IF9fc3ByZWFkKGVwb2Noc1BlclNhbXBsZSk7XG4gICAgICAgIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0U2FtcGxlOiBlcG9jaE9mTmV4dFNhbXBsZSxcbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGU6IGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUsXG4gICAgICAgICAgICBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZTogZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsXG4gICAgICAgICAgICBtb3ZlT3RoZXI6IG1vdmVPdGhlcixcbiAgICAgICAgICAgIGluaXRpYWxBbHBoYTogbGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgYWxwaGE6IGxlYXJuaW5nUmF0ZSxcbiAgICAgICAgICAgIGdhbW1hOiByZXB1bHNpb25TdHJlbmd0aCxcbiAgICAgICAgICAgIGRpbTogZGltLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmluaXRpYWxpemVPcHRpbWl6YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoZWFkRW1iZWRkaW5nID0gdGhpcy5lbWJlZGRpbmc7XG4gICAgICAgIHZhciB0YWlsRW1iZWRkaW5nID0gdGhpcy5lbWJlZGRpbmc7XG4gICAgICAgIHZhciBfYSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUsIGhlYWQgPSBfYS5oZWFkLCB0YWlsID0gX2EudGFpbCwgZXBvY2hzUGVyU2FtcGxlID0gX2EuZXBvY2hzUGVyU2FtcGxlO1xuICAgICAgICB2YXIgbkVwb2NocyA9IHRoaXMuZ2V0TkVwb2NocygpO1xuICAgICAgICB2YXIgblZlcnRpY2VzID0gdGhpcy5ncmFwaC5uQ29scztcbiAgICAgICAgdmFyIF9iID0gZmluZEFCUGFyYW1zKHRoaXMuc3ByZWFkLCB0aGlzLm1pbkRpc3QpLCBhID0gX2IuYSwgYiA9IF9iLmI7XG4gICAgICAgIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIGhlYWRFbWJlZGRpbmc6IGhlYWRFbWJlZGRpbmcsXG4gICAgICAgICAgICB0YWlsRW1iZWRkaW5nOiB0YWlsRW1iZWRkaW5nLFxuICAgICAgICAgICAgaGVhZDogaGVhZCxcbiAgICAgICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgICAgICBlcG9jaHNQZXJTYW1wbGU6IGVwb2Noc1BlclNhbXBsZSxcbiAgICAgICAgICAgIGE6IGEsXG4gICAgICAgICAgICBiOiBiLFxuICAgICAgICAgICAgbkVwb2NoczogbkVwb2NocyxcbiAgICAgICAgICAgIG5WZXJ0aWNlczogblZlcnRpY2VzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm9wdGltaXplTGF5b3V0U3RlcCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHZhciBvcHRpbWl6YXRpb25TdGF0ZSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGU7XG4gICAgICAgIHZhciBoZWFkID0gb3B0aW1pemF0aW9uU3RhdGUuaGVhZCwgdGFpbCA9IG9wdGltaXphdGlvblN0YXRlLnRhaWwsIGhlYWRFbWJlZGRpbmcgPSBvcHRpbWl6YXRpb25TdGF0ZS5oZWFkRW1iZWRkaW5nLCB0YWlsRW1iZWRkaW5nID0gb3B0aW1pemF0aW9uU3RhdGUudGFpbEVtYmVkZGluZywgZXBvY2hzUGVyU2FtcGxlID0gb3B0aW1pemF0aW9uU3RhdGUuZXBvY2hzUGVyU2FtcGxlLCBlcG9jaE9mTmV4dFNhbXBsZSA9IG9wdGltaXphdGlvblN0YXRlLmVwb2NoT2ZOZXh0U2FtcGxlLCBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlID0gb3B0aW1pemF0aW9uU3RhdGUuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSwgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUgPSBvcHRpbWl6YXRpb25TdGF0ZS5lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSwgbW92ZU90aGVyID0gb3B0aW1pemF0aW9uU3RhdGUubW92ZU90aGVyLCBpbml0aWFsQWxwaGEgPSBvcHRpbWl6YXRpb25TdGF0ZS5pbml0aWFsQWxwaGEsIGFscGhhID0gb3B0aW1pemF0aW9uU3RhdGUuYWxwaGEsIGdhbW1hID0gb3B0aW1pemF0aW9uU3RhdGUuZ2FtbWEsIGEgPSBvcHRpbWl6YXRpb25TdGF0ZS5hLCBiID0gb3B0aW1pemF0aW9uU3RhdGUuYiwgZGltID0gb3B0aW1pemF0aW9uU3RhdGUuZGltLCBuRXBvY2hzID0gb3B0aW1pemF0aW9uU3RhdGUubkVwb2NocywgblZlcnRpY2VzID0gb3B0aW1pemF0aW9uU3RhdGUublZlcnRpY2VzO1xuICAgICAgICB2YXIgY2xpcFZhbHVlID0gNC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVwb2Noc1BlclNhbXBsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGVwb2NoT2ZOZXh0U2FtcGxlW2ldID4gbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGogPSBoZWFkW2ldO1xuICAgICAgICAgICAgdmFyIGsgPSB0YWlsW2ldO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBoZWFkRW1iZWRkaW5nW2pdO1xuICAgICAgICAgICAgdmFyIG90aGVyID0gdGFpbEVtYmVkZGluZ1trXTtcbiAgICAgICAgICAgIHZhciBkaXN0U3F1YXJlZCA9IHJEaXN0KGN1cnJlbnQsIG90aGVyKTtcbiAgICAgICAgICAgIHZhciBncmFkQ29lZmYgPSAwO1xuICAgICAgICAgICAgaWYgKGRpc3RTcXVhcmVkID4gMCkge1xuICAgICAgICAgICAgICAgIGdyYWRDb2VmZiA9IC0yLjAgKiBhICogYiAqIE1hdGgucG93KGRpc3RTcXVhcmVkLCBiIC0gMS4wKTtcbiAgICAgICAgICAgICAgICBncmFkQ29lZmYgLz0gYSAqIE1hdGgucG93KGRpc3RTcXVhcmVkLCBiKSArIDEuMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3JhZEQgPSBjbGlwKGdyYWRDb2VmZiAqIChjdXJyZW50W2RdIC0gb3RoZXJbZF0pLCBjbGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRbZF0gKz0gZ3JhZEQgKiBhbHBoYTtcbiAgICAgICAgICAgICAgICBpZiAobW92ZU90aGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG90aGVyW2RdICs9IC1ncmFkRCAqIGFscGhhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0U2FtcGxlW2ldICs9IGVwb2Noc1BlclNhbXBsZVtpXTtcbiAgICAgICAgICAgIHZhciBuTmVnU2FtcGxlcyA9IE1hdGguZmxvb3IoKG4gLSBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlW2ldKSAvIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlW2ldKTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgbk5lZ1NhbXBsZXM7IHArKykge1xuICAgICAgICAgICAgICAgIHZhciBrXzEgPSB1dGlscy50YXVSYW5kSW50KG5WZXJ0aWNlcywgdGhpcy5yYW5kb20pO1xuICAgICAgICAgICAgICAgIHZhciBvdGhlcl8xID0gdGFpbEVtYmVkZGluZ1trXzFdO1xuICAgICAgICAgICAgICAgIHZhciBkaXN0U3F1YXJlZF8xID0gckRpc3QoY3VycmVudCwgb3RoZXJfMSk7XG4gICAgICAgICAgICAgICAgdmFyIGdyYWRDb2VmZl8xID0gMC4wO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0U3F1YXJlZF8xID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyYWRDb2VmZl8xID0gMi4wICogZ2FtbWEgKiBiO1xuICAgICAgICAgICAgICAgICAgICBncmFkQ29lZmZfMSAvPVxuICAgICAgICAgICAgICAgICAgICAgICAgKDAuMDAxICsgZGlzdFNxdWFyZWRfMSkgKiAoYSAqIE1hdGgucG93KGRpc3RTcXVhcmVkXzEsIGIpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGogPT09IGtfMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhZEQgPSA0LjA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncmFkQ29lZmZfMSA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZEQgPSBjbGlwKGdyYWRDb2VmZl8xICogKGN1cnJlbnRbZF0gLSBvdGhlcl8xW2RdKSwgY2xpcFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2RdICs9IGdyYWREICogYWxwaGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZVtpXSArPSBuTmVnU2FtcGxlcyAqIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlW2ldO1xuICAgICAgICB9XG4gICAgICAgIG9wdGltaXphdGlvblN0YXRlLmFscGhhID0gaW5pdGlhbEFscGhhICogKDEuMCAtIG4gLyBuRXBvY2hzKTtcbiAgICAgICAgb3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoICs9IDE7XG4gICAgICAgIHJldHVybiBoZWFkRW1iZWRkaW5nO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXRBc3luYyA9IGZ1bmN0aW9uIChlcG9jaENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChlcG9jaENhbGxiYWNrID09PSB2b2lkIDApIHsgZXBvY2hDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07IH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdGVwID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgbkVwb2NocywgY3VycmVudEVwb2NoLCBlcG9jaENvbXBsZXRlZCwgc2hvdWxkU3RvcCwgaXNGaW5pc2hlZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUsIG5FcG9jaHMgPSBfYS5uRXBvY2hzLCBjdXJyZW50RXBvY2ggPSBfYS5jdXJyZW50RXBvY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtYmVkZGluZyA9IHRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGN1cnJlbnRFcG9jaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcG9jaENvbXBsZXRlZCA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU3RvcCA9IGVwb2NoQ2FsbGJhY2soZXBvY2hDb21wbGV0ZWQpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRmluaXNoZWQgPSBlcG9jaENvbXBsZXRlZCA9PT0gbkVwb2NocztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkU3RvcCAmJiAhaXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RlcCgpOyB9LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgcmVzb2x2ZShpc0ZpbmlzaGVkKV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyB9O1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBzdGVwKCk7IH0sIDApO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm9wdGltaXplTGF5b3V0ID0gZnVuY3Rpb24gKGVwb2NoQ2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGVwb2NoQ2FsbGJhY2sgPT09IHZvaWQgMCkgeyBlcG9jaENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTsgfVxuICAgICAgICB2YXIgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZW1iZWRkaW5nID0gW107XG4gICAgICAgIHdoaWxlICghaXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZSwgbkVwb2NocyA9IF9hLm5FcG9jaHMsIGN1cnJlbnRFcG9jaCA9IF9hLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgICAgIGVtYmVkZGluZyA9IHRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGN1cnJlbnRFcG9jaCk7XG4gICAgICAgICAgICB2YXIgZXBvY2hDb21wbGV0ZWQgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgICAgIHZhciBzaG91bGRTdG9wID0gZXBvY2hDYWxsYmFjayhlcG9jaENvbXBsZXRlZCkgPT09IGZhbHNlO1xuICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGVwb2NoQ29tcGxldGVkID09PSBuRXBvY2hzIHx8IHNob3VsZFN0b3A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVtYmVkZGluZztcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmdldE5FcG9jaHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBncmFwaCA9IHRoaXMuZ3JhcGg7XG4gICAgICAgIGlmICh0aGlzLm5FcG9jaHMgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uRXBvY2hzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW5ndGggPSBncmFwaC5uUm93cztcbiAgICAgICAgaWYgKGxlbmd0aCA8PSAyNTAwKSB7XG4gICAgICAgICAgICByZXR1cm4gNTAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxlbmd0aCA8PSA1MDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gNDAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxlbmd0aCA8PSA3NTAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMzAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFVNQVA7XG59KCkpO1xuZXhwb3J0cy5VTUFQID0gVU1BUDtcbmZ1bmN0aW9uIGV1Y2xpZGVhbih4LCB5KSB7XG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdygoeFtpXSAtIHlbaV0pLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguc3FydChyZXN1bHQpO1xufVxuZXhwb3J0cy5ldWNsaWRlYW4gPSBldWNsaWRlYW47XG5mdW5jdGlvbiBjb3NpbmUoeCwgeSkge1xuICAgIHZhciByZXN1bHQgPSAwLjA7XG4gICAgdmFyIG5vcm1YID0gMC4wO1xuICAgIHZhciBub3JtWSA9IDAuMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ICs9IHhbaV0gKiB5W2ldO1xuICAgICAgICBub3JtWCArPSBNYXRoLnBvdyh4W2ldLCAyKTtcbiAgICAgICAgbm9ybVkgKz0gTWF0aC5wb3coeVtpXSwgMik7XG4gICAgfVxuICAgIGlmIChub3JtWCA9PT0gMCAmJiBub3JtWSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9ybVggPT09IDAgfHwgbm9ybVkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDEuMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAxLjAgLSByZXN1bHQgLyBNYXRoLnNxcnQobm9ybVggKiBub3JtWSk7XG4gICAgfVxufVxuZXhwb3J0cy5jb3NpbmUgPSBjb3NpbmU7XG52YXIgT3B0aW1pemF0aW9uU3RhdGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9wdGltaXphdGlvblN0YXRlKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRFcG9jaCA9IDA7XG4gICAgICAgIHRoaXMuaGVhZEVtYmVkZGluZyA9IFtdO1xuICAgICAgICB0aGlzLnRhaWxFbWJlZGRpbmcgPSBbXTtcbiAgICAgICAgdGhpcy5oZWFkID0gW107XG4gICAgICAgIHRoaXMudGFpbCA9IFtdO1xuICAgICAgICB0aGlzLmVwb2Noc1BlclNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLmVwb2NoT2ZOZXh0U2FtcGxlID0gW107XG4gICAgICAgIHRoaXMuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlID0gW107XG4gICAgICAgIHRoaXMubW92ZU90aGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0aWFsQWxwaGEgPSAxLjA7XG4gICAgICAgIHRoaXMuYWxwaGEgPSAxLjA7XG4gICAgICAgIHRoaXMuZ2FtbWEgPSAxLjA7XG4gICAgICAgIHRoaXMuYSA9IDEuNTc2OTQzNDYwMzExMzA3NztcbiAgICAgICAgdGhpcy5iID0gMC44OTUwNjA4Nzc5MTA5NzMzO1xuICAgICAgICB0aGlzLmRpbSA9IDI7XG4gICAgICAgIHRoaXMubkVwb2NocyA9IDUwMDtcbiAgICAgICAgdGhpcy5uVmVydGljZXMgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gT3B0aW1pemF0aW9uU3RhdGU7XG59KCkpO1xuZnVuY3Rpb24gY2xpcCh4LCBjbGlwVmFsdWUpIHtcbiAgICBpZiAoeCA+IGNsaXBWYWx1ZSlcbiAgICAgICAgcmV0dXJuIGNsaXBWYWx1ZTtcbiAgICBlbHNlIGlmICh4IDwgLWNsaXBWYWx1ZSlcbiAgICAgICAgcmV0dXJuIC1jbGlwVmFsdWU7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4geDtcbn1cbmZ1bmN0aW9uIHJEaXN0KHgsIHkpIHtcbiAgICB2YXIgcmVzdWx0ID0gMC4wO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0gTWF0aC5wb3coeFtpXSAtIHlbaV0sIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZmluZEFCUGFyYW1zKHNwcmVhZCwgbWluRGlzdCkge1xuICAgIHZhciBjdXJ2ZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDIpLCBhID0gX2JbMF0sIGIgPSBfYlsxXTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gMS4wIC8gKDEuMCArIGEgKiBNYXRoLnBvdyh4LCAoMiAqIGIpKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgeHYgPSB1dGlsc1xuICAgICAgICAubGluZWFyKDAsIHNwcmVhZCAqIDMsIDMwMClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodmFsKSB7IHJldHVybiAodmFsIDwgbWluRGlzdCA/IDEuMCA6IHZhbCk7IH0pO1xuICAgIHZhciB5diA9IHV0aWxzLnplcm9zKHh2Lmxlbmd0aCkubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgIHZhciBndGUgPSB4dltpbmRleF0gPj0gbWluRGlzdDtcbiAgICAgICAgcmV0dXJuIGd0ZSA/IE1hdGguZXhwKC0oeHZbaW5kZXhdIC0gbWluRGlzdCkgLyBzcHJlYWQpIDogdmFsO1xuICAgIH0pO1xuICAgIHZhciBpbml0aWFsVmFsdWVzID0gWzAuNSwgMC41XTtcbiAgICB2YXIgZGF0YSA9IHsgeDogeHYsIHk6IHl2IH07XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGRhbXBpbmc6IDEuNSxcbiAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgZ3JhZGllbnREaWZmZXJlbmNlOiAxMGUtMixcbiAgICAgICAgbWF4SXRlcmF0aW9uczogMTAwLFxuICAgICAgICBlcnJvclRvbGVyYW5jZTogMTBlLTMsXG4gICAgfTtcbiAgICB2YXIgcGFyYW1ldGVyVmFsdWVzID0gbWxfbGV2ZW5iZXJnX21hcnF1YXJkdF8xLmRlZmF1bHQoZGF0YSwgY3VydmUsIG9wdGlvbnMpLnBhcmFtZXRlclZhbHVlcztcbiAgICB2YXIgX2EgPSBfX3JlYWQocGFyYW1ldGVyVmFsdWVzLCAyKSwgYSA9IF9hWzBdLCBiID0gX2FbMV07XG4gICAgcmV0dXJuIHsgYTogYSwgYjogYiB9O1xufVxuZXhwb3J0cy5maW5kQUJQYXJhbXMgPSBmaW5kQUJQYXJhbXM7XG5mdW5jdGlvbiBmYXN0SW50ZXJzZWN0aW9uKGdyYXBoLCB0YXJnZXQsIHVua25vd25EaXN0LCBmYXJEaXN0KSB7XG4gICAgaWYgKHVua25vd25EaXN0ID09PSB2b2lkIDApIHsgdW5rbm93bkRpc3QgPSAxLjA7IH1cbiAgICBpZiAoZmFyRGlzdCA9PT0gdm9pZCAwKSB7IGZhckRpc3QgPSA1LjA7IH1cbiAgICByZXR1cm4gZ3JhcGgubWFwKGZ1bmN0aW9uICh2YWx1ZSwgcm93LCBjb2wpIHtcbiAgICAgICAgaWYgKHRhcmdldFtyb3ddID09PSAtMSB8fCB0YXJnZXRbY29sXSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAqIE1hdGguZXhwKC11bmtub3duRGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0W3Jvd10gIT09IHRhcmdldFtjb2xdKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKiBNYXRoLmV4cCgtZmFyRGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMuZmFzdEludGVyc2VjdGlvbiA9IGZhc3RJbnRlcnNlY3Rpb247XG5mdW5jdGlvbiByZXNldExvY2FsQ29ubmVjdGl2aXR5KHNpbXBsaWNpYWxTZXQpIHtcbiAgICBzaW1wbGljaWFsU2V0ID0gbWF0cml4Lm5vcm1hbGl6ZShzaW1wbGljaWFsU2V0LCBcIm1heFwiKTtcbiAgICB2YXIgdHJhbnNwb3NlID0gbWF0cml4LnRyYW5zcG9zZShzaW1wbGljaWFsU2V0KTtcbiAgICB2YXIgcHJvZE1hdHJpeCA9IG1hdHJpeC5wYWlyd2lzZU11bHRpcGx5KHRyYW5zcG9zZSwgc2ltcGxpY2lhbFNldCk7XG4gICAgc2ltcGxpY2lhbFNldCA9IG1hdHJpeC5hZGQoc2ltcGxpY2lhbFNldCwgbWF0cml4LnN1YnRyYWN0KHRyYW5zcG9zZSwgcHJvZE1hdHJpeCkpO1xuICAgIHJldHVybiBtYXRyaXguZWxpbWluYXRlWmVyb3Moc2ltcGxpY2lhbFNldCk7XG59XG5leHBvcnRzLnJlc2V0TG9jYWxDb25uZWN0aXZpdHkgPSByZXNldExvY2FsQ29ubmVjdGl2aXR5O1xuZnVuY3Rpb24gaW5pdFRyYW5zZm9ybShpbmRpY2VzLCB3ZWlnaHRzLCBlbWJlZGRpbmcpIHtcbiAgICB2YXIgcmVzdWx0ID0gdXRpbHNcbiAgICAgICAgLnplcm9zKGluZGljZXMubGVuZ3RoKVxuICAgICAgICAubWFwKGZ1bmN0aW9uICh6KSB7IHJldHVybiB1dGlscy56ZXJvcyhlbWJlZGRpbmdbMF0ubGVuZ3RoKTsgfSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kaWNlc1swXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBlbWJlZGRpbmdbMF0ubGVuZ3RoOyBkKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgYSA9IGluZGljZXNbaV1bal07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldW2RdICs9IHdlaWdodHNbaV1bal0gKiBlbWJlZGRpbmdbYV1bZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuaW5pdFRyYW5zZm9ybSA9IGluaXRUcmFuc2Zvcm07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiB0YXVSYW5kSW50KG4sIHJhbmRvbSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmRvbSgpICogbik7XG59XG5leHBvcnRzLnRhdVJhbmRJbnQgPSB0YXVSYW5kSW50O1xuZnVuY3Rpb24gdGF1UmFuZChyYW5kb20pIHtcbiAgICByZXR1cm4gcmFuZG9tKCk7XG59XG5leHBvcnRzLnRhdVJhbmQgPSB0YXVSYW5kO1xuZnVuY3Rpb24gbm9ybSh2ZWMpIHtcbiAgICB2YXIgZV8xLCBfYTtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciB2ZWNfMSA9IF9fdmFsdWVzKHZlYyksIHZlY18xXzEgPSB2ZWNfMS5uZXh0KCk7ICF2ZWNfMV8xLmRvbmU7IHZlY18xXzEgPSB2ZWNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdmVjXzFfMS52YWx1ZTtcbiAgICAgICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdyhpdGVtLCAyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZlY18xXzEgJiYgIXZlY18xXzEuZG9uZSAmJiAoX2EgPSB2ZWNfMS5yZXR1cm4pKSBfYS5jYWxsKHZlY18xKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnNxcnQocmVzdWx0KTtcbn1cbmV4cG9ydHMubm9ybSA9IG5vcm07XG5mdW5jdGlvbiBlbXB0eShuKSB7XG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5leHBvcnRzLmVtcHR5ID0gZW1wdHk7XG5mdW5jdGlvbiByYW5nZShuKSB7XG4gICAgcmV0dXJuIGVtcHR5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkgeyByZXR1cm4gaTsgfSk7XG59XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG5mdW5jdGlvbiBmaWxsZWQobiwgdikge1xuICAgIHJldHVybiBlbXB0eShuKS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdjsgfSk7XG59XG5leHBvcnRzLmZpbGxlZCA9IGZpbGxlZDtcbmZ1bmN0aW9uIHplcm9zKG4pIHtcbiAgICByZXR1cm4gZmlsbGVkKG4sIDApO1xufVxuZXhwb3J0cy56ZXJvcyA9IHplcm9zO1xuZnVuY3Rpb24gb25lcyhuKSB7XG4gICAgcmV0dXJuIGZpbGxlZChuLCAxKTtcbn1cbmV4cG9ydHMub25lcyA9IG9uZXM7XG5mdW5jdGlvbiBsaW5lYXIoYSwgYiwgbGVuKSB7XG4gICAgcmV0dXJuIGVtcHR5KGxlbikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICAgIHJldHVybiBhICsgaSAqICgoYiAtIGEpIC8gKGxlbiAtIDEpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubGluZWFyID0gbGluZWFyO1xuZnVuY3Rpb24gc3VtKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0LnJlZHVjZShmdW5jdGlvbiAoc3VtLCB2YWwpIHsgcmV0dXJuIHN1bSArIHZhbDsgfSk7XG59XG5leHBvcnRzLnN1bSA9IHN1bTtcbmZ1bmN0aW9uIG1lYW4oaW5wdXQpIHtcbiAgICByZXR1cm4gc3VtKGlucHV0KSAvIGlucHV0Lmxlbmd0aDtcbn1cbmV4cG9ydHMubWVhbiA9IG1lYW47XG5mdW5jdGlvbiBtYXgoaW5wdXQpIHtcbiAgICB2YXIgbWF4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1heCA9IGlucHV0W2ldID4gbWF4ID8gaW5wdXRbaV0gOiBtYXg7XG4gICAgfVxuICAgIHJldHVybiBtYXg7XG59XG5leHBvcnRzLm1heCA9IG1heDtcbmZ1bmN0aW9uIG1heDJkKGlucHV0KSB7XG4gICAgdmFyIG1heCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGlucHV0W2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBtYXggPSBpbnB1dFtpXVtqXSA+IG1heCA/IGlucHV0W2ldW2pdIDogbWF4O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXg7XG59XG5leHBvcnRzLm1heDJkID0gbWF4MmQ7XG5mdW5jdGlvbiByZWplY3Rpb25TYW1wbGUoblNhbXBsZXMsIHBvb2xTaXplLCByYW5kb20pIHtcbiAgICB2YXIgcmVzdWx0ID0gemVyb3MoblNhbXBsZXMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblNhbXBsZXM7IGkrKykge1xuICAgICAgICB2YXIgcmVqZWN0U2FtcGxlID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKHJlamVjdFNhbXBsZSkge1xuICAgICAgICAgICAgdmFyIGogPSB0YXVSYW5kSW50KHBvb2xTaXplLCByYW5kb20pO1xuICAgICAgICAgICAgdmFyIGJyb2tlbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBpOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gcmVzdWx0W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYnJva2VuKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0U2FtcGxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBqO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnJlamVjdGlvblNhbXBsZSA9IHJlamVjdGlvblNhbXBsZTtcbmZ1bmN0aW9uIHJlc2hhcGUyZCh4LCBhLCBiKSB7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaWYgKHgubGVuZ3RoICE9PSBhICogYikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGRpbWVuc2lvbnMgbXVzdCBtYXRjaCBpbnB1dCBsZW5ndGguJyk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYTsgaSsrKSB7XG4gICAgICAgIHZhciBjb2wgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiOyBqKyspIHtcbiAgICAgICAgICAgIGNvbC5wdXNoKHhbaW5kZXhdKTtcbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgcm93cy5wdXNoKGNvbCk7XG4gICAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xufVxuZXhwb3J0cy5yZXNoYXBlMmQgPSByZXNoYXBlMmQ7XG4iXSwibmFtZXMiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJpc0FueUFycmF5Iiwib2JqZWN0IiwiY2FsbCIsImVuZHNXaXRoIiwiZXJyb3JDYWxjdWxhdGlvbiIsImRhdGEiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyaXplZEZ1bmN0aW9uIiwiZXJyb3IiLCJmdW5jIiwiaSIsIngiLCJsZW5ndGgiLCJNYXRoIiwiYWJzIiwieSIsInZhbHVlIiwidGFnIiwiaW5jbHVkZXMiLCJyZXNjYWxlIiwiaW5wdXQiLCJvdXRwdXQiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiQXJyYXkiLCJjdXJyZW50TWluIiwiX29wdGlvbnMkZnJvbUluZGV4IiwiZnJvbUluZGV4IiwiX29wdGlvbnMkdG9JbmRleCIsInRvSW5kZXgiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJFcnJvciIsIm1pblZhbHVlIiwibWluIiwiY3VycmVudE1heCIsIm1heFZhbHVlIiwibWF4IiwiUmFuZ2VFcnJvciIsIl9vcHRpb25zJG1pbiIsImF1dG9NaW5NYXgiLCJfb3B0aW9ucyRtYXgiLCJmYWN0b3IiLCJpbmRlbnQiLCJyZXBlYXQiLCJpbmRlbnREYXRhIiwiaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zIiwibWF0cml4IiwibWF4Um93cyIsIm1heENvbHVtbnMiLCJtYXhOdW1TaXplIiwicGFkTWludXMiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJyb3dzIiwiY29sdW1ucyIsIm1heEkiLCJtYXhKIiwicmVzdWx0IiwibG9vcCIsImoiLCJnZXQiLCJsaW5lIiwicHVzaCIsImZvcm1hdE51bWJlciIsImpvaW4iLCJpbnNwZWN0RGF0YSIsIm51bSIsImZvcm1hdE51bWJlcjIiLCJwYWRFbmQiLCJsZW4iLCJzdHIiLCJmaXgiLCJ0b0ZpeGVkIiwic3RhcnRzV2l0aCIsImV4cCIsInRvRXhwb25lbnRpYWwiLCJzbGljZSIsImNoZWNrUm93SW5kZXgiLCJpbmRleCIsIm91dGVyIiwiY2hlY2tDb2x1bW5JbmRleCIsImNoZWNrUm93VmVjdG9yIiwidmVjdG9yIiwidG8xREFycmF5IiwiY2hlY2tDb2x1bW5WZWN0b3IiLCJjaGVja1JhbmdlIiwic3RhcnRSb3ciLCJlbmRSb3ciLCJzdGFydENvbHVtbiIsImVuZENvbHVtbiIsImNoZWNrTnVtYmVyIiwibmV3QXJyYXkiLCJhcnJheSIsImNoZWNrTm9uRW1wdHkiLCJpc0VtcHR5IiwiQWJzdHJhY3RNYXRyaXgiLCJzdGF0aWMiLCJuZXdSb3dzIiwibmV3Q29sdW1ucyIsIm5ld0RhdGEiLCJuZXdNYXRyaXgiLCJNYXRyaXgiLCJyb3ciLCJjb2x1bW4iLCJzZXQiLCJmaWxsIiwicmFuZG9tIiwiaW50ZXJ2YWwiLCJyb3VuZCIsInRoaXMiLCJ6ZXJvcyIsImwiLCJtYXRyaXgxIiwibWF0cml4MiIsImNoZWNrTWF0cml4IiwiaXNNYXRyaXgiLCJrbGFzcyIsInNpemUiLCJhcHBseSIsImNhbGxiYWNrIiwidG8yREFycmF5IiwiY29weSIsInRvSlNPTiIsImlzUm93VmVjdG9yIiwiaXNDb2x1bW5WZWN0b3IiLCJpc1ZlY3RvciIsImlzU3F1YXJlIiwiaXNTeW1tZXRyaWMiLCJpc0VjaGVsb25Gb3JtIiwicHJldmlvdXNDb2x1bW4iLCJjaGVja2VkIiwiaXNSZWR1Y2VkRWNoZWxvbkZvcm0iLCJrIiwiZWNoZWxvbkZvcm0iLCJjbG9uZSIsImgiLCJpTWF4Iiwic3dhcFJvd3MiLCJ0bXAiLCJyZWR1Y2VkRWNoZWxvbkZvcm0iLCJtIiwibiIsIm1heFJvdyIsInAiLCJwaXZvdCIsInNldFN1Yk1hdHJpeCIsIm5lZyIsIm11bFMiLCJnZXRSb3ciLCJnZXRSb3dWZWN0b3IiLCJyb3dWZWN0b3IiLCJzZXRSb3ciLCJyb3cxIiwicm93MiIsInRlbXAiLCJnZXRDb2x1bW4iLCJnZXRDb2x1bW5WZWN0b3IiLCJjb2x1bW5WZWN0b3IiLCJzZXRDb2x1bW4iLCJzd2FwQ29sdW1ucyIsImNvbHVtbjEiLCJjb2x1bW4yIiwiYWRkUm93VmVjdG9yIiwic3ViUm93VmVjdG9yIiwibXVsUm93VmVjdG9yIiwiZGl2Um93VmVjdG9yIiwiYWRkQ29sdW1uVmVjdG9yIiwic3ViQ29sdW1uVmVjdG9yIiwibXVsQ29sdW1uVmVjdG9yIiwiZGl2Q29sdW1uVmVjdG9yIiwibXVsUm93IiwibXVsQ29sdW1uIiwiYnkiLCJOYU4iLCJORUdBVElWRV9JTkZJTklUWSIsIm1heEluZGV4IiwidiIsImlkeCIsIlBPU0lUSVZFX0lORklOSVRZIiwibWluSW5kZXgiLCJtYXhSb3dJbmRleCIsIm1pblJvdyIsIm1pblJvd0luZGV4IiwibWF4Q29sdW1uIiwibWF4Q29sdW1uSW5kZXgiLCJtaW5Db2x1bW4iLCJtaW5Db2x1bW5JbmRleCIsImRpYWciLCJub3JtIiwidHlwZSIsInNxcnQiLCJjdW11bGF0aXZlU3VtIiwic3VtIiwiZG90IiwidmVjdG9yMiIsInZlY3RvcjEiLCJtbXVsIiwib3RoZXIiLCJCY29saiIsIkZsb2F0NjRBcnJheSIsInMiLCJzdHJhc3NlbjJ4MiIsImExMSIsImIxMSIsImExMiIsImIxMiIsImEyMSIsImIyMSIsImEyMiIsImIyMiIsIm0xIiwibTIiLCJtMyIsIm00IiwibTUiLCJjMDAiLCJjMDEiLCJjMTAiLCJjMTEiLCJzdHJhc3NlbjN4MyIsImEwMCIsImEwMSIsImEwMiIsImExMCIsImEyMCIsImIwMCIsImIwMSIsImIwMiIsImIxMCIsImIyMCIsIm02IiwibTciLCJtOCIsIm05IiwibTEyIiwibTEzIiwibTE0IiwibTE1IiwibTE2IiwibTE3IiwibTE4IiwiYzAyIiwiYzEyIiwiYzIwIiwiYzIxIiwiYzIyIiwibW11bFN0cmFzc2VuIiwicjEiLCJjMSIsInIyIiwiYzIiLCJlbWJlZCIsIm1hdCIsImNvbHMiLCJyIiwiYyIsInJlc3VsdGF0IiwiY29uc29sZSIsIndhcm4iLCJibG9ja011bHQiLCJhIiwiYiIsImhhbGZSb3dzIiwicGFyc2VJbnQiLCJoYWxmQ29scyIsInN1Yk1hdHJpeCIsImFkZCIsInN1YiIsInNjYWxlUm93cyIsImlzRmluaXRlIiwic2NhbGVDb2x1bW5zIiwiZmxpcFJvd3MiLCJtaWRkbGUiLCJjZWlsIiwiZmlyc3QiLCJsYXN0IiwiZmxpcENvbHVtbnMiLCJrcm9uZWNrZXJQcm9kdWN0IiwicSIsImtyb25lY2tlclN1bSIsIkF4SSIsImV5ZSIsIkl4QiIsInRyYW5zcG9zZSIsInNvcnRSb3dzIiwiY29tcGFyZUZ1bmN0aW9uIiwiY29tcGFyZU51bWJlcnMiLCJzb3J0Iiwic29ydENvbHVtbnMiLCJzdWJNYXRyaXhSb3ciLCJpbmRpY2VzIiwic3ViTWF0cml4Q29sdW1uIiwic2VsZWN0aW9uIiwicm93SW5kaWNlcyIsImNvbHVtbkluZGljZXMiLCJjaGVja1Jvd0luZGljZXMiLCJjaGVja0NvbHVtbkluZGljZXMiLCJyb3dJbmRleCIsImNvbHVtbkluZGV4IiwidHJhY2UiLCJzdW1CeVJvdyIsInN1bUJ5Q29sdW1uIiwic3VtQWxsIiwicHJvZHVjdCIsInByb2R1Y3RCeVJvdyIsInByb2R1Y3RCeUNvbHVtbiIsInByb2R1Y3RBbGwiLCJtZWFuIiwidmFyaWFuY2UiLCJ1bmJpYXNlZCIsInN1bTEiLCJzdW0yIiwidmFyaWFuY2VCeVJvdyIsInZhcmlhbmNlQnlDb2x1bW4iLCJ2YXJpYW5jZUFsbCIsInN0YW5kYXJkRGV2aWF0aW9uIiwiY2VudGVyIiwiY2VudGVyQnlSb3ciLCJjZW50ZXJCeUNvbHVtbiIsImNlbnRlckFsbCIsInNjYWxlIiwicG93IiwiZ2V0U2NhbGVCeVJvdyIsInNjYWxlQnlSb3ciLCJnZXRTY2FsZUJ5Q29sdW1uIiwic2NhbGVCeUNvbHVtbiIsImRpdmlkZXIiLCJnZXRTY2FsZUFsbCIsInNjYWxlQWxsIiwiU3ltYm9sIiwiZm9yIiwicmFuZCIsInJhbmRvbUludCIsInJhbmRJbnQiLCJkaWFnb25hbCIsImlkZW50aXR5IiwibmVnYXRlIiwidGVuc29yUHJvZHVjdCIsIm5Sb3dzIiwibkNvbHVtbnMiLCJzdXBlciIsImFycmF5RGF0YSIsImV2ZXJ5IiwiZWxlbWVudCIsImZyb20iLCJyZW1vdmVSb3ciLCJzcGxpY2UiLCJhZGRSb3ciLCJyZW1vdmVDb2x1bW4iLCJuZXdSb3ciLCJhZGRDb2x1bW4iLCJhZGRTIiwiYWRkTSIsInN1YlMiLCJzdWJNIiwic3VidHJhY3QiLCJzdWJ0cmFjdFMiLCJzdWJ0cmFjdE0iLCJtdWwiLCJtdWxNIiwibXVsdGlwbHkiLCJtdWx0aXBseVMiLCJtdWx0aXBseU0iLCJkaXYiLCJkaXZTIiwiZGl2TSIsImRpdmlkZSIsImRpdmlkZVMiLCJkaXZpZGVNIiwibW9kIiwibW9kUyIsIm1vZE0iLCJtb2R1bHVzIiwibW9kdWx1c1MiLCJtb2R1bHVzTSIsImFuZCIsImFuZFMiLCJhbmRNIiwib3IiLCJvclMiLCJvck0iLCJ4b3IiLCJ4b3JTIiwieG9yTSIsImxlZnRTaGlmdCIsImxlZnRTaGlmdFMiLCJsZWZ0U2hpZnRNIiwic2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCIsInNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTIiwic2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0iLCJyaWdodFNoaWZ0IiwicmlnaHRTaGlmdFMiLCJyaWdodFNoaWZ0TSIsInplcm9GaWxsUmlnaHRTaGlmdCIsInplcm9GaWxsUmlnaHRTaGlmdFMiLCJ6ZXJvRmlsbFJpZ2h0U2hpZnRNIiwibm90IiwiYWNvcyIsImFjb3NoIiwiYXNpbiIsImFzaW5oIiwiYXRhbiIsImF0YW5oIiwiY2JydCIsImNsejMyIiwiY29zIiwiY29zaCIsImV4cG0xIiwiZmxvb3IiLCJmcm91bmQiLCJsb2ciLCJsb2cxcCIsImxvZzEwIiwibG9nMiIsInNpZ24iLCJzaW4iLCJzaW5oIiwidGFuIiwidGFuaCIsInRydW5jIiwiYXJnMCIsInBvd1MiLCJwb3dNIiwiaW5zdGFsbE1hdGhPcGVyYXRpb25zIiwiV3JhcHBlck1hdHJpeDJEIiwiTHVEZWNvbXBvc2l0aW9uIiwidCIsIkxVY29saiIsImttYXgiLCJsdSIsInBpdm90VmVjdG9yIiwicGl2b3RTaWduIiwiTFUiLCJpc1Npbmd1bGFyIiwiY29sIiwic29sdmUiLCJjb3VudCIsIlgiLCJkZXRlcm1pbmFudCIsImxvd2VyVHJpYW5ndWxhck1hdHJpeCIsInVwcGVyVHJpYW5ndWxhck1hdHJpeCIsInBpdm90UGVybXV0YXRpb25WZWN0b3IiLCJoeXBvdGVudXNlIiwiUXJEZWNvbXBvc2l0aW9uIiwicXIiLCJyZGlhZyIsIm5ybSIsIlFSIiwiUmRpYWciLCJpc0Z1bGxSYW5rIiwib3J0aG9nb25hbE1hdHJpeCIsIlNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIiwiY29tcHV0ZUxlZnRTaW5ndWxhclZlY3RvcnMiLCJjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMiLCJhdXRvVHJhbnNwb3NlIiwid2FudHUiLCJCb29sZWFuIiwid2FudHYiLCJzd2FwcGVkIiwiYXV4IiwibnUiLCJuaSIsIlUiLCJWIiwiZSIsIndvcmsiLCJzaSIsIm5jdCIsIm5ydCIsIm1yYyIsInBwIiwiaXRlciIsImVwcyIsIkVQU0lMT04iLCJrYXNlIiwiYWxwaGEiLCJNSU5fVkFMVUUiLCJpc05hTiIsImtzIiwiZiIsImNzIiwic24iLCJzcCIsInNwbTEiLCJlcG0xIiwic2siLCJlayIsInNoaWZ0IiwiZyIsIlkiLCJ0aHJlc2hvbGQiLCJzY29scyIsIkxzIiwicmlnaHRTaW5ndWxhclZlY3RvcnMiLCJWTCIsInZyb3dzIiwidXJvd3MiLCJWTFUiLCJzb2x2ZUZvckRpYWdvbmFsIiwiaW52ZXJzZSIsInZjb2xzIiwidWNvbHMiLCJjb25kaXRpb24iLCJub3JtMiIsInJhbmsiLCJ0b2wiLCJpaSIsImxlZnRTaW5ndWxhclZlY3RvcnMiLCJkaWFnb25hbE1hdHJpeCIsInN0ZXAiLCJwYXJhbXMiLCJkYW1waW5nIiwiZ3JhZGllbnREaWZmZXJlbmNlIiwiZXZhbHVhdGVkRGF0YSIsImdyYWRpZW50RnVuYyIsInBhcmFtRnVuY3Rpb24iLCJhbnMiLCJwYXJhbSIsImF1eFBhcmFtcyIsImZ1bmNQYXJhbSIsInBvaW50IiwiZ3JhZGllbnRGdW5jdGlvbiIsIm1hdHJpeEZ1bmMiLCJtYXRyaXhGdW5jdGlvbiIsImludmVyc2VNYXRyaXgiLCJ1c2VTVkQiLCJsZWZ0SGFuZFNpZGUiLCJyaWdodEhhbmRTaWRlIiwibGV2ZW5iZXJnTWFycXVhcmR0IiwibWF4SXRlcmF0aW9ucyIsImVycm9yVG9sZXJhbmNlIiwibWluVmFsdWVzIiwibWF4VmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsInBhckxlbiIsIk1BWF9TQUZFX0lOVEVHRVIiLCJNSU5fU0FGRV9JTlRFR0VSIiwiaXRlcmF0aW9uIiwiY29udmVyZ2VkIiwicGFyYW1ldGVyVmFsdWVzIiwicGFyYW1ldGVyRXJyb3IiLCJpdGVyYXRpb25zIiwiX19pbXBvcnRTdGFyIiwiX19lc01vZHVsZSIsImhhc093blByb3BlcnR5IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidXRpbHMiLCJtYWtlSGVhcCIsIm5Qb2ludHMiLCJtYWtlQXJyYXlzIiwiZmlsbFZhbHVlIiwiZW1wdHkiLCJtYXAiLCJmaWxsZWQiLCJoZWFwIiwiSW5maW5pdHkiLCJoZWFwUHVzaCIsIndlaWdodCIsImZsYWciLCJ3ZWlnaHRzIiwidW5jaGVja2VkSGVhcFB1c2giLCJpc05ldyIsImlTd2FwIiwiaWMxIiwiaWMyIiwiaGVhcFNoYXBlMiIsInNpZnREb3duIiwiaGVhcDEiLCJoZWFwMiIsImNlaWxpbmciLCJlbHQiLCJsZWZ0Q2hpbGQiLCJyaWdodENoaWxkIiwic3dhcCIsInRlbXAxIiwidGVtcDIiLCJyZWplY3Rpb25TYW1wbGUiLCJuU2FtcGxlcyIsInBvb2xTaXplIiwicmVqZWN0U2FtcGxlIiwidGF1UmFuZEludCIsImJyb2tlbiIsImJ1aWxkQ2FuZGlkYXRlcyIsImN1cnJlbnRHcmFwaCIsIm5WZXJ0aWNlcyIsIm5OZWlnaGJvcnMiLCJtYXhDYW5kaWRhdGVzIiwiY2FuZGlkYXRlTmVpZ2hib3JzIiwiaXNuIiwiZCIsInRhdVJhbmQiLCJkZWhlYXBTb3J0IiwiaW5kSGVhcCIsImRpc3RIZWFwIiwiaW5kSGVhcEluZGV4IiwiZGlzdEhlYXBJbmRleCIsInNtYWxsZXN0RmxhZ2dlZCIsImluZCIsImRpc3QiLCJtaW5EaXN0IiwicmVzdWx0SW5kZXgiLCJ1bWFwXzEiLCJVTUFQIiwiX2EiLCJfX3JlYWQiLCJvIiwiaXRlcmF0b3IiLCJhciIsIm5leHQiLCJkb25lIiwiX192YWx1ZXMiLCJTcGFyc2VNYXRyaXgiLCJ2YWx1ZXMiLCJkaW1zIiwiZW50cmllcyIsIk1hcCIsIm5Db2xzIiwiY2hlY2tEaW1zIiwia2V5IiwibWFrZUtleSIsImhhcyIsImRlZmF1bHRWYWx1ZSIsImdldEFsbCIsIm9yZGVyZWQiLCJyb3dDb2xWYWx1ZXMiLCJmb3JFYWNoIiwiZ2V0RGltcyIsImdldFJvd3MiLCJfYiIsImdldENvbHMiLCJnZXRWYWx1ZXMiLCJmbiIsInZhbHMiLCJ0b0FycmF5IiwiX3RoaXMiLCJwYWlyd2lzZU11bHRpcGx5IiwiZWxlbWVudFdpc2UiLCJtYXhpbXVtIiwibXVsdGlwbHlTY2FsYXIiLCJzY2FsYXIiLCJlbGltaW5hdGVaZXJvcyIsInplcm9JbmRpY2VzIiwiU2V0IiwicmVtb3ZlQnlaZXJvSW5kZXgiLCJfIiwibmV4dFZhbHVlcyIsImZpbHRlciIsIm5leHRSb3dzIiwibmV4dENvbHMiLCJub3JtYWxpemUiLCJub3JtVHlwZSIsImVfMSIsIm5vcm1GbiIsIm5vcm1GbnMiLCJjb2xzQnlSb3ciLCJuZXh0TWF0cml4IiwiX2xvb3BfMSIsImtleXMiLCJfYyIsImVfMV8xIiwicmV0dXJuIiwieHMiLCJvcCIsInZpc2l0ZWQiLCJvcGVyYXRlIiwibmV4dFZhbHVlIiwidmFsdWVzQSIsInJvd3NBIiwiY29sc0EiLCJ2YWx1ZXNCIiwicm93c0IiLCJjb2xzQiIsImdldENTUiIsImluZHB0ciIsImN1cnJlbnRSb3ciLCJ0cmVlIiwibWFrZU5ORGVzY2VudCIsImRpc3RhbmNlRm4iLCJsZWFmQXJyYXkiLCJuSXRlcnMiLCJkZWx0YSIsInJobyIsInJwVHJlZUluaXQiLCJjaiIsImNrIiwibWFrZUluaXRpYWxpemF0aW9ucyIsImluaXRGcm9tUmFuZG9tIiwicXVlcnlQb2ludHMiLCJfaGVhcCIsImluaXRGcm9tVHJlZSIsIl90cmVlIiwic2VhcmNoRmxhdFRyZWUiLCJtYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCIsImdyYXBoIiwiaW5pdGlhbGl6YXRpb24iLCJ0cmllZCIsInZlcnRleCIsImNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzXzEiLCJjYW5kaWRhdGVzXzFfMSIsImNhbmRpZGF0ZSIsImluaXRpYWxpemVTZWFyY2giLCJmb3Jlc3QiLCJlXzIiLCJyZXN1bHRzIiwiZm9yZXN0XzEiLCJmb3Jlc3RfMV8xIiwiZV8yXzEiLCJfX3NwcmVhZCIsImNvbmNhdCIsIkZsYXRUcmVlIiwiaHlwZXJwbGFuZXMiLCJvZmZzZXRzIiwiY2hpbGRyZW4iLCJtYWtlRXVjbGlkZWFuVHJlZSIsImxlYWZTaXplIiwic3BsaXRSZXN1bHRzIiwiZGltIiwibGVmdEluZGV4IiwicmlnaHRJbmRleCIsImxlZnQiLCJyaWdodCIsImh5cGVycGxhbmVPZmZzZXQiLCJoeXBlcnBsYW5lVmVjdG9yIiwibkxlZnQiLCJuUmlnaHQiLCJzaWRlIiwibWFyZ2luIiwiaW5kaWNlc0xlZnQiLCJpbmRpY2VzUmlnaHQiLCJoeXBlcnBsYW5lIiwib2Zmc2V0IiwiZXVjbGlkZWFuUmFuZG9tUHJvamVjdGlvblNwbGl0IiwiaXNMZWFmIiwicmVjdXJzaXZlRmxhdHRlbiIsIm5vZGVOdW0iLCJsZWFmTnVtIiwib2xkTm9kZU51bSIsInJlcyIsIm51bU5vZGVzIiwibnVtTGVhdmVzIiwic2VsZWN0U2lkZSIsIm1ha2VGb3Jlc3QiLCJuVHJlZXMiLCJyYW5nZSIsIm1ha2VUcmVlIiwibk5vZGVzIiwibkxlYXZlcyIsImZsYXR0ZW5UcmVlIiwibWFrZUxlYWZBcnJheSIsInJwRm9yZXN0IiwicnBGb3Jlc3RfMSIsInJwRm9yZXN0XzFfMSIsIm5vZGUiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwidGhlbiIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwicG9wIiwiX19pbXBvcnREZWZhdWx0Iiwibm5EZXNjZW50IiwibWxfbGV2ZW5iZXJnX21hcnF1YXJkdF8xIiwiU01PT1RIX0tfVE9MRVJBTkNFIiwiTUlOX0tfRElTVF9TQ0FMRSIsImxlYXJuaW5nUmF0ZSIsImxvY2FsQ29ubmVjdGl2aXR5IiwibkNvbXBvbmVudHMiLCJuRXBvY2hzIiwibmVnYXRpdmVTYW1wbGVSYXRlIiwicmVwdWxzaW9uU3RyZW5ndGgiLCJzZXRPcE1peFJhdGlvIiwic3ByZWFkIiwidHJhbnNmb3JtUXVldWVTaXplIiwidGFyZ2V0TWV0cmljIiwidGFyZ2V0V2VpZ2h0IiwidGFyZ2V0Tk5laWdoYm9ycyIsImV1Y2xpZGVhbiIsImlzSW5pdGlhbGl6ZWQiLCJlbWJlZGRpbmciLCJvcHRpbWl6YXRpb25TdGF0ZSIsIk9wdGltaXphdGlvblN0YXRlIiwic2V0UGFyYW0iLCJmaXQiLCJpbml0aWFsaXplRml0Iiwib3B0aW1pemVMYXlvdXQiLCJmaXRBc3luYyIsIm9wdGltaXplTGF5b3V0QXN5bmMiLCJzZXRTdXBlcnZpc2VkUHJvamVjdGlvbiIsInNldFByZWNvbXB1dGVkS05OIiwia25uSW5kaWNlcyIsImtubkRpc3RhbmNlcyIsImdldE5FcG9jaHMiLCJrbm5SZXN1bHRzIiwibmVhcmVzdE5laWdoYm9ycyIsImZ1enp5U2ltcGxpY2lhbFNldCIsIm1ha2VTZWFyY2hGbnMiLCJzZWFyY2hHcmFwaCIsIm1ha2VTZWFyY2hHcmFwaCIsInByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uIiwiaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmciLCJoZWFkIiwidGFpbCIsImVwb2Noc1BlclNhbXBsZSIsImluaXRpYWxpemVPcHRpbWl6YXRpb24iLCJwcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCIsInNlYXJjaCIsImtubiIsImRpc3RhbmNlcyIsIm5laWdoYm9yIiwiZGlzdGFuY2UiLCJ0cmFuc2Zvcm0iLCJ0b1RyYW5zZm9ybSIsInJhd0RhdGEiLCJpbml0IiwiYWRqdXN0ZWRMb2NhbENvbm5lY3Rpdml0eSIsInNtb290aEtOTkRpc3RhbmNlIiwic2lnbWFzIiwicmhvcyIsImNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzIiwibm9ybWVkIiwiY3NyTWF0cml4IiwiaW5pdFRyYW5zZm9ybSIsInJlc2hhcGUyZCIsImdyYXBoTWF4IiwicmVkdWNlIiwidmFsIiwibWFrZUVwb2Noc1BlclNhbXBsZSIsImFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyIsImhlYWRFbWJlZGRpbmciLCJ0YWlsRW1iZWRkaW5nIiwiY3VycmVudEVwb2NoIiwiZmFyRGlzdCIsImNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbiIsIm9wdGltaXplTGF5b3V0U3RlcCIsImdldEVtYmVkZGluZyIsIm1ldHJpY05ORGVzY2VudCIsIl9kIiwiX2UiLCJzcGFyc2VNYXRyaXgiLCJwcm9kTWF0cml4Iiwic2ltcGxpY2lhbFNldCIsInRhcmdldCIsInVua25vd25EaXN0IiwiaW50ZXJzZWN0aW9uIiwiZmFzdEludGVyc2VjdGlvbiIsInJlc2V0TG9jYWxDb25uZWN0aXZpdHkiLCJuSXRlciIsImJhbmR3aWR0aCIsImxvIiwiaGkiLCJtaWQiLCJpdGhEaXN0YW5jZXMiLCJub25aZXJvRGlzdHMiLCJpbnRlcnBvbGF0aW9uIiwicHN1bSIsIm1lYW5JdGhEaXN0YW5jZXMiLCJtZWFuRGlzdGFuY2VzIiwiZ3JhcGhWYWx1ZXMiLCJlbnRyeSIsInciLCJzdGF0ZSIsImFzc2lnbiIsIm1vdmVPdGhlciIsImVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlIiwiZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSIsImVwb2NoT2ZOZXh0U2FtcGxlIiwiaW5pdGlhbEFscGhhIiwiZ2FtbWEiLCJmaW5kQUJQYXJhbXMiLCJjdXJyZW50IiwiZGlzdFNxdWFyZWQiLCJyRGlzdCIsImdyYWRDb2VmZiIsImdyYWREIiwiY2xpcCIsIm5OZWdTYW1wbGVzIiwia18xIiwib3RoZXJfMSIsImRpc3RTcXVhcmVkXzEiLCJncmFkQ29lZmZfMSIsImVwb2NoQ2FsbGJhY2siLCJlcG9jaENvbXBsZXRlZCIsInNob3VsZFN0b3AiLCJpc0ZpbmlzaGVkIiwic2V0VGltZW91dCIsImVyciIsImNvc2luZSIsIm5vcm1YIiwibm9ybVkiLCJjbGlwVmFsdWUiLCJ4diIsImxpbmVhciIsInl2IiwiZGVmYXVsdCIsInoiLCJ2ZWMiLCJ2ZWNfMSIsInZlY18xXzEiLCJpdGVtIiwib25lcyIsIm1heDJkIl0sInNvdXJjZVJvb3QiOiIifQ==