diff --git a/app_web/assets/music1.wav b/app_web/assets/music1.wav new file mode 100644 index 0000000..703b85f Binary files /dev/null and b/app_web/assets/music1.wav differ diff --git a/app_web/assets/music2.wav b/app_web/assets/music2.wav new file mode 100644 index 0000000..d513c82 Binary files /dev/null and b/app_web/assets/music2.wav differ diff --git a/app_web/assets/parkingGarage.wav b/app_web/assets/parkingGarage.wav new file mode 100644 index 0000000..8a63f87 Binary files /dev/null and b/app_web/assets/parkingGarage.wav differ diff --git a/app_web/assets/smallPrehistoricCave.wav b/app_web/assets/smallPrehistoricCave.wav new file mode 100644 index 0000000..1adf8b9 Binary files /dev/null and b/app_web/assets/smallPrehistoricCave.wav differ diff --git a/app_web/game.js b/app_web/game.js index c5ef700..45b765c 100644 --- a/app_web/game.js +++ b/app_web/game.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var t={729:t=>{var e=Object.prototype.hasOwnProperty,s="~";function i(){}function n(t,e,s){this.fn=t,this.context=e,this.once=s||!1}function a(t,e,i,a,h){if("function"!=typeof i)throw new TypeError("The listener must be a function");var r=new n(i,a||t,h),u=s?s+e:e;return t._events[u]?t._events[u].fn?t._events[u]=[t._events[u],r]:t._events[u].push(r):(t._events[u]=r,t._eventsCount++),t}function h(t,e){0==--t._eventsCount?t._events=new i:delete t._events[e]}function r(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),(new i).__proto__||(s=!1)),r.prototype.eventNames=function(){var t,i,n=[];if(0===this._eventsCount)return n;for(i in t=this._events)e.call(t,i)&&n.push(s?i.slice(1):i);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(t)):n},r.prototype.listeners=function(t){var e=s?s+t:t,i=this._events[e];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,a=i.length,h=new Array(a);n{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var i in e)s.o(e,i)&&!s.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{const t=new class{constructor(){this.states=new Map}get(t){return this.states.has(t)?this.states.get(t):null}set(t,e){return this.states.set(t,e)}};class e{constructor(){this.inventory=[],this.currentRoom="start",this.context=null}addItem(t){this.inventory.push(t)}removeItem(t){this.inventory=this.inventory.filter((e=>e!=t))}getInventory(){return this.inventory.map((t=>this.context.getItem(t)))}}class i{speak(t){}stop(){}setOptions(t){}}class n extends i{constructor(t={}){super(),this.timeout=100,this.timeout=t.timeout||100,this.init()}init(){this.container=document.createElement("div"),this.container.setAttribute("aria-live","polite"),this.speechDisplay=document.createElement("div"),this.speechDisplay.setAttribute("aria-live","polite"),this.container.append(this.speechDisplay),document.body.appendChild(this.container),document.body.insertBefore(this.container,document.body.firstChild)}speak(t){this.clearDisplay();const e=document.createTextNode(t),s=document.createElement("p");s.appendChild(e),this.speechDisplay.appendChild(s),setTimeout(this.clearDisplay.bind(this),this.timeout)}stop(){this.clearDisplay()}clearDisplay(){this.speechDisplay.innerHTML=""}}class a extends i{}class h{constructor(t=function(t="aria"){return"webtts"===t?a:n}()){this.output=t}speak(t){this.output.speak(t)}stop(){this.output.stop()}}var r=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{u(i.next(t))}catch(t){a(t)}}function r(t){try{u(i.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class u{constructor(){this.context=new AudioContext}getContext(){return this.context}createGain(){return this.context.createGain()}getOutputDestination(){return this.context.destination}createBufferSource(){return this.context.createBufferSource()}decodeAudioData(t){return r(this,void 0,void 0,(function*(){return yield this.context.decodeAudioData(t)}))}createPanner(){return this.context.createPanner()}createMediaElementSource(t){return this.context.createMediaElementSource(t)}}var l=s(729),o=s.n(l);class c{constructor(t){this.values=new Float32Array(4),void 0!==t&&(this.xyzw=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get w(){return this.values[3]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}get xyzw(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set w(t){this.values[3]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set xyzw(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}get r(){return this.values[0]}get g(){return this.values[1]}get b(){return this.values[2]}get a(){return this.values[3]}get rg(){return[this.values[0],this.values[1]]}get rgb(){return[this.values[0],this.values[1],this.values[2]]}get rgba(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set r(t){this.values[0]=t}set g(t){this.values[1]=t}set b(t){this.values[2]=t}set a(t){this.values[3]=t}set rg(t){this.values[0]=t[0],this.values[1]=t[1]}set rgb(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set rgba(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}at(t){return this.values[t]}reset(){this.x=0,this.y=0,this.z=0,this.w=0}copy(t){return t||(t=new c),t.x=this.x,t.y=this.y,t.z=this.z,t.w=this.w,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t.w=-this.w,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&(!(Math.abs(this.z-t.z)>e)&&!(Math.abs(this.w-t.w)>e)))}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y,s=this.z,i=this.w;return t*t+e*e+s*s+i*i}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}subtract(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e.z*=t,e.w*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x*=0,t.y*=0,t.z*=0,t.w*=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t.w*=e,t)}multiplyMat4(t,e){return e||(e=this),t.multiplyVec4(this,e)}static mix(t,e,s,i){return i||(i=new c),i.x=t.x+s*(e.x-t.x),i.y=t.y+s*(e.y-t.y),i.z=t.z+s*(e.z-t.z),i.w=t.w+s*(e.w-t.w),i}static sum(t,e,s){return s||(s=new c),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s.w=t.w+e.w,s}static difference(t,e,s){return s||(s=new c),s.x=t.x-e.x,s.y=t.y-e.y,s.z=t.z-e.z,s.w=t.w-e.w,s}static product(t,e,s){return s||(s=new c),s.x=t.x*e.x,s.y=t.y*e.y,s.z=t.z*e.z,s.w=t.w*e.w,s}static quotient(t,e,s){return s||(s=new c),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s.w=t.w/e.w,s}}c.zero=new c([0,0,0,1]),c.one=new c([1,1,1,1]);class v{constructor(t){this.values=new Float32Array(16),void 0!==t&&this.init(t)}at(t){return this.values[t]}init(t){for(let e=0;e<16;e++)this.values[e]=t[e];return this}reset(){for(let t=0;t<16;t++)this.values[t]=0}copy(t){t||(t=new v);for(let e=0;e<16;e++)t.values[e]=this.values[e];return t}all(){const t=[];for(let e=0;e<16;e++)t[e]=this.values[e];return t}row(t){return[this.values[4*t+0],this.values[4*t+1],this.values[4*t+2],this.values[4*t+3]]}col(t){return[this.values[t],this.values[t+4],this.values[t+8],this.values[t+12]]}equals(t,e=1e-5){for(let s=0;s<16;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}determinant(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],l=this.values[9],o=this.values[10],c=this.values[11],v=this.values[12],y=this.values[13],d=this.values[14],p=this.values[15];return(t*a-e*n)*(o*p-c*d)-(t*h-s*n)*(l*p-c*y)+(t*r-i*n)*(l*d-o*y)+(e*h-s*a)*(u*p-c*v)-(e*r-i*a)*(u*d-o*v)+(s*r-i*h)*(u*y-l*v)}setIdentity(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=0,this.values[5]=1,this.values[6]=0,this.values[7]=0,this.values[8]=0,this.values[9]=0,this.values[10]=1,this.values[11]=0,this.values[12]=0,this.values[13]=0,this.values[14]=0,this.values[15]=1,this}transpose(){const t=this.values[1],e=this.values[2],s=this.values[3],i=this.values[6],n=this.values[7],a=this.values[11];return this.values[1]=this.values[4],this.values[2]=this.values[8],this.values[3]=this.values[12],this.values[4]=t,this.values[6]=this.values[9],this.values[7]=this.values[13],this.values[8]=e,this.values[9]=i,this.values[11]=this.values[14],this.values[12]=s,this.values[13]=n,this.values[14]=a,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],l=this.values[9],o=this.values[10],c=this.values[11],v=this.values[12],y=this.values[13],d=this.values[14],p=this.values[15],x=t*a-e*n,m=t*h-s*n,w=t*r-i*n,f=e*h-s*a,g=e*r-i*a,z=s*r-i*h,b=u*y-l*v,k=u*d-o*v,C=u*p-c*v,M=l*d-o*y,E=l*p-c*y,I=o*p-c*d;let D=x*I-m*E+w*M+f*C-g*k+z*b;return D?(D=1/D,this.values[0]=(a*I-h*E+r*M)*D,this.values[1]=(-e*I+s*E-i*M)*D,this.values[2]=(y*z-d*g+p*f)*D,this.values[3]=(-l*z+o*g-c*f)*D,this.values[4]=(-n*I+h*C-r*k)*D,this.values[5]=(t*I-s*C+i*k)*D,this.values[6]=(-v*z+d*w-p*m)*D,this.values[7]=(u*z-o*w+c*m)*D,this.values[8]=(n*E-a*C+r*b)*D,this.values[9]=(-t*E+e*C-i*b)*D,this.values[10]=(v*g-y*w+p*x)*D,this.values[11]=(-u*g+l*w-c*x)*D,this.values[12]=(-n*M+a*k-h*b)*D,this.values[13]=(t*M-e*k+s*b)*D,this.values[14]=(-v*f+y*m-d*x)*D,this.values[15]=(u*f-l*m+o*x)*D,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=this.values[4],h=this.values[5],r=this.values[6],u=this.values[7],l=this.values[8],o=this.values[9],c=this.values[10],v=this.values[11],y=this.values[12],d=this.values[13],p=this.values[14],x=this.values[15];let m=t.at(0),w=t.at(1),f=t.at(2),g=t.at(3);return this.values[0]=m*e+w*a+f*l+g*y,this.values[1]=m*s+w*h+f*o+g*d,this.values[2]=m*i+w*r+f*c+g*p,this.values[3]=m*n+w*u+f*v+g*x,m=t.at(4),w=t.at(5),f=t.at(6),g=t.at(7),this.values[4]=m*e+w*a+f*l+g*y,this.values[5]=m*s+w*h+f*o+g*d,this.values[6]=m*i+w*r+f*c+g*p,this.values[7]=m*n+w*u+f*v+g*x,m=t.at(8),w=t.at(9),f=t.at(10),g=t.at(11),this.values[8]=m*e+w*a+f*l+g*y,this.values[9]=m*s+w*h+f*o+g*d,this.values[10]=m*i+w*r+f*c+g*p,this.values[11]=m*n+w*u+f*v+g*x,m=t.at(12),w=t.at(13),f=t.at(14),g=t.at(15),this.values[12]=m*e+w*a+f*l+g*y,this.values[13]=m*s+w*h+f*o+g*d,this.values[14]=m*i+w*r+f*c+g*p,this.values[15]=m*n+w*u+f*v+g*x,this}multiplyVec3(t){const e=t.x,s=t.y,i=t.z;return new x([this.values[0]*e+this.values[4]*s+this.values[8]*i+this.values[12],this.values[1]*e+this.values[5]*s+this.values[9]*i+this.values[13],this.values[2]*e+this.values[6]*s+this.values[10]*i+this.values[14]])}multiplyVec4(t,e){e||(e=new c);const s=t.x,i=t.y,n=t.z,a=t.w;return e.x=this.values[0]*s+this.values[4]*i+this.values[8]*n+this.values[12]*a,e.y=this.values[1]*s+this.values[5]*i+this.values[9]*n+this.values[13]*a,e.z=this.values[2]*s+this.values[6]*i+this.values[10]*n+this.values[14]*a,e.w=this.values[3]*s+this.values[7]*i+this.values[11]*n+this.values[15]*a,e}toMat3(){return new d([this.values[0],this.values[1],this.values[2],this.values[4],this.values[5],this.values[6],this.values[8],this.values[9],this.values[10]])}toInverseMat3(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[4],n=this.values[5],a=this.values[6],h=this.values[8],r=this.values[9],u=this.values[10],l=u*n-a*r,o=-u*i+a*h,c=r*i-n*h;let v=t*l+e*o+s*c;return v?(v=1/v,new d([l*v,(-u*e+s*r)*v,(a*e-s*n)*v,o*v,(u*t-s*h)*v,(-a*t+s*i)*v,c*v,(-r*t+e*h)*v,(n*t-e*i)*v])):null}translate(t){const e=t.x,s=t.y,i=t.z;return this.values[12]+=this.values[0]*e+this.values[4]*s+this.values[8]*i,this.values[13]+=this.values[1]*e+this.values[5]*s+this.values[9]*i,this.values[14]+=this.values[2]*e+this.values[6]*s+this.values[10]*i,this.values[15]+=this.values[3]*e+this.values[7]*s+this.values[11]*i,this}scale(t){const e=t.x,s=t.y,i=t.z;return this.values[0]*=e,this.values[1]*=e,this.values[2]*=e,this.values[3]*=e,this.values[4]*=s,this.values[5]*=s,this.values[6]*=s,this.values[7]*=s,this.values[8]*=i,this.values[9]*=i,this.values[10]*=i,this.values[11]*=i,this}rotate(t,e){let s=e.x,i=e.y,n=e.z,a=Math.sqrt(s*s+i*i+n*n);if(!a)return null;1!==a&&(a=1/a,s*=a,i*=a,n*=a);const h=Math.sin(t),r=Math.cos(t),u=1-r,l=this.values[0],o=this.values[1],c=this.values[2],v=this.values[3],y=this.values[4],d=this.values[5],p=this.values[6],x=this.values[7],m=this.values[8],w=this.values[9],f=this.values[10],g=this.values[11],z=s*s*u+r,b=i*s*u+n*h,k=n*s*u-i*h,C=s*i*u-n*h,M=i*i*u+r,E=n*i*u+s*h,I=s*n*u+i*h,D=i*n*u-s*h,T=n*n*u+r;return this.values[0]=l*z+y*b+m*k,this.values[1]=o*z+d*b+w*k,this.values[2]=c*z+p*b+f*k,this.values[3]=v*z+x*b+g*k,this.values[4]=l*C+y*M+m*E,this.values[5]=o*C+d*M+w*E,this.values[6]=c*C+p*M+f*E,this.values[7]=v*C+x*M+g*E,this.values[8]=l*I+y*D+m*T,this.values[9]=o*I+d*D+w*T,this.values[10]=c*I+p*D+f*T,this.values[11]=v*I+x*D+g*T,this}static frustum(t,e,s,i,n,a){const h=e-t,r=i-s,u=a-n;return new v([2*n/h,0,0,0,0,2*n/r,0,0,(e+t)/h,(i+s)/r,-(a+n)/u,-1,0,0,-a*n*2/u,0])}static perspective(t,e,s,i){const n=s*Math.tan(t*Math.PI/360),a=n*e;return v.frustum(-a,a,-n,n,s,i)}static orthographic(t,e,s,i,n,a){const h=e-t,r=i-s,u=a-n;return new v([2/h,0,0,0,0,2/r,0,0,0,0,-2/u,0,-(t+e)/h,-(i+s)/r,-(a+n)/u,1])}static lookAt(t,e,s=x.up){if(t.equals(e))return this.identity;const i=x.difference(t,e).normalize(),n=x.cross(s,i).normalize(),a=x.cross(i,n).normalize();return new v([n.x,a.x,i.x,0,n.y,a.y,i.y,0,n.z,a.z,i.z,0,-x.dot(n,t),-x.dot(a,t),-x.dot(i,t),1])}static product(t,e,s){const i=t.at(0),n=t.at(1),a=t.at(2),h=t.at(3),r=t.at(4),u=t.at(5),l=t.at(6),o=t.at(7),c=t.at(8),y=t.at(9),d=t.at(10),p=t.at(11),x=t.at(12),m=t.at(13),w=t.at(14),f=t.at(15),g=e.at(0),z=e.at(1),b=e.at(2),k=e.at(3),C=e.at(4),M=e.at(5),E=e.at(6),I=e.at(7),D=e.at(8),T=e.at(9),N=e.at(10),R=e.at(11),L=e.at(12),S=e.at(13),P=e.at(14),q=e.at(15);return s?(s.init([g*i+z*r+b*c+k*x,g*n+z*u+b*y+k*m,g*a+z*l+b*d+k*w,g*h+z*o+b*p+k*f,C*i+M*r+E*c+I*x,C*n+M*u+E*y+I*m,C*a+M*l+E*d+I*w,C*h+M*o+E*p+I*f,D*i+T*r+N*c+R*x,D*n+T*u+N*y+R*m,D*a+T*l+N*d+R*w,D*h+T*o+N*p+R*f,L*i+S*r+P*c+q*x,L*n+S*u+P*y+q*m,L*a+S*l+P*d+q*w,L*h+S*o+P*p+q*f]),s):new v([g*i+z*r+b*c+k*x,g*n+z*u+b*y+k*m,g*a+z*l+b*d+k*w,g*h+z*o+b*p+k*f,C*i+M*r+E*c+I*x,C*n+M*u+E*y+I*m,C*a+M*l+E*d+I*w,C*h+M*o+E*p+I*f,D*i+T*r+N*c+R*x,D*n+T*u+N*y+R*m,D*a+T*l+N*d+R*w,D*h+T*o+N*p+R*f,L*i+S*r+P*c+q*x,L*n+S*u+P*y+q*m,L*a+S*l+P*d+q*w,L*h+S*o+P*p+q*f])}}v.identity=(new v).setIdentity();class y{constructor(t){this.values=new Float32Array(2),void 0!==t&&(this.xy=t)}get x(){return this.values[0]}get y(){return this.values[1]}get xy(){return[this.values[0],this.values[1]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}at(t){return this.values[t]}reset(){this.x=0,this.y=0}copy(t){return t||(t=new y),t.x=this.x,t.y=this.y,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&!(Math.abs(this.y-t.y)>e)}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y;return t*t+e*e}add(t){return this.x+=t.x,this.y+=t.y,this}subtract(t){return this.x-=t.x,this.y-=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}divide(t){return this.x/=t.x,this.y/=t.y,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t):(e=1/e,t.x*=e,t.y*=e,t)}multiplyMat2(t,e){return e||(e=this),t.multiplyVec2(this,e)}multiplyMat3(t,e){return e||(e=this),t.multiplyVec2(this,e)}static cross(t,e,s){s||(s=new x);const i=t.x,n=t.y,a=e.x,h=i*e.y-n*a;return s.x=0,s.y=0,s.z=h,s}static dot(t,e){return t.x*e.x+t.y*e.y}static distance(t,e){return Math.sqrt(this.squaredDistance(t,e))}static squaredDistance(t,e){const s=e.x-t.x,i=e.y-t.y;return s*s+i*i}static direction(t,e,s){s||(s=new y);const i=t.x-e.x,n=t.y-e.y;let a=Math.sqrt(i*i+n*n);return 0===a?(s.x=0,s.y=0,s):(a=1/a,s.x=i*a,s.y=n*a,s)}static mix(t,e,s,i){i||(i=new y);const n=t.x,a=t.y,h=e.x,r=e.y;return i.x=n+s*(h-n),i.y=a+s*(r-a),i}static sum(t,e,s){return s||(s=new y),s.x=t.x+e.x,s.y=t.y+e.y,s}static difference(t,e,s){return s||(s=new y),s.x=t.x-e.x,s.y=t.y-e.y,s}static product(t,e,s){return s||(s=new y),s.x=t.x*e.x,s.y=t.y*e.y,s}static quotient(t,e,s){return s||(s=new y),s.x=t.x/e.x,s.y=t.y/e.y,s}}y.zero=new y([0,0]),y.one=new y([1,1]);class d{constructor(t){this.values=new Float32Array(9),void 0!==t&&this.init(t)}at(t){return this.values[t]}init(t){for(let e=0;e<9;e++)this.values[e]=t[e];return this}reset(){for(let t=0;t<9;t++)this.values[t]=0}copy(t){t||(t=new d);for(let e=0;e<9;e++)t.values[e]=this.values[e];return t}all(){const t=[];for(let e=0;e<9;e++)t[e]=this.values[e];return t}row(t){return[this.values[3*t+0],this.values[3*t+1],this.values[3*t+2]]}col(t){return[this.values[t],this.values[t+3],this.values[t+6]]}equals(t,e=1e-5){for(let s=0;s<9;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}determinant(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8];return t*(u*n-a*r)+e*(-u*i+a*h)+s*(r*i-n*h)}setIdentity(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=1,this.values[5]=0,this.values[6]=0,this.values[7]=0,this.values[8]=1,this}transpose(){const t=this.values[1],e=this.values[2],s=this.values[5];return this.values[1]=this.values[3],this.values[2]=this.values[6],this.values[3]=t,this.values[5]=this.values[7],this.values[6]=e,this.values[7]=s,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],l=u*n-a*r,o=-u*i+a*h,c=r*i-n*h;let v=t*l+e*o+s*c;return v?(v=1/v,this.values[0]=l*v,this.values[1]=(-u*e+s*r)*v,this.values[2]=(a*e-s*n)*v,this.values[3]=o*v,this.values[4]=(u*t-s*h)*v,this.values[5]=(-a*t+s*i)*v,this.values[6]=c*v,this.values[7]=(-r*t+e*h)*v,this.values[8]=(n*t-e*i)*v,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=this.values[4],h=this.values[5],r=this.values[6],u=this.values[7],l=this.values[8],o=t.at(0),c=t.at(1),v=t.at(2),y=t.at(3),d=t.at(4),p=t.at(5),x=t.at(6),m=t.at(7),w=t.at(8);return this.values[0]=o*e+c*n+v*r,this.values[1]=o*s+c*a+v*u,this.values[2]=o*i+c*h+v*l,this.values[3]=y*e+d*n+p*r,this.values[4]=y*s+d*a+p*u,this.values[5]=y*i+d*h+p*l,this.values[6]=x*e+m*n+w*r,this.values[7]=x*s+m*a+w*u,this.values[8]=x*i+m*h+w*l,this}multiplyVec2(t,e){const s=t.x,i=t.y;return e?(e.xy=[s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]],e):new y([s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]])}multiplyVec3(t,e){const s=t.x,i=t.y,n=t.z;return e?(e.xyz=[s*this.values[0]+i*this.values[3]+n*this.values[6],s*this.values[1]+i*this.values[4]+n*this.values[7],s*this.values[2]+i*this.values[5]+n*this.values[8]],e):new x([s*this.values[0]+i*this.values[3]+n*this.values[6],s*this.values[1]+i*this.values[4]+n*this.values[7],s*this.values[2]+i*this.values[5]+n*this.values[8]])}toMat4(t){return t?(t.init([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1]),t):new v([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1])}toQuat(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],l=t-n-u,o=n-t-u,c=u-t-n;let v=0,y=t+n+u;l>y&&(y=l,v=1),o>y&&(y=o,v=2),c>y&&(y=c,v=3);const d=.5*Math.sqrt(y+1),x=.25/d,m=new p;switch(v){case 0:m.w=d,m.x=(a-r)*x,m.y=(h-s)*x,m.z=(e-i)*x;break;case 1:m.w=(a-r)*x,m.x=d,m.y=(e+i)*x,m.z=(h+s)*x;break;case 2:m.w=(h-s)*x,m.x=(e+i)*x,m.y=d,m.z=(a+r)*x;break;case 3:m.w=(e-i)*x,m.x=(h+s)*x,m.y=(a+r)*x,m.z=d}return m}rotate(t,e){let s=e.x,i=e.y,n=e.z,a=Math.sqrt(s*s+i*i+n*n);if(!a)return null;1!==a&&(a=1/a,s*=a,i*=a,n*=a);const h=Math.sin(t),r=Math.cos(t),u=1-r,l=this.values[0],o=this.values[1],c=this.values[2],v=this.values[4],y=this.values[5],d=this.values[6],p=this.values[8],x=this.values[9],m=this.values[10],w=s*s*u+r,f=i*s*u+n*h,g=n*s*u-i*h,z=s*i*u-n*h,b=i*i*u+r,k=n*i*u+s*h,C=s*n*u+i*h,M=i*n*u-s*h,E=n*n*u+r;return this.values[0]=l*w+v*f+p*g,this.values[1]=o*w+y*f+x*g,this.values[2]=c*w+d*f+m*g,this.values[3]=l*z+v*b+p*k,this.values[4]=o*z+y*b+x*k,this.values[5]=c*z+d*b+m*k,this.values[6]=l*C+v*M+p*E,this.values[7]=o*C+y*M+x*E,this.values[8]=c*C+d*M+m*E,this}static product(t,e,s){const i=t.at(0),n=t.at(1),a=t.at(2),h=t.at(3),r=t.at(4),u=t.at(5),l=t.at(6),o=t.at(7),c=t.at(8),v=e.at(0),y=e.at(1),p=e.at(2),x=e.at(3),m=e.at(4),w=e.at(5),f=e.at(6),g=e.at(7),z=e.at(8);return s?(s.init([v*i+y*h+p*l,v*n+y*r+p*o,v*a+y*u+p*c,x*i+m*h+w*l,x*n+m*r+w*o,x*a+m*u+w*c,f*i+g*h+z*l,f*n+g*r+z*o,f*a+g*u+z*c]),s):new d([v*i+y*h+p*l,v*n+y*r+p*o,v*a+y*u+p*c,x*i+m*h+w*l,x*n+m*r+w*o,x*a+m*u+w*c,f*i+g*h+z*l,f*n+g*r+z*o,f*a+g*u+z*c])}}d.identity=(new d).setIdentity();class p{constructor(t){this.values=new Float32Array(4),void 0!==t&&(this.xyzw=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get w(){return this.values[3]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}get xyzw(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set w(t){this.values[3]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set xyzw(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}at(t){return this.values[t]}reset(){for(let t=0;t<4;t++)this.values[t]=0}copy(t){t||(t=new p);for(let e=0;e<4;e++)t.values[e]=this.values[e];return t}roll(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(t*e+i*s),i*i+t*t-e*e-s*s)}pitch(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(e*s+i*t),i*i-t*t-e*e+s*s)}yaw(){return Math.asin(2*(this.x*this.z-this.w*this.y))}equals(t,e=1e-5){for(let s=0;s<4;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}setIdentity(){return this.x=0,this.y=0,this.z=0,this.w=1,this}calculateW(){const t=this.x,e=this.y,s=this.z;return this.w=-Math.sqrt(Math.abs(1-t*t-e*e-s*s)),this}inverse(){const t=p.dot(this,this);if(!t)return this.xyzw=[0,0,0,0],this;const e=t?1/t:0;return this.x*=-e,this.y*=-e,this.z*=-e,this.w*=e,this}conjugate(){return this.values[0]*=-1,this.values[1]*=-1,this.values[2]*=-1,this}length(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.sqrt(t*t+e*e+s*s+i*i)}normalize(t){t||(t=this);const e=this.x,s=this.y,i=this.z,n=this.w;let a=Math.sqrt(e*e+s*s+i*i+n*n);return a?(a=1/a,t.x=e*a,t.y=s*a,t.z=i*a,t.w=n*a,t):(t.x=0,t.y=0,t.z=0,t.w=0,t)}add(t){for(let e=0;e<4;e++)this.values[e]+=t.at(e);return this}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=t.x,h=t.y,r=t.z,u=t.w;return this.x=e*u+n*a+s*r-i*h,this.y=s*u+n*h+i*a-e*r,this.z=i*u+n*r+e*h-s*a,this.w=n*u-e*a-s*h-i*r,this}multiplyVec3(t,e){e||(e=new x);const s=t.x,i=t.y,n=t.z,a=this.x,h=this.y,r=this.z,u=this.w,l=u*s+h*n-r*i,o=u*i+r*s-a*n,c=u*n+a*i-h*s,v=-a*s-h*i-r*n;return e.x=l*u+v*-a+o*-r-c*-h,e.y=o*u+v*-h+c*-a-l*-r,e.z=c*u+v*-r+l*-h-o*-a,e}toMat3(t){t||(t=new d);const e=this.x,s=this.y,i=this.z,n=this.w,a=e+e,h=s+s,r=i+i,u=e*a,l=e*h,o=e*r,c=s*h,v=s*r,y=i*r,p=n*a,x=n*h,m=n*r;return t.init([1-(c+y),l+m,o-x,l-m,1-(u+y),v+p,o+x,v-p,1-(u+c)]),t}toMat4(t){t||(t=new v);const e=this.x,s=this.y,i=this.z,n=this.w,a=e+e,h=s+s,r=i+i,u=e*a,l=e*h,o=e*r,c=s*h,y=s*r,d=i*r,p=n*a,x=n*h,m=n*r;return t.init([1-(c+d),l+m,o-x,0,l-m,1-(u+d),y+p,0,o+x,y-p,1-(u+c),0,0,0,0,1]),t}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w}static sum(t,e,s){return s||(s=new p),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s.w=t.w+e.w,s}static product(t,e,s){s||(s=new p);const i=t.x,n=t.y,a=t.z,h=t.w,r=e.x,u=e.y,l=e.z,o=e.w;return s.x=i*o+h*r+n*l-a*u,s.y=n*o+h*u+a*r-i*l,s.z=a*o+h*l+i*u-n*r,s.w=h*o-i*r-n*u-a*l,s}static cross(t,e,s){s||(s=new p);const i=t.x,n=t.y,a=t.z,h=t.w,r=e.x,u=e.y,l=e.z,o=e.w;return s.x=h*l+a*o+i*u-n*r,s.y=h*o-i*r-n*u-a*l,s.z=h*r+i*o+n*l-a*u,s.w=h*u+n*o+a*r-i*l,s}static shortMix(t,e,s,i){if(i||(i=new p),s<=0)return i.xyzw=t.xyzw,i;if(s>=1)return i.xyzw=e.xyzw,i;let n=p.dot(t,e);const a=e.copy();let h,r;if(n<0&&(a.inverse(),n=-n),n>.9999)h=1-s,r=0+s;else{const t=Math.sqrt(1-n*n),e=Math.atan2(t,n),i=1/t;h=Math.sin((1-s)*e)*i,r=Math.sin((0+s)*e)*i}return i.x=h*t.x+r*a.x,i.y=h*t.y+r*a.y,i.z=h*t.z+r*a.z,i.w=h*t.w+r*a.w,i}static mix(t,e,s,i){i||(i=new p);const n=t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w;if(Math.abs(n)>=1)return i.xyzw=t.xyzw,i;const a=Math.acos(n),h=Math.sqrt(1-n*n);if(Math.abs(h)<.001)return i.x=.5*t.x+.5*e.x,i.y=.5*t.y+.5*e.y,i.z=.5*t.z+.5*e.z,i.w=.5*t.w+.5*e.w,i;const r=Math.sin((1-s)*a)/h,u=Math.sin(s*a)/h;return i.x=t.x*r+e.x*u,i.y=t.y*r+e.y*u,i.z=t.z*r+e.z*u,i.w=t.w*r+e.w*u,i}static fromAxisAngle(t,e,s){s||(s=new p),e*=.5;const i=Math.sin(e);return s.x=t.x*i,s.y=t.y*i,s.z=t.z*i,s.w=Math.cos(e),s}}p.identity=(new p).setIdentity();class x{constructor(t){this.values=new Float32Array(3),void 0!==t&&(this.xyz=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}at(t){return this.values[t]}reset(){this.x=0,this.y=0,this.z=0}copy(t){return t||(t=new x),t.x=this.x,t.y=this.y,t.z=this.z,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&!(Math.abs(this.z-t.z)>e))}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y,s=this.z;return t*t+e*e+s*s}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}subtract(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e.z*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t.z=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t)}multiplyByMat3(t,e){return e||(e=this),t.multiplyVec3(this,e)}multiplyByQuat(t,e){return e||(e=this),t.multiplyVec3(this,e)}toQuat(t){t||(t=new p);const e=new x,s=new x;return e.x=Math.cos(.5*this.x),s.x=Math.sin(.5*this.x),e.y=Math.cos(.5*this.y),s.y=Math.sin(.5*this.y),e.z=Math.cos(.5*this.z),s.z=Math.sin(.5*this.z),t.x=s.x*e.y*e.z-e.x*s.y*s.z,t.y=e.x*s.y*e.z+s.x*e.y*s.z,t.z=e.x*e.y*s.z-s.x*s.y*e.z,t.w=e.x*e.y*e.z+s.x*s.y*s.z,t}static cross(t,e,s){s||(s=new x);const i=t.x,n=t.y,a=t.z,h=e.x,r=e.y,u=e.z;return s.x=n*u-a*r,s.y=a*h-i*u,s.z=i*r-n*h,s}static dot(t,e){const s=t.x,i=t.y,n=t.z;return s*e.x+i*e.y+n*e.z}static distance(t,e){e.x,t.x,e.y,t.y,e.z,t.z;return Math.sqrt(this.squaredDistance(t,e))}static squaredDistance(t,e){const s=e.x-t.x,i=e.y-t.y,n=e.z-t.z;return s*s+i*i+n*n}static direction(t,e,s){s||(s=new x);const i=t.x-e.x,n=t.y-e.y,a=t.z-e.z;let h=Math.sqrt(i*i+n*n+a*a);return 0===h?(s.x=0,s.y=0,s.z=0,s):(h=1/h,s.x=i*h,s.y=n*h,s.z=a*h,s)}static mix(t,e,s,i){return i||(i=new x),i.x=t.x+s*(e.x-t.x),i.y=t.y+s*(e.y-t.y),i.z=t.z+s*(e.z-t.z),i}static sum(t,e,s){return s||(s=new x),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s}static difference(t,e,s){return s||(s=new x),s.x=t.x-e.x,s.y=t.y-e.y,s.z=t.z-e.z,s}static product(t,e,s){return s||(s=new x),s.x=t.x*e.x,s.y=t.y*e.y,s.z=t.z*e.z,s}static quotient(t,e,s){return s||(s=new x),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s}}x.zero=new x([0,0,0]),x.one=new x([1,1,1]),x.up=new x([0,1,0]),x.right=new x([1,0,0]),x.forward=new x([0,0,1]);class m extends(o()){constructor(t){super(),this.context=t,this.scene=this.context.getContext().createGain(),this.listener=this.context.getContext().listener,this.init()}init(){}createSource(){const t=this.context.getContext().createPanner();return t.panningModel="HRTF",t.distanceModel="linear",t.maxDistance=20,t.refDistance=2,t.connect(this.scene),t}getOutput(){return this.scene}getInput(){return this.scene}setListenerPosition(t,e,s){this.listener.setPosition(t,e,s)}setListenerOrientation(t,e){let s=new x([t.x,t.y,t.z]),i=s.copy();x.cross(i,new x([e.x,e.y,e.z]),i),x.cross(i,s,i),s.normalize(),i.normalize(),this.listener.setOrientation(s.x,s.y,s.z,i.x,i.y,i.z)}}class w{constructor(t,e,s,i){this.effects=[],this.context=t,this.graph=e,this.inputNode=s,this.outputNode=i,this.updateConnections()}applyEffect(t){this.effects.push(t),this.updateConnections()}removeEffect(t){this.effects.forEach((e=>{t===e&&e.disconnect()})),this.effects=this.effects.filter((e=>t!==e)),this.updateConnections()}updateConnections(){if(0==this.effects.length)return void this.inputNode.connect(this.outputNode);let t=null,e=null;this.effects.forEach((s=>{t=s,e?t.connectInput(e.getOutput()):t.connectInput(this.inputNode),e=t})),t&&t.connectOutput(this.outputNode)}}class f{constructor(t,e,s=!1){this.scene=t,this.context=e,this.swapChannels=s,this.init()}init(){this.effectsBus=this.context.createGain(),this.worldBus=this.context.createGain(),this.secondaryBus=this.context.createGain(),this.master=this.context.createGain(),this.scene.getOutput().connect(this.worldBus),this.worldBus.connect(this.effectsBus),this.effects=new w(this.context,this,this.effectsBus,this.master),this.secondaryBus.connect(this.master),this.swapChannels?(this.channelSplitter=this.context.getContext().createChannelSplitter(2),this.channelMerger=this.context.getContext().createChannelMerger(2),this.master.connect(this.channelSplitter),this.channelSplitter.connect(this.channelMerger,0,1),this.channelSplitter.connect(this.channelMerger,1,0),this.channelMerger.connect(this.context.getOutputDestination())):this.master.connect(this.context.getOutputDestination())}connectToMaster(t){t.connect(this.master)}connectToUI(t){t.connect(this.secondaryBus)}applyEffect(t){this.effects.applyEffect(t)}removeEffect(t){this.effects.removeEffect(t)}}var g;!function(t){t[t.WorldSource=0]="WorldSource",t[t.UISource=1]="UISource",t[t.MasterSource=2]="MasterSource"}(g||(g={}));class z{constructor(t,e,s,i=null,n=g.WorldSource){this.position={x:0,y:0,z:0},this.buffer=i,this.context=s,this.scene=e,this.graph=t,this.type=n,this.playbackRate=1,this.init()}init(){this.gain=this.context.createGain(),this.stop=this.stop.bind(this)}getBuffer(){return this.buffer}setBuffer(t){this.buffer=t,this.playOnLoad&&(this.play(),this.playOnLoad=!1)}play(t=0,e=0,s=(this.buffer?this.buffer.duration:0)){this.playing&&this.node&&this.stop(),this.buffer?(this.node||(this.node=this.context.createBufferSource(),this.node.buffer=this.buffer,this.createConnections()),this.node&&(this.node.playbackRate.value=this.playbackRate,this.node.start(t,e,s),this.node.loop=this.looping,this.playing=!0,this.sceneNode&&this.sceneNode.setPosition(this.position.x,this.position.y,this.position.z),this.node.addEventListener("ended",this.stop))):this.playOnLoad=!0}setPosition(t,e,s){this.position={x:t,y:e,z:s},this.sceneNode&&this.sceneNode.setPosition(t,e,s)}setPlaybackRate(t){this.playbackRate=t,this.node&&(this.node.playbackRate.value=t)}getPlaybackRate(){return this.playbackRate}setVolume(t){this.volume=t,this.gain&&(this.gain.gain.value=t)}getVolume(){return this.volume}createConnections(){switch(this.type){case g.WorldSource:this.sceneNode||(this.sceneNode=this.scene.createSource()),this.node.connect(this.gain),this.gain.connect(this.sceneNode);break;case g.UISource:this.node.connect(this.gain),this.graph.connectToUI(this.gain);break;default:this.node.connect(this.gain),this.graph.connectToMaster(this.gain)}}stop(){this.playing=!1,this.node&&(this.node.removeEventListener("ended",this.stop),this.node.stop(),this.node.disconnect(),this.node=null,this.playing=!1,this.sceneNode&&(this.sceneNode.disconnect(),this.sceneNode=null))}destroy(){this.stop(),this.node=null,this.sceneNode=null,this.buffer=null,this.context=null,this.graph=null,this.scene=null}loop(t){this.looping=t,this.node&&(this.node.loop=t)}}class b{constructor(t,e=null,s=null){this.name=t,this.data=e,this.decodedData=s}getData(){return this.data}setData(t){this.data=t}getDecodedData(){return this.decodedData}setDecodedData(t){this.decodedData=this.decodedData}getName(){return this.name}setName(t){this.name=t}}var k=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{u(i.next(t))}catch(t){a(t)}}function r(t){try{u(i.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class C{get(t){return k(this,void 0,void 0,(function*(){const e=yield fetch(t);return yield e.arrayBuffer()}))}}var M=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{u(i.next(t))}catch(t){a(t)}}function r(t){try{u(i.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class E extends(o()){constructor(t,e=new C,s=512){super(),this.loader=e,this.data={},this.maxData=s,this.context=t}get(t){return M(this,void 0,void 0,(function*(){if(this.data[t])return this.data[t].getDecodedData();{const e=yield this.loader.get(t),s=yield this.context.decodeAudioData(e),i=new b(t,e,s);Object.keys(this.data).length;return this.maxData,this.data[t]=i,i.getDecodedData()}}))}clear(){this.data={}}}class I extends class{constructor(t,e,s){this.graph=e,this.context=t,this.effectParams=s}connectOutput(t){this.effectNode.connect(t)}connectInput(t){this.inputNode=t,this.effectNode&&this.inputNode.connect(this.effectNode)}getOutput(){return this.effectNode}disconnect(){this.inputNode.disconnect(),this.effectNode.disconnect()}}{constructor(t,e,s){super(t,e,s),console.log("Creating convolver"),this.effectNode=this.context.getContext().createConvolver(),this.effectNode.buffer=this.effectParams.buffer}connectInput(t){this.channelSplitter=this.context.getContext().createChannelSplitter(2),this.channelMerger=this.context.getContext().createChannelMerger(2),this.channelSplitter.connect(this.channelMerger,0,0),this.channelSplitter.connect(this.channelMerger,1,0),this.channelSplitter.connect(this.channelMerger,0,1),this.channelSplitter.connect(this.channelMerger,1,1),t.connect(this.channelSplitter),this.channelMerger.connect(this.effectNode)}}class D{constructor(t,e,s,i,n=g.MasterSource){this.graph=t,this.scene=e,this.context=s,this.element=i,this.type=n,this.position={x:0,y:0,z:0},this.init()}init(){this.node=this.context.createMediaElementSource(this.element),this.createConnections(),this.element.addEventListener("canplay",(t=>{this.canPlay=!0,this.playOnAvailable&&this.play()}))}play(t=0,e=0,s=0){this.canPlay&&this.element.play(),this.playOnAvailable=!0}stop(){this.element.pause()}getVolume(){return this.element.volume}setVolume(t){this.element.volume=t}getPlaybackRate(){return this.element.playbackRate}setPlaybackRate(t){this.element.playbackRate=t}createConnections(){if(this.type===g.WorldSource)this.sceneNode||(this.sceneNode=this.scene.createSource()),this.node.connect(this.sceneNode);else this.graph.connectToMaster(this.node)}setPosition(t,e,s){this.position={x:t,y:e,z:s},this.sceneNode&&this.sceneNode.setPosition(t,e,s)}destroy(){this.stop(),this.element=null,this.graph=null,this.context=null,this.node=null,this.sceneNode=null,this.scene=null}loop(t){this.element.loop=!0}}var T=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{u(i.next(t))}catch(t){a(t)}}function r(t){try{u(i.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class N{constructor(t=new C){this.loader=t,this.environmentImpulse=null,this.context=new u,this.scene=new m(this.context),this.graph=new f(this.scene,this.context,!1),this.dataPool=new E(this.context,this.loader)}load(t,e=g.WorldSource){return T(this,void 0,void 0,(function*(){const s=yield this.dataPool.get(t);return this.createSource(e,s)}))}loadImmediate(t,e=g.WorldSource){const s=new z(this.graph,this.scene,this.context,null,e);return this.dataPool.get(t).then((t=>{s.setBuffer(t)})),s}stream(t,e=g.MasterSource){const s=new Audio(t);s.crossOrigin="anonymous";return new D(this.graph,this.scene,this.context,s,e)}createSource(t,e){return new z(this.graph,this.scene,this.context,e)}setEnvironmentImpulse(t){return T(this,void 0,void 0,(function*(){if(this.environmentImpulse&&this.graph.removeEffect(this.environmentImpulse),null===t)return;const e=yield this.dataPool.get(t);this.environmentImpulse=new I(this.context,this.graph,{buffer:e}),this.graph.applyEffect(this.environmentImpulse)}))}setListenerPosition(t,e,s){this.scene.setListenerPosition(t,e,s)}setListenerOrientation(t,e){this.scene.setListenerOrientation(t,e)}clearDataPool(){this.dataPool.clear()}}class R{constructor(){this.res=new N,this.res.setEnvironmentImpulse("assets/Greek7EchoHall.wav")}play(t){this.res.loadImmediate(t).play()}}class L{constructor(){this.tts=new h(new n),this.history=document.getElementById("output-area"),this.sound=new R}say(t){this.sound.play("assets/scroll.wav");const e=document.createElement("p");t.split("\n").forEach((t=>{e.appendChild(document.createTextNode(t)),e.appendChild(document.createElement("br"))})),this.history.appendChild(e)}play(t){this.sound.play(t)}}class S{constructor(t,e){this.handler=t,this.output=e,this.echoInput=!0,this.inputField=document.getElementById("input-area"),this.init()}setEcho(t){this.echoInput=t}init(){this.inputField.addEventListener("keydown",(t=>{if(13==t.which){const t=this.inputField.value;this.inputField.value="",this.echoInput&&this.output.say(`> ${t}`),this.handler.doCommand(t)}}))}}const P=[[["look","l"],function(t,e){if(1==t.length)e.examineRoom();else{const s=e.getRoom(e.player.currentRoom).getItems();let i=null;for(let e of s)if(e.name.includes(t[1])){i=e;break}i?(e.output.say(i.name),e.output.say(i.description)):e.output.say(`I could not find a ${t[1]}.`)}}],[["use","interact"],async function(t,e){const s=e.getRoom(e.player.currentRoom).getItems();let i=null;for(let e of s)if(e.name.includes(t[1])){i=e;break}if(!i){const s=e.player.getInventory();for(let e of s)if(e.name.includes(t[1])){i=e;break}}i?await i.onUse():e.output.say(`I could not find a ${t[1]}.`)}],[["take","get"],function(t,e){const s=e.getRoom(e.player.currentRoom),i=s.getItems();let n=null;for(let e of i)if(e.name.includes(t[1])){n=e;break}n?n.takeable?(s.removeItem(n.id),e.player.addItem(n.id),e.print(`You take ${n.name}.`),n.onTake()):e.print(`You can't take ${n.name}.`):e.print(`You can't find any ${t[1]}.`)}],[["drop","put"],function(t,e){const s=e.getRoom(e.player.currentRoom),i=e.player.getInventory();let n=null;for(let e of i)if(e.name.includes(t[1])){n=e;break}n?(e.player.removeItem(n.id),s.addItem(n.id),e.print(`You set ${n.name} down on the floor.`),n.onDrop()):e.print(`You're not carrying a ${t[1]}`)}],["echo",function(t,e){"on"!=t[1]&&"off"!=t[1]?e.print("Usage: echo "):(e.setInputEcho("on"==t[1]),e.print(`Command echo is now ${t[1]}.`))}]],q=[["n","north"],["ne","northeast"],["e","east"],["se","southeast"],["s","south"],["sw","southwest"],["w","west"],["nw","northwest"],["u","up"],["d","down"]];class _{constructor(t,e){this.context=t,this.commands=e||new Map,this.enabled=!0,this.addDefaultCommands()}doCommand(t){if(!this.enabled)return void this.context.print("You can't seem to do anything at the moment.");const e=this.context.getRoom(this.context.player.currentRoom),s=t.split(" ");this.commands.get(s[0])&&this.commands.get(s[0])(s,this.context);const i=this.matchDirection(s[0]);e.getExit(i)&&this.context.move(e.getExit(i))}addCommand(t,e){Array.isArray(t)?t.forEach((t=>this.commands.set(t,e))):this.commands.set(t,e)}addCommands(t){t.forEach((t=>{this.addCommand(t[0],t[1])}))}addDefaultCommands(){this.addCommands(P)}matchDirection(t){for(let e of q)if(e[0]==t)return e[1]}}class A{constructor(){this.id="room",this.title="A room",this.description="You see nothing special",this.firstDescription="As you walk into the room, you notice nothing special",this.objects=[],this.exits=new Map,this.enterCallback=null,this.exitCallback=null,this.canEnterLogic=null,this.canExitLogic=null,this.tickCallback=null,this.context=null}async onEnter(){if(this.enterCallback)return this.enterCallback(this.context)}async onExit(){if(this.exitCallback)return this.exitCallback(this.context)}canEnter(){return!this.canEnterLogic||this.canEnterLogic(this.context)}canExit(){return!this.canExitLogic||this.canExitLogic(this.context)}addExit(t,e){return this.exits.set(t,e),this}getExit(t){return this.exits.get(t)}addItem(t){this.objects.push(t)}removeItem(t){this.objects=this.objects.filter((e=>e!=t))}addEnterCallback(t){this.enterCallback=t.bind(this)}addExitCallback(t){this.exitCallback=t.bind(this)}addEnterLogic(t){this.canEnterLogic=t.bind(this)}addExitLogic(t){this.canExitLogic=t.bind(this)}addTickCallback(t){this.tickCallback=t.bind(this)}getItems(){return this.objects.map((t=>this.context.getItem(t)))}async onTick(){if(this.tickCallback)return this.tickCallback(this.context)}}class O{constructor(){this.room=new A}withID(t){return this.room.id=t,this}withTitle(t){return this.room.title=t,this}withFirstDescription(t){return this.room.firstDescription=t,this}withDescription(t){return this.room.description=t,this}withExit(t,e){return this.room.addExit(t,e),this}withItem(t){return this.room.addItem(t),this}withEnterCallback(t){return this.room.addEnterCallback(t),this}withExitCallback(t){return this.room.addExitCallback(t),this}withEnterLogic(t){return this.room.addEnterLogic(t),this}withExitLogic(t){return this.room.addExitLogic(t),this}withTick(t){return this.room.addTickCallback(t),this}create(){return this.room}}const B=[(new O).withID("start").withTitle("The starting room").withFirstDescription("You set foot in your very first ever room.\nYou're not quite sure what you were supposed to expect, but it definitely wasn't this.\nI mean who would expect a boring old room like this one? Ugh.\nJust... make it stop. Please.").withDescription("The first room. Nothing special about it.").withExit("north","tunnel_1").withExit("northwest","tunnel_2").withEnterCallback((async function(t){if(t.state.get("start.awoken"))return;const{output:e,wait:s}=t;t.enableCommandInput(!1),e.say("You slowly wake up"),await s(5e3),e.say("It's strange. You never used to be able to be conscious about the fact that you were waking up."),await s(5e3),e.say("Yet here we are."),t.enableCommandInput(!0),t.state.set("start.awoken",!0)})).withItem("stone").withItem("cup").withItem("torch").create(),(new O).withID("tunnel_1").withTitle("A long dark tunnel").withFirstDescription("You first step foot in this dark loomy tunnel.").withDescription("The walls are wet. Everything is wet. Ugh. Why do you even.").withExit("south","start").create(),(new O).withID("tunnel_2").withTitle("A long, winding tunnel").withFirstDescription("You step out from your hidy hole into a thin, winding tunnel. The walls and ceiling appear to get thinner and thinner, space slowly dwindling away to nothing.").withDescription("A tunnel that ends in a bowl shape.").withExit("southeast","start").create()];class Y{constructor(){this.id="item",this.name="An item",this.description="You see nothing special about this item",this.usable=!0,this.takeable=!0,this.useCallback=null,this.takeCallback=null,this.dropCallback=null,this.tickCallback=null,this.context=null}async onUse(){if(this.useCallback)return this.useCallback(this.context)}async onTake(){if(this.takeCallback)return this.takeCallback(this.context)}async onDrop(){if(this.dropCallback)return this.dropCallback(this.context)}async onTick(){if(this.tickCallback)return this.tickCallback(this.context)}addUseCallback(t){this.useCallback=t.bind(this)}addTakeCallback(t){this.takeCallback=t.bind(this)}addDropCallback(t){this.dropCallback=t.bind(this)}addTickCallback(t){this.tickCallback=t.bind(this)}}class U{constructor(){this.item=new Y}withID(t){return this.item.id=t,this}withName(t){return this.item.name=t,this}withDescription(t){return this.item.description=t,this}isUsable(t){return this.item.usable=t,this}isTakeable(t){return this.item.takeable=t,this}withUseCallback(t){return this.item.addUseCallback(t),this}withTakeCallback(t){return this.item.addTakeCallback(t),this}withDropCallback(t){return this.item.addDropCallback(t),this}withTickCallback(t){return this.item.addTickCallback(t),this}create(){return this.item}}const F=[(new U).withID("stone").withName("a dull stone").withDescription("There is nothing remarkable about this rough, bland stone.").isTakeable(!0).isUsable(!0).withTakeCallback((async function(t){t.print(`The ${this.id} feels heavy in your hands.`)})).withDropCallback((async function(t){t.print("It bounces back and forth a little.")})).withUseCallback((async function(t){t.print(`You can't really figure out what to do with ${this.name} yet`)})).create(),(new U).withID("torch").withName("a torch").withDescription("A standard torch that provides light.").isUsable(!0).isTakeable(!0).withUseCallback((async function(t){t.print("You try to light the torch but fail.")})).create(),(new U).withID("cup").withName("a cup").withDescription("A standard coffee cup").isTakeable(!0).isUsable(!1).create()];const $=new class{constructor(){this.player=new e,this.state=t,this.rooms=[],this.items=[],this.output=new L,this.commandHandler=new _(this),this.input=new S(this.commandHandler,this.output),this.visitedRooms=new Map,this.interval=null}print(t){this.output.say(t)}init(s){this.rooms=s.rooms.map((t=>(t.context=this,t))),this.items=s.items.map((t=>(t.context=this,t))),this.state=s.state||t,this.commandHandler.addCommands(s.commands),this.player=new e,this.player.context=this,this.move(this.player.currentRoom),this.start()}advanceTick(){this.items.forEach((t=>t.onTick())),this.rooms.forEach((t=>t.onTick()))}start(){this.interval=setInterval((()=>this.advanceTick()),1e3)}stop(){clearInterval(this.interval),this.interval=null}examineRoom(){const t=this.getRoom(this.player.currentRoom);this.output.say(t.title),this.visitedRooms.get(this.player.currentRoom)||""==t.firstDescription?this.output.say(t.description):this.output.say(t.firstDescription),this.examineItems(),this.examineExits()}examineItems(){const t=this.getRoom(this.player.currentRoom).getItems();if(t.length<1)return;let e="You see ";t.forEach(((s,i)=>{i{ie.id==t))}getItem(t){return this.items.find((e=>e.id==t))}wait(t){return new Promise(((e,s)=>{setTimeout(e,t)}))}async move(t){const e=this.getRoom(this.player.currentRoom),s=this.getRoom(t);e.canExit()&&s.canEnter()&&(await e.onExit(),await s.onEnter(),this.player.currentRoom=t,this.examineRoom(),this.visitedRooms.set(t,!0))}enableCommandInput(t){this.commandHandler.enabled=t}setInputEcho(t){this.input.setEcho(t)}};$.init({rooms:B,commands:[[["meow","mew"],async function(t,e){e.print("You meow.")}]],items:F})})()})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFRLE9FVkhWLGVBQTJCeGQsRUFBTXRDLEdBQzVDQSxFQUFRa2dCLE1BQU0sZ0JGV2RWLE1BQU8sSyIsInNvdXJjZXMiOlsid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL3N0YXRlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvcGxheWVyLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHRzL291dHB1dHMvYmFzZS1vdXRwdXQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvb3V0cHV0cy9hcmlhLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHRzL291dHB1dHMvd2VidHRzLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHRzL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHRzL291dHB1dC1mYWN0b3J5LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2F1ZGlvLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90c20vdmVjNC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3RzbS9tYXQ0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHNtL3ZlYzIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90c20vbWF0My5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3RzbS9xdWF0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHNtL3ZlYzMuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3Ivc2NlbmVzL3dlYmF1ZGlvLXNjZW5lLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2VmZmVjdC1jaGFpbi5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9hdWRpby1ncmFwaC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9zb3VyY2VzL3NvdXJjZS10eXBlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL3NvdXJjZXMvYXVkaW8tc291cmNlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2RhdGEtcG9vbC1pdGVtLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2xvYWRlcnMvaHR0cC1sb2FkZXIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZGF0YS1wb29sLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2VmZmVjdHMvY29udm9sdmVyLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2VmZmVjdHMvYmFzZS1lZmZlY3QuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3Ivc291cmNlcy9zdHJlYW1pbmctc291cmNlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvc291bmQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9vdXRwdXQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9pbnB1dC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvbG9vay5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzL3VzZS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzL3Rha2UuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy9kcm9wLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvZWNoby5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL3Jvb20uanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9idWlsZGVycy9yb29tLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL3N0YXJ0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL3R1bm5lbDEuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2dhbWUvcm9vbXMvdHVubmVsMi5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2l0ZW0uanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9idWlsZGVycy9pdGVtLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3N0b25lLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3RvcmNoLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL2N1cC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2NvbW1hbmRzL21lb3cuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsImNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGVzID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChrZXkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXMuZ2V0KGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgU3RhdGUoKTsiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBQbGF5ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbnZlbnRvcnkgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSb29tID0gXCJzdGFydFwiO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSXRlbShpZCkge1xyXG4gICAgICAgIHRoaXMuaW52ZW50b3J5LnB1c2goaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oaWQpIHtcclxuICAgICAgICB0aGlzLmludmVudG9yeSA9IHRoaXMuaW52ZW50b3J5LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW52ZW50b3J5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludmVudG9yeS5tYXAoKGl0ZW0pID0+IHRoaXMuY29udGV4dC5nZXRJdGVtKGl0ZW0pKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBjbGFzcyBCYXNlT3V0cHV0IHtcclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlT3V0cHV0IH0gZnJvbSAnLi9iYXNlLW91dHB1dCc7XHJcbmV4cG9ydCBjbGFzcyBBcmlhT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IDEwMDtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgfHwgMTAwO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQodGhpcy5zcGVlY2hEaXNwbGF5KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lciwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLmNsZWFyRGlzcGxheSgpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG4gICAgICAgIHBhcmEuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hEaXNwbGF5LmFwcGVuZENoaWxkKHBhcmEpO1xyXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5jbGVhckRpc3BsYXkuYmluZCh0aGlzKSwgdGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckRpc3BsYXkoKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGlzcGxheSgpIHtcclxuICAgICAgICB0aGlzLnNwZWVjaERpc3BsYXkuaW5uZXJIVE1MID0gJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmFzZU91dHB1dCB9IGZyb20gJy4vYmFzZS1vdXRwdXQnO1xyXG5leHBvcnQgY2xhc3MgV2ViVFRTT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbn1cclxuIiwiaW1wb3J0IHsgY3JlYXRlT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXQtZmFjdG9yeSc7XHJcbmV4cG9ydCBjbGFzcyBUVFMge1xyXG4gICAgY29uc3RydWN0b3Iob3V0cHV0ID0gY3JlYXRlT3V0cHV0KCkpIHtcclxuICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dDtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLm91dHB1dC5zcGVhayh0ZXh0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc3RvcCgpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJhc2VPdXRwdXQgfSBmcm9tICcuL291dHB1dHMvYmFzZS1vdXRwdXQnO1xyXG5pbXBvcnQgeyBBcmlhT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXRzL2FyaWEnO1xyXG5pbXBvcnQgeyBXZWJUVFNPdXRwdXQgfSBmcm9tICcuL291dHB1dHMvd2VidHRzJztcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dChrZXkgPSAnYXJpYScpIHtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgY2FzZSAnYXJpYSc6XHJcbiAgICAgICAgICAgIHJldHVybiBBcmlhT3V0cHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd3ZWJ0dHMnOlxyXG4gICAgICAgICAgICByZXR1cm4gV2ViVFRTT3V0cHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gQXJpYU91dHB1dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IHsgV2ViVFRTT3V0cHV0LCBBcmlhT3V0cHV0LCBCYXNlT3V0cHV0IH07XHJcbiIsIi8vIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgQXVkaW9Db250ZXh0XHJcbi8vIGV2ZW50dWFsbHkgd2lsbCBiZSB1c2VkIHRvIGRlYWwgd2l0aCBjcm9zcyBicm93c2VyIGlzc3Vlc1xyXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc29uYXRvckF1ZGlvQ29udGV4dCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb250ZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVHYWluKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG4gICAgfVxyXG4gICAgZ2V0T3V0cHV0RGVzdGluYXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbjtcclxuICAgIH1cclxuICAgIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgfVxyXG4gICAgZGVjb2RlQXVkaW9EYXRhKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgdGhpcy5jb250ZXh0LmRlY29kZUF1ZGlvRGF0YShkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNyZWF0ZVBhbm5lcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShlbGVtZW50KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB2ZWM0IHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSg0KTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy54eXp3ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB6KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCB3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6dygpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl0sIHRoaXMudmFsdWVzWzNdXTtcclxuICAgIH1cclxuICAgIHNldCB4KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB5KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB6KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB3KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB4eSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIHNldCB4eXoodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6dyh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCByKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCBnKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCBiKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCBhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCByZygpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgcmdiKCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBnZXQgcmdiYSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl0sIHRoaXMudmFsdWVzWzNdXTtcclxuICAgIH1cclxuICAgIHNldCByKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBnKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBiKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCByZyh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIHNldCByZ2IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBzZXQgcmdiYSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG4gICAgICAgIHRoaXMudyA9IDA7XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdGhpcy56O1xyXG4gICAgICAgIGRlc3QudyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5lZ2F0ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSAtdGhpcy54O1xyXG4gICAgICAgIGRlc3QueSA9IC10aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gLXRoaXMuejtcclxuICAgICAgICBkZXN0LncgPSAtdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueiAtIHZlY3Rvci56KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLncgLSB2ZWN0b3IudykgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuc3F1YXJlZExlbmd0aCgpKTtcclxuICAgIH1cclxuICAgIHNxdWFyZWRMZW5ndGgoKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XHJcbiAgICB9XHJcbiAgICBhZGQodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSArPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogKz0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53ICs9IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3VidHJhY3QodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogLT0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53IC09IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICo9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAqPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogKj0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53ICo9IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZGl2aWRlKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56IC89IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudyAvPSB2ZWN0b3IudztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZhbHVlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueiAqPSB2YWx1ZTtcclxuICAgICAgICBkZXN0LncgKj0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBub3JtYWxpemUoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXN0LnggKj0gMDtcclxuICAgICAgICAgICAgZGVzdC55ICo9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueiAqPSAwO1xyXG4gICAgICAgICAgICBkZXN0LncgKj0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEuMCAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSAqPSBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC56ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LncgKj0gbGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlNYXQ0KG1hdHJpeCwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzQodGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB0aW1lICogKHZlY3RvcjIueCAtIHZlY3Rvci54KTtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHRpbWUgKiAodmVjdG9yMi55IC0gdmVjdG9yLnkpO1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdGltZSAqICh2ZWN0b3IyLnogLSB2ZWN0b3Iueik7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgKyB0aW1lICogKHZlY3RvcjIudyAtIHZlY3Rvci53KTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzdW0odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiArIHZlY3RvcjIuejtcclxuICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyArIHZlY3RvcjIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLSB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgLSB2ZWN0b3IyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcHJvZHVjdCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICogdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICogdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICogdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QudyA9IHZlY3Rvci53ICogdmVjdG9yMi53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHF1b3RpZW50KHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLyB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgLyB2ZWN0b3IyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbn1cclxudmVjNC56ZXJvID0gbmV3IHZlYzQoWzAsIDAsIDAsIDFdKTtcclxudmVjNC5vbmUgPSBuZXcgdmVjNChbMSwgMSwgMSwgMV0pO1xyXG4iLCJpbXBvcnQgbWF0MyBmcm9tICcuL21hdDMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuL3ZlYzQnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBtYXQ0IHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCh2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIGluaXQodmFsdWVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gdmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgbWF0NCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBhbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICBkYXRhW2ldID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG4gICAgcm93KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgMF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogNCArIDFdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDQgKyAyXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgM11cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgY29sKGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXhdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDRdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDhdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDEyXVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgICBlcXVhbHMobWF0cml4LCB0aHJlc2hvbGQgPSBlcHNpbG9uKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnZhbHVlc1tpXSAtIG1hdHJpeC5hdChpKSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGRldGVybWluYW50KCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBhMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgY29uc3QgYTMwID0gdGhpcy52YWx1ZXNbMTJdO1xyXG4gICAgICAgIGNvbnN0IGEzMSA9IHRoaXMudmFsdWVzWzEzXTtcclxuICAgICAgICBjb25zdCBhMzIgPSB0aGlzLnZhbHVlc1sxNF07XHJcbiAgICAgICAgY29uc3QgYTMzID0gdGhpcy52YWx1ZXNbMTVdO1xyXG4gICAgICAgIGNvbnN0IGRldDAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xyXG4gICAgICAgIGNvbnN0IGRldDA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xyXG4gICAgICAgIGNvbnN0IGRldDA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xyXG4gICAgICAgIGNvbnN0IGRldDA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xyXG4gICAgICAgIGNvbnN0IGRldDEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG4gICAgICAgIHJldHVybiAoZGV0MDAgKiBkZXQxMSAtXHJcbiAgICAgICAgICAgIGRldDAxICogZGV0MTAgK1xyXG4gICAgICAgICAgICBkZXQwMiAqIGRldDA5ICtcclxuICAgICAgICAgICAgZGV0MDMgKiBkZXQwOCAtXHJcbiAgICAgICAgICAgIGRldDA0ICogZGV0MDcgK1xyXG4gICAgICAgICAgICBkZXQwNSAqIGRldDA2KTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE0XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRyYW5zcG9zZSgpIHtcclxuICAgICAgICBjb25zdCB0ZW1wMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCB0ZW1wMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCB0ZW1wMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCB0ZW1wMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCB0ZW1wMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCB0ZW1wMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdGhpcy52YWx1ZXNbMTJdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gdGVtcDAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSB0aGlzLnZhbHVlc1sxM107XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSB0ZW1wMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSB0ZW1wMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gdGhpcy52YWx1ZXNbMTRdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9IHRlbXAwMztcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSB0ZW1wMTM7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gdGVtcDIzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgaW52ZXJzZSgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XHJcbiAgICAgICAgY29uc3QgYTIzID0gdGhpcy52YWx1ZXNbMTFdO1xyXG4gICAgICAgIGNvbnN0IGEzMCA9IHRoaXMudmFsdWVzWzEyXTtcclxuICAgICAgICBjb25zdCBhMzEgPSB0aGlzLnZhbHVlc1sxM107XHJcbiAgICAgICAgY29uc3QgYTMyID0gdGhpcy52YWx1ZXNbMTRdO1xyXG4gICAgICAgIGNvbnN0IGEzMyA9IHRoaXMudmFsdWVzWzE1XTtcclxuICAgICAgICBjb25zdCBkZXQwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcclxuICAgICAgICBjb25zdCBkZXQwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcclxuICAgICAgICBjb25zdCBkZXQwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcclxuICAgICAgICBjb25zdCBkZXQwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcclxuICAgICAgICBjb25zdCBkZXQxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjtcclxuICAgICAgICBsZXQgZGV0ID0gZGV0MDAgKiBkZXQxMSAtXHJcbiAgICAgICAgICAgIGRldDAxICogZGV0MTAgK1xyXG4gICAgICAgICAgICBkZXQwMiAqIGRldDA5ICtcclxuICAgICAgICAgICAgZGV0MDMgKiBkZXQwOCAtXHJcbiAgICAgICAgICAgIGRldDA0ICogZGV0MDcgK1xyXG4gICAgICAgICAgICBkZXQwNSAqIGRldDA2O1xyXG4gICAgICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSAoYTExICogZGV0MTEgLSBhMTIgKiBkZXQxMCArIGExMyAqIGRldDA5KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9ICgtYTAxICogZGV0MTEgKyBhMDIgKiBkZXQxMCAtIGEwMyAqIGRldDA5KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IChhMzEgKiBkZXQwNSAtIGEzMiAqIGRldDA0ICsgYTMzICogZGV0MDMpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gKC1hMjEgKiBkZXQwNSArIGEyMiAqIGRldDA0IC0gYTIzICogZGV0MDMpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gKC1hMTAgKiBkZXQxMSArIGExMiAqIGRldDA4IC0gYTEzICogZGV0MDcpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gKGEwMCAqIGRldDExIC0gYTAyICogZGV0MDggKyBhMDMgKiBkZXQwNykgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSAoLWEzMCAqIGRldDA1ICsgYTMyICogZGV0MDIgLSBhMzMgKiBkZXQwMSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAoYTIwICogZGV0MDUgLSBhMjIgKiBkZXQwMiArIGEyMyAqIGRldDAxKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IChhMTAgKiBkZXQxMCAtIGExMSAqIGRldDA4ICsgYTEzICogZGV0MDYpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gKC1hMDAgKiBkZXQxMCArIGEwMSAqIGRldDA4IC0gYTAzICogZGV0MDYpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSA9IChhMzAgKiBkZXQwNCAtIGEzMSAqIGRldDAyICsgYTMzICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9ICgtYTIwICogZGV0MDQgKyBhMjEgKiBkZXQwMiAtIGEyMyAqIGRldDAwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMl0gPSAoLWExMCAqIGRldDA5ICsgYTExICogZGV0MDcgLSBhMTIgKiBkZXQwNikgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gKGEwMCAqIGRldDA5IC0gYTAxICogZGV0MDcgKyBhMDIgKiBkZXQwNikgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gKC1hMzAgKiBkZXQwMyArIGEzMSAqIGRldDAxIC0gYTMyICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE1XSA9IChhMjAgKiBkZXQwMyAtIGEyMSAqIGRldDAxICsgYTIyICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkobWF0cml4KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTAzID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTEzID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IHRoaXMudmFsdWVzWzExXTtcclxuICAgICAgICBjb25zdCBhMzAgPSB0aGlzLnZhbHVlc1sxMl07XHJcbiAgICAgICAgY29uc3QgYTMxID0gdGhpcy52YWx1ZXNbMTNdO1xyXG4gICAgICAgIGNvbnN0IGEzMiA9IHRoaXMudmFsdWVzWzE0XTtcclxuICAgICAgICBjb25zdCBhMzMgPSB0aGlzLnZhbHVlc1sxNV07XHJcbiAgICAgICAgbGV0IGIwID0gbWF0cml4LmF0KDApO1xyXG4gICAgICAgIGxldCBiMSA9IG1hdHJpeC5hdCgxKTtcclxuICAgICAgICBsZXQgYjIgPSBtYXRyaXguYXQoMik7XHJcbiAgICAgICAgbGV0IGIzID0gbWF0cml4LmF0KDMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcbiAgICAgICAgYjAgPSBtYXRyaXguYXQoNCk7XHJcbiAgICAgICAgYjEgPSBtYXRyaXguYXQoNSk7XHJcbiAgICAgICAgYjIgPSBtYXRyaXguYXQoNik7XHJcbiAgICAgICAgYjMgPSBtYXRyaXguYXQoNyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcclxuICAgICAgICBiMCA9IG1hdHJpeC5hdCg4KTtcclxuICAgICAgICBiMSA9IG1hdHJpeC5hdCg5KTtcclxuICAgICAgICBiMiA9IG1hdHJpeC5hdCgxMCk7XHJcbiAgICAgICAgYjMgPSBtYXRyaXguYXQoMTEpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcclxuICAgICAgICBiMCA9IG1hdHJpeC5hdCgxMik7XHJcbiAgICAgICAgYjEgPSBtYXRyaXguYXQoMTMpO1xyXG4gICAgICAgIGIyID0gbWF0cml4LmF0KDE0KTtcclxuICAgICAgICBiMyA9IG1hdHJpeC5hdCgxNSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzModmVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB2ZWMzKFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTJdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzldICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxM10sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTBdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxNF1cclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIG11bHRpcGx5VmVjNCh2ZWN0b3IsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB2ZWN0b3IudztcclxuICAgICAgICBkZXN0LnggPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMl0gKiB3O1xyXG4gICAgICAgIGRlc3QueSA9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOV0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzEzXSAqIHc7XHJcbiAgICAgICAgZGVzdC56ID1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzZdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMF0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzE0XSAqIHc7XHJcbiAgICAgICAgZGVzdC53ID1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbM10gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzddICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMV0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzE1XSAqIHc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQzKFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzldLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxMF1cclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHRvSW52ZXJzZU1hdDMoKSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDtcclxuICAgICAgICBjb25zdCBkZXQyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcclxuICAgICAgICBsZXQgZGV0ID0gYTAwICogZGV0MDEgKyBhMDEgKiBkZXQxMSArIGEwMiAqIGRldDIxO1xyXG4gICAgICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQzKFtcclxuICAgICAgICAgICAgZGV0MDEgKiBkZXQsXHJcbiAgICAgICAgICAgICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldCxcclxuICAgICAgICAgICAgKGExMiAqIGEwMSAtIGEwMiAqIGExMSkgKiBkZXQsXHJcbiAgICAgICAgICAgIGRldDExICogZGV0LFxyXG4gICAgICAgICAgICAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldCxcclxuICAgICAgICAgICAgKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApICogZGV0LFxyXG4gICAgICAgICAgICBkZXQyMSAqIGRldCxcclxuICAgICAgICAgICAgKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApICogZGV0LFxyXG4gICAgICAgICAgICAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldFxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgdHJhbnNsYXRlKHZlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSArPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSAqIHggKyB0aGlzLnZhbHVlc1s0XSAqIHkgKyB0aGlzLnZhbHVlc1s4XSAqIHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdICs9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdICogeCArIHRoaXMudmFsdWVzWzVdICogeSArIHRoaXMudmFsdWVzWzldICogejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNF0gKz1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0gKiB4ICsgdGhpcy52YWx1ZXNbNl0gKiB5ICsgdGhpcy52YWx1ZXNbMTBdICogejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNV0gKz1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbM10gKiB4ICsgdGhpcy52YWx1ZXNbN10gKiB5ICsgdGhpcy52YWx1ZXNbMTFdICogejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdICo9IHg7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gKj0geDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSAqPSB4O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdICo9IHg7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gKj0geTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSAqPSB5O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdICo9IHk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gKj0geTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSAqPSB6O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldICo9IHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdICo9IHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdICo9IHo7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByb3RhdGUoYW5nbGUsIGF4aXMpIHtcclxuICAgICAgICBsZXQgeCA9IGF4aXMueDtcclxuICAgICAgICBsZXQgeSA9IGF4aXMueTtcclxuICAgICAgICBsZXQgeiA9IGF4aXMuejtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGggIT09IDEpIHtcclxuICAgICAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICAgICAgeCAqPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIHkgKj0gbGVuZ3RoO1xyXG4gICAgICAgICAgICB6ICo9IGxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgICAgICBjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IHQgPSAxLjAgLSBjO1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBhMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgY29uc3QgYjAwID0geCAqIHggKiB0ICsgYztcclxuICAgICAgICBjb25zdCBiMDEgPSB5ICogeCAqIHQgKyB6ICogcztcclxuICAgICAgICBjb25zdCBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcclxuICAgICAgICBjb25zdCBiMTAgPSB4ICogeSAqIHQgLSB6ICogcztcclxuICAgICAgICBjb25zdCBiMTEgPSB5ICogeSAqIHQgKyBjO1xyXG4gICAgICAgIGNvbnN0IGIxMiA9IHogKiB5ICogdCArIHggKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMCA9IHggKiB6ICogdCArIHkgKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IHkgKiB6ICogdCAtIHggKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMiA9IHogKiB6ICogdCArIGM7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBhMDEgKiBiMDAgKyBhMTEgKiBiMDEgKyBhMjEgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBhMDIgKiBiMDAgKyBhMTIgKiBiMDEgKyBhMjIgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBhMDAgKiBiMTAgKyBhMTAgKiBiMTEgKyBhMjAgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBhMDEgKiBiMTAgKyBhMTEgKiBiMTEgKyBhMjEgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBhMDMgKiBiMTAgKyBhMTMgKiBiMTEgKyBhMjMgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBhMDAgKiBiMjAgKyBhMTAgKiBiMjEgKyBhMjAgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdID0gYTAyICogYjIwICsgYTEyICogYjIxICsgYTIyICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9IGEwMyAqIGIyMCArIGExMyAqIGIyMSArIGEyMyAqIGIyMjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcnVzdHVtKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgY29uc3QgcmwgPSByaWdodCAtIGxlZnQ7XHJcbiAgICAgICAgY29uc3QgdGIgPSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgY29uc3QgZm4gPSBmYXIgLSBuZWFyO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIChuZWFyICogMikgLyBybCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKG5lYXIgKiAyKSAvIHRiLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAocmlnaHQgKyBsZWZ0KSAvIHJsLFxyXG4gICAgICAgICAgICAodG9wICsgYm90dG9tKSAvIHRiLFxyXG4gICAgICAgICAgICAtKGZhciArIG5lYXIpIC8gZm4sXHJcbiAgICAgICAgICAgIC0xLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtKGZhciAqIG5lYXIgKiAyKSAvIGZuLFxyXG4gICAgICAgICAgICAwXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcGVyc3BlY3RpdmUoZm92LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIGNvbnN0IHRvcCA9IG5lYXIgKiBNYXRoLnRhbigoZm92ICogTWF0aC5QSSkgLyAzNjAuMCk7XHJcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0b3AgKiBhc3BlY3Q7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuZnJ1c3R1bSgtcmlnaHQsIHJpZ2h0LCAtdG9wLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgb3J0aG9ncmFwaGljKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgY29uc3QgcmwgPSByaWdodCAtIGxlZnQ7XHJcbiAgICAgICAgY29uc3QgdGIgPSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgY29uc3QgZm4gPSBmYXIgLSBuZWFyO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIDIgLyBybCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMiAvIHRiLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtMiAvIGZuLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtKGxlZnQgKyByaWdodCkgLyBybCxcclxuICAgICAgICAgICAgLSh0b3AgKyBib3R0b20pIC8gdGIsXHJcbiAgICAgICAgICAgIC0oZmFyICsgbmVhcikgLyBmbixcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGxvb2tBdChwb3NpdGlvbiwgdGFyZ2V0LCB1cCA9IHZlYzMudXApIHtcclxuICAgICAgICBpZiAocG9zaXRpb24uZXF1YWxzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHogPSB2ZWMzLmRpZmZlcmVuY2UocG9zaXRpb24sIHRhcmdldCkubm9ybWFsaXplKCk7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlYzMuY3Jvc3ModXAsIHopLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWMzLmNyb3NzKHosIHgpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIHgueCxcclxuICAgICAgICAgICAgeS54LFxyXG4gICAgICAgICAgICB6LngsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHgueSxcclxuICAgICAgICAgICAgeS55LFxyXG4gICAgICAgICAgICB6LnksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHgueixcclxuICAgICAgICAgICAgeS56LFxyXG4gICAgICAgICAgICB6LnosXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh4LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh5LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh6LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIDFcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KG0xLCBtMiwgcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gbTEuYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYTAxID0gbTEuYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYTAyID0gbTEuYXQoMik7XHJcbiAgICAgICAgY29uc3QgYTAzID0gbTEuYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYTEwID0gbTEuYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYTExID0gbTEuYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYTEyID0gbTEuYXQoNik7XHJcbiAgICAgICAgY29uc3QgYTEzID0gbTEuYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYTIwID0gbTEuYXQoOCk7XHJcbiAgICAgICAgY29uc3QgYTIxID0gbTEuYXQoOSk7XHJcbiAgICAgICAgY29uc3QgYTIyID0gbTEuYXQoMTApO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IG0xLmF0KDExKTtcclxuICAgICAgICBjb25zdCBhMzAgPSBtMS5hdCgxMik7XHJcbiAgICAgICAgY29uc3QgYTMxID0gbTEuYXQoMTMpO1xyXG4gICAgICAgIGNvbnN0IGEzMiA9IG0xLmF0KDE0KTtcclxuICAgICAgICBjb25zdCBhMzMgPSBtMS5hdCgxNSk7XHJcbiAgICAgICAgY29uc3QgYjAwID0gbTIuYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYjAxID0gbTIuYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYjAyID0gbTIuYXQoMik7XHJcbiAgICAgICAgY29uc3QgYjAzID0gbTIuYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYjEwID0gbTIuYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYjExID0gbTIuYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYjEyID0gbTIuYXQoNik7XHJcbiAgICAgICAgY29uc3QgYjEzID0gbTIuYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYjIwID0gbTIuYXQoOCk7XHJcbiAgICAgICAgY29uc3QgYjIxID0gbTIuYXQoOSk7XHJcbiAgICAgICAgY29uc3QgYjIyID0gbTIuYXQoMTApO1xyXG4gICAgICAgIGNvbnN0IGIyMyA9IG0yLmF0KDExKTtcclxuICAgICAgICBjb25zdCBiMzAgPSBtMi5hdCgxMik7XHJcbiAgICAgICAgY29uc3QgYjMxID0gbTIuYXQoMTMpO1xyXG4gICAgICAgIGNvbnN0IGIzMiA9IG0yLmF0KDE0KTtcclxuICAgICAgICBjb25zdCBiMzMgPSBtMi5hdCgxNSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjAgKyBiMDMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjEgKyBiMDMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIgKyBiMDMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDMgKyBiMDEgKiBhMTMgKyBiMDIgKiBhMjMgKyBiMDMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAgKyBiMTMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjEgKyBiMTMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIgKyBiMTMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDMgKyBiMTEgKiBhMTMgKyBiMTIgKiBhMjMgKyBiMTMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjAgKyBiMjMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEgKyBiMjMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjIgKyBiMjMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDMgKyBiMjEgKiBhMTMgKyBiMjIgKiBhMjMgKyBiMjMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDAgKyBiMzEgKiBhMTAgKyBiMzIgKiBhMjAgKyBiMzMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDEgKyBiMzEgKiBhMTEgKyBiMzIgKiBhMjEgKyBiMzMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDIgKyBiMzEgKiBhMTIgKyBiMzIgKiBhMjIgKyBiMzMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDMgKyBiMzEgKiBhMTMgKyBiMzIgKiBhMjMgKyBiMzMgKiBhMzNcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwICsgYjAzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxICsgYjAzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyICsgYjAzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAzICsgYjAxICogYTEzICsgYjAyICogYTIzICsgYjAzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwICsgYjEzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxICsgYjEzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyICsgYjEzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAzICsgYjExICogYTEzICsgYjEyICogYTIzICsgYjEzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwICsgYjIzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxICsgYjIzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyICsgYjIzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAzICsgYjIxICogYTEzICsgYjIyICogYTIzICsgYjIzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAwICsgYjMxICogYTEwICsgYjMyICogYTIwICsgYjMzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAxICsgYjMxICogYTExICsgYjMyICogYTIxICsgYjMzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAyICsgYjMxICogYTEyICsgYjMyICogYTIyICsgYjMzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAzICsgYjMxICogYTEzICsgYjMyICogYTIzICsgYjMzICogYTMzXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5tYXQ0LmlkZW50aXR5ID0gbmV3IG1hdDQoKS5zZXRJZGVudGl0eSgpO1xyXG4iLCJpbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB2ZWMyIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy54eSA9IHZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgeCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBnZXQgeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV1dO1xyXG4gICAgfVxyXG4gICAgc2V0IHgodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHkodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB0aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gdGhpcy55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbmVnYXRlKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGVxdWFscyh2ZWN0b3IsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy54IC0gdmVjdG9yLngpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueSAtIHZlY3Rvci55KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG4gICAgc3F1YXJlZExlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XHJcbiAgICB9XHJcbiAgICBhZGQodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSArPSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN1YnRyYWN0KHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAtPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLT0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZGl2aWRlKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLz0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzY2FsZSh2YWx1ZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueSAqPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlNYXQyKG1hdHJpeCwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzIodGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseU1hdDMobWF0cml4LCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0cml4Lm11bHRpcGx5VmVjMih0aGlzLCBkZXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeDIgPSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeTIgPSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHggKiB5MiAtIHkgKiB4MjtcclxuICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgZGVzdC56ID0gejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkb3QodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlY3Rvci54ICogdmVjdG9yMi54ICsgdmVjdG9yLnkgKiB2ZWN0b3IyLnk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWREaXN0YW5jZSh2ZWN0b3IsIHZlY3RvcjIpKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3RvcjIueCAtIHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IyLnkgLSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaXJlY3Rpb24odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnkgPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggPSB4ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSA9IHkgKiBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5MiA9IHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnggPSB4ICsgdGltZSAqICh4MiAtIHgpO1xyXG4gICAgICAgIGRlc3QueSA9IHkgKyB0aW1lICogKHkyIC0geSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC8gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG59XHJcbnZlYzIuemVybyA9IG5ldyB2ZWMyKFswLCAwXSk7XHJcbnZlYzIub25lID0gbmV3IHZlYzIoWzEsIDFdKTtcclxuIiwiaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuaW1wb3J0IHZlYzIgZnJvbSAnLi92ZWMyJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi92ZWMzJztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgbWF0MyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCh2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIGluaXQodmFsdWVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBhbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRhdGFbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgICByb3coaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDMgKyAwXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiAzICsgMV0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogMyArIDJdXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIGNvbChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbaW5kZXhdLCB0aGlzLnZhbHVlc1tpbmRleCArIDNdLCB0aGlzLnZhbHVlc1tpbmRleCArIDZdXTtcclxuICAgIH1cclxuICAgIGVxdWFscyhtYXRyaXgsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52YWx1ZXNbaV0gLSBtYXRyaXguYXQoaSkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBkZXRlcm1pbmFudCgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XHJcbiAgICAgICAgY29uc3QgZGV0MjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XHJcbiAgICAgICAgcmV0dXJuIGEwMCAqIGRldDAxICsgYTAxICogZGV0MTEgKyBhMDIgKiBkZXQyMTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgdHJhbnNwb3NlKCkge1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAxMiA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHRlbXAwMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gdGVtcDAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gdGVtcDEyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgaW52ZXJzZSgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XHJcbiAgICAgICAgY29uc3QgZGV0MjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XHJcbiAgICAgICAgbGV0IGRldCA9IGEwMCAqIGRldDAxICsgYTAxICogZGV0MTEgKyBhMDIgKiBkZXQyMTtcclxuICAgICAgICBpZiAoIWRldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGV0ID0gMS4wIC8gZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gZGV0MDEgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAoYTEyICogYTAxIC0gYTAyICogYTExKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGRldDExICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBkZXQyMSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9ICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IChhMTEgKiBhMDAgLSBhMDEgKiBhMTApICogZGV0O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkobWF0cml4KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYjAwID0gbWF0cml4LmF0KDApO1xyXG4gICAgICAgIGNvbnN0IGIwMSA9IG1hdHJpeC5hdCgxKTtcclxuICAgICAgICBjb25zdCBiMDIgPSBtYXRyaXguYXQoMik7XHJcbiAgICAgICAgY29uc3QgYjEwID0gbWF0cml4LmF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGIxMSA9IG1hdHJpeC5hdCg0KTtcclxuICAgICAgICBjb25zdCBiMTIgPSBtYXRyaXguYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYjIwID0gbWF0cml4LmF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IG1hdHJpeC5hdCg3KTtcclxuICAgICAgICBjb25zdCBiMjIgPSBtYXRyaXguYXQoOCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzIodmVjdG9yLCByZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lnh5ID0gW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMV0gKyB5ICogdGhpcy52YWx1ZXNbNF0gKyB0aGlzLnZhbHVlc1s3XVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyB2ZWMyKFtcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1swXSArIHkgKiB0aGlzLnZhbHVlc1szXSArIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgdGhpcy52YWx1ZXNbN11cclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlWZWMzKHZlY3RvciwgcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQueHl6ID0gW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgeiAqIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgeiAqIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzVdICsgeiAqIHRoaXMudmFsdWVzWzhdXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IHZlYzMoW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgeiAqIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgeiAqIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzVdICsgeiAqIHRoaXMudmFsdWVzWzhdXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvTWF0NChyZXN1bHQpIHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbml0KFtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1syXSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1szXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s3XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzNdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0b1F1YXQoKSB7XHJcbiAgICAgICAgY29uc3QgbTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgbTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgbTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgbTEwID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgbTExID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgbTEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgbTIwID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgbTIxID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgbTIyID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgZm91clhTcXVhcmVkTWludXMxID0gbTAwIC0gbTExIC0gbTIyO1xyXG4gICAgICAgIGNvbnN0IGZvdXJZU3F1YXJlZE1pbnVzMSA9IG0xMSAtIG0wMCAtIG0yMjtcclxuICAgICAgICBjb25zdCBmb3VyWlNxdWFyZWRNaW51czEgPSBtMjIgLSBtMDAgLSBtMTE7XHJcbiAgICAgICAgY29uc3QgZm91cldTcXVhcmVkTWludXMxID0gbTAwICsgbTExICsgbTIyO1xyXG4gICAgICAgIGxldCBiaWdnZXN0SW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyV1NxdWFyZWRNaW51czE7XHJcbiAgICAgICAgaWYgKGZvdXJYU3F1YXJlZE1pbnVzMSA+IGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSkge1xyXG4gICAgICAgICAgICBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyWFNxdWFyZWRNaW51czE7XHJcbiAgICAgICAgICAgIGJpZ2dlc3RJbmRleCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3VyWVNxdWFyZWRNaW51czEgPiBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEpIHtcclxuICAgICAgICAgICAgZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxID0gZm91cllTcXVhcmVkTWludXMxO1xyXG4gICAgICAgICAgICBiaWdnZXN0SW5kZXggPSAyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm91clpTcXVhcmVkTWludXMxID4gZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxKSB7XHJcbiAgICAgICAgICAgIGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSA9IGZvdXJaU3F1YXJlZE1pbnVzMTtcclxuICAgICAgICAgICAgYmlnZ2VzdEluZGV4ID0gMztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmlnZ2VzdFZhbCA9IE1hdGguc3FydChmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgKyAxKSAqIDAuNTtcclxuICAgICAgICBjb25zdCBtdWx0ID0gMC4yNSAvIGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICBzd2l0Y2ggKGJpZ2dlc3RJbmRleCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IChtMTIgLSBtMjEpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC55ID0gKG0yMCAtIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnogPSAobTAxIC0gbTEwKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LncgPSAobTEyIC0gbTIxKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IChtMDEgKyBtMTApICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMCArIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMCAtIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnggPSAobTAxICsgbTEwKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IChtMTIgKyBtMjEpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IChtMDEgLSBtMTApICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC54ID0gKG0yMCArIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEyICsgbTIxKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJvdGF0ZShhbmdsZSwgYXhpcykge1xyXG4gICAgICAgIGxldCB4ID0gYXhpcy54O1xyXG4gICAgICAgIGxldCB5ID0gYXhpcy55O1xyXG4gICAgICAgIGxldCB6ID0gYXhpcy56O1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcclxuICAgICAgICBpZiAoIWxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSAxIC8gbGVuZ3RoO1xyXG4gICAgICAgICAgICB4ICo9IGxlbmd0aDtcclxuICAgICAgICAgICAgeSAqPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIHogKj0gbGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IGMgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgY29uc3QgdCA9IDEuMCAtIGM7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGIwMCA9IHggKiB4ICogdCArIGM7XHJcbiAgICAgICAgY29uc3QgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XHJcbiAgICAgICAgY29uc3QgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XHJcbiAgICAgICAgY29uc3QgYjEwID0geCAqIHkgKiB0IC0geiAqIHM7XHJcbiAgICAgICAgY29uc3QgYjExID0geSAqIHkgKiB0ICsgYztcclxuICAgICAgICBjb25zdCBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcclxuICAgICAgICBjb25zdCBiMjAgPSB4ICogeiAqIHQgKyB5ICogcztcclxuICAgICAgICBjb25zdCBiMjEgPSB5ICogeiAqIHQgLSB4ICogcztcclxuICAgICAgICBjb25zdCBiMjIgPSB6ICogeiAqIHQgKyBjO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gYTAyICogYjIwICsgYTEyICogYjIxICsgYTIyICogYjIyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QobTEsIG0yLCByZXN1bHQpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSBtMS5hdCgwKTtcclxuICAgICAgICBjb25zdCBhMDEgPSBtMS5hdCgxKTtcclxuICAgICAgICBjb25zdCBhMDIgPSBtMS5hdCgyKTtcclxuICAgICAgICBjb25zdCBhMTAgPSBtMS5hdCgzKTtcclxuICAgICAgICBjb25zdCBhMTEgPSBtMS5hdCg0KTtcclxuICAgICAgICBjb25zdCBhMTIgPSBtMS5hdCg1KTtcclxuICAgICAgICBjb25zdCBhMjAgPSBtMS5hdCg2KTtcclxuICAgICAgICBjb25zdCBhMjEgPSBtMS5hdCg3KTtcclxuICAgICAgICBjb25zdCBhMjIgPSBtMS5hdCg4KTtcclxuICAgICAgICBjb25zdCBiMDAgPSBtMi5hdCgwKTtcclxuICAgICAgICBjb25zdCBiMDEgPSBtMi5hdCgxKTtcclxuICAgICAgICBjb25zdCBiMDIgPSBtMi5hdCgyKTtcclxuICAgICAgICBjb25zdCBiMTAgPSBtMi5hdCgzKTtcclxuICAgICAgICBjb25zdCBiMTEgPSBtMi5hdCg0KTtcclxuICAgICAgICBjb25zdCBiMTIgPSBtMi5hdCg1KTtcclxuICAgICAgICBjb25zdCBiMjAgPSBtMi5hdCg2KTtcclxuICAgICAgICBjb25zdCBiMjEgPSBtMi5hdCg3KTtcclxuICAgICAgICBjb25zdCBiMjIgPSBtMi5hdCg4KTtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbml0KFtcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMixcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMixcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMlxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgbWF0MyhbXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjJcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbm1hdDMuaWRlbnRpdHkgPSBuZXcgbWF0MygpLnNldElkZW50aXR5KCk7XHJcbiIsImltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHF1YXQge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDQpO1xyXG4gICAgICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnh5encgPSB2YWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHooKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXooKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXp3KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXSwgdGhpcy52YWx1ZXNbM11dO1xyXG4gICAgfVxyXG4gICAgc2V0IHgodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHkodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHoodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHcodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5eih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIHNldCB4eXp3KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICByb2xsKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoMi4wICogKHggKiB5ICsgdyAqIHopLCB3ICogdyArIHggKiB4IC0geSAqIHkgLSB6ICogeik7XHJcbiAgICB9XHJcbiAgICBwaXRjaCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKDIuMCAqICh5ICogeiArIHcgKiB4KSwgdyAqIHcgLSB4ICogeCAtIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgfVxyXG4gICAgeWF3KCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmFzaW4oMi4wICogKHRoaXMueCAqIHRoaXMueiAtIHRoaXMudyAqIHRoaXMueSkpO1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnZhbHVlc1tpXSAtIHZlY3Rvci5hdChpKSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG4gICAgICAgIHRoaXMudyA9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBjYWxjdWxhdGVXKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIHRoaXMudyA9IC1NYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBpbnZlcnNlKCkge1xyXG4gICAgICAgIGNvbnN0IGRvdCA9IHF1YXQuZG90KHRoaXMsIHRoaXMpO1xyXG4gICAgICAgIGlmICghZG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6dyA9IFswLCAwLCAwLCAwXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludkRvdCA9IGRvdCA/IDEuMCAvIGRvdCA6IDA7XHJcbiAgICAgICAgdGhpcy54ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy55ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy56ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy53ICo9IGludkRvdDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGNvbmp1Z2F0ZSgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSAqPSAtMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSAqPSAtMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSAqPSAtMTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGxlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdyk7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgZGVzdC56ID0gMDtcclxuICAgICAgICAgICAgZGVzdC53ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiA9IHogKiBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC53ID0gdyAqIGxlbmd0aDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGFkZChvdGhlcikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldICs9IG90aGVyLmF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5KG90aGVyKSB7XHJcbiAgICAgICAgY29uc3QgcTF4ID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgcTF5ID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgcTF6ID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgcTF3ID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgcTJ4ID0gb3RoZXIueDtcclxuICAgICAgICBjb25zdCBxMnkgPSBvdGhlci55O1xyXG4gICAgICAgIGNvbnN0IHEyeiA9IG90aGVyLno7XHJcbiAgICAgICAgY29uc3QgcTJ3ID0gb3RoZXIudztcclxuICAgICAgICB0aGlzLnggPSBxMXggKiBxMncgKyBxMXcgKiBxMnggKyBxMXkgKiBxMnogLSBxMXogKiBxMnk7XHJcbiAgICAgICAgdGhpcy55ID0gcTF5ICogcTJ3ICsgcTF3ICogcTJ5ICsgcTF6ICogcTJ4IC0gcTF4ICogcTJ6O1xyXG4gICAgICAgIHRoaXMueiA9IHExeiAqIHEydyArIHExdyAqIHEyeiArIHExeCAqIHEyeSAtIHExeSAqIHEyeDtcclxuICAgICAgICB0aGlzLncgPSBxMXcgKiBxMncgLSBxMXggKiBxMnggLSBxMXkgKiBxMnkgLSBxMXogKiBxMno7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzModmVjdG9yLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBjb25zdCBxeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCBxeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCBxeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCBxdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcclxuICAgICAgICBjb25zdCBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcclxuICAgICAgICBjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcclxuICAgICAgICBjb25zdCBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcbiAgICAgICAgZGVzdC54ID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgICAgICBkZXN0LnkgPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xyXG4gICAgICAgIGRlc3QueiA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDMoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCB4MiA9IHggKyB4O1xyXG4gICAgICAgIGNvbnN0IHkyID0geSArIHk7XHJcbiAgICAgICAgY29uc3QgejIgPSB6ICsgejtcclxuICAgICAgICBjb25zdCB4eCA9IHggKiB4MjtcclxuICAgICAgICBjb25zdCB4eSA9IHggKiB5MjtcclxuICAgICAgICBjb25zdCB4eiA9IHggKiB6MjtcclxuICAgICAgICBjb25zdCB5eSA9IHkgKiB5MjtcclxuICAgICAgICBjb25zdCB5eiA9IHkgKiB6MjtcclxuICAgICAgICBjb25zdCB6eiA9IHogKiB6MjtcclxuICAgICAgICBjb25zdCB3eCA9IHcgKiB4MjtcclxuICAgICAgICBjb25zdCB3eSA9IHcgKiB5MjtcclxuICAgICAgICBjb25zdCB3eiA9IHcgKiB6MjtcclxuICAgICAgICBkZXN0LmluaXQoW1xyXG4gICAgICAgICAgICAxIC0gKHl5ICsgenopLFxyXG4gICAgICAgICAgICB4eSArIHd6LFxyXG4gICAgICAgICAgICB4eiAtIHd5LFxyXG4gICAgICAgICAgICB4eSAtIHd6LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgenopLFxyXG4gICAgICAgICAgICB5eiArIHd4LFxyXG4gICAgICAgICAgICB4eiArIHd5LFxyXG4gICAgICAgICAgICB5eiAtIHd4LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgeXkpXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDQoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCB4MiA9IHggKyB4O1xyXG4gICAgICAgIGNvbnN0IHkyID0geSArIHk7XHJcbiAgICAgICAgY29uc3QgejIgPSB6ICsgejtcclxuICAgICAgICBjb25zdCB4eCA9IHggKiB4MjtcclxuICAgICAgICBjb25zdCB4eSA9IHggKiB5MjtcclxuICAgICAgICBjb25zdCB4eiA9IHggKiB6MjtcclxuICAgICAgICBjb25zdCB5eSA9IHkgKiB5MjtcclxuICAgICAgICBjb25zdCB5eiA9IHkgKiB6MjtcclxuICAgICAgICBjb25zdCB6eiA9IHogKiB6MjtcclxuICAgICAgICBjb25zdCB3eCA9IHcgKiB4MjtcclxuICAgICAgICBjb25zdCB3eSA9IHcgKiB5MjtcclxuICAgICAgICBjb25zdCB3eiA9IHcgKiB6MjtcclxuICAgICAgICBkZXN0LmluaXQoW1xyXG4gICAgICAgICAgICAxIC0gKHl5ICsgenopLFxyXG4gICAgICAgICAgICB4eSArIHd6LFxyXG4gICAgICAgICAgICB4eiAtIHd5LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB4eSAtIHd6LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgenopLFxyXG4gICAgICAgICAgICB5eiArIHd4LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB4eiArIHd5LFxyXG4gICAgICAgICAgICB5eiAtIHd4LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgeXkpLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZG90KHExLCBxMikge1xyXG4gICAgICAgIHJldHVybiBxMS54ICogcTIueCArIHExLnkgKiBxMi55ICsgcTEueiAqIHEyLnogKyBxMS53ICogcTIudztcclxuICAgIH1cclxuICAgIHN0YXRpYyBzdW0ocTEsIHEyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSBxMS54ICsgcTIueDtcclxuICAgICAgICBkZXN0LnkgPSBxMS55ICsgcTIueTtcclxuICAgICAgICBkZXN0LnogPSBxMS56ICsgcTIuejtcclxuICAgICAgICBkZXN0LncgPSBxMS53ICsgcTIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KHExLCBxMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcTF4ID0gcTEueDtcclxuICAgICAgICBjb25zdCBxMXkgPSBxMS55O1xyXG4gICAgICAgIGNvbnN0IHExeiA9IHExLno7XHJcbiAgICAgICAgY29uc3QgcTF3ID0gcTEudztcclxuICAgICAgICBjb25zdCBxMnggPSBxMi54O1xyXG4gICAgICAgIGNvbnN0IHEyeSA9IHEyLnk7XHJcbiAgICAgICAgY29uc3QgcTJ6ID0gcTIuejtcclxuICAgICAgICBjb25zdCBxMncgPSBxMi53O1xyXG4gICAgICAgIGRlc3QueCA9IHExeCAqIHEydyArIHExdyAqIHEyeCArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcclxuICAgICAgICBkZXN0LnkgPSBxMXkgKiBxMncgKyBxMXcgKiBxMnkgKyBxMXogKiBxMnggLSBxMXggKiBxMno7XHJcbiAgICAgICAgZGVzdC56ID0gcTF6ICogcTJ3ICsgcTF3ICogcTJ6ICsgcTF4ICogcTJ5IC0gcTF5ICogcTJ4O1xyXG4gICAgICAgIGRlc3QudyA9IHExdyAqIHEydyAtIHExeCAqIHEyeCAtIHExeSAqIHEyeSAtIHExeiAqIHEyejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyhxMSwgcTIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHExeCA9IHExLng7XHJcbiAgICAgICAgY29uc3QgcTF5ID0gcTEueTtcclxuICAgICAgICBjb25zdCBxMXogPSBxMS56O1xyXG4gICAgICAgIGNvbnN0IHExdyA9IHExLnc7XHJcbiAgICAgICAgY29uc3QgcTJ4ID0gcTIueDtcclxuICAgICAgICBjb25zdCBxMnkgPSBxMi55O1xyXG4gICAgICAgIGNvbnN0IHEyeiA9IHEyLno7XHJcbiAgICAgICAgY29uc3QgcTJ3ID0gcTIudztcclxuICAgICAgICBkZXN0LnggPSBxMXcgKiBxMnogKyBxMXogKiBxMncgKyBxMXggKiBxMnkgLSBxMXkgKiBxMng7XHJcbiAgICAgICAgZGVzdC55ID0gcTF3ICogcTJ3IC0gcTF4ICogcTJ4IC0gcTF5ICogcTJ5IC0gcTF6ICogcTJ6O1xyXG4gICAgICAgIGRlc3QueiA9IHExdyAqIHEyeCArIHExeCAqIHEydyArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcclxuICAgICAgICBkZXN0LncgPSBxMXcgKiBxMnkgKyBxMXkgKiBxMncgKyBxMXogKiBxMnggLSBxMXggKiBxMno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2hvcnRNaXgocTEsIHEyLCB0aW1lLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGltZSA8PSAwLjApIHtcclxuICAgICAgICAgICAgZGVzdC54eXp3ID0gcTEueHl6dztcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRpbWUgPj0gMS4wKSB7XHJcbiAgICAgICAgICAgIGRlc3QueHl6dyA9IHEyLnh5enc7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY29zID0gcXVhdC5kb3QocTEsIHEyKTtcclxuICAgICAgICBjb25zdCBxMmEgPSBxMi5jb3B5KCk7XHJcbiAgICAgICAgaWYgKGNvcyA8IDAuMCkge1xyXG4gICAgICAgICAgICBxMmEuaW52ZXJzZSgpO1xyXG4gICAgICAgICAgICBjb3MgPSAtY29zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgazA7XHJcbiAgICAgICAgbGV0IGsxO1xyXG4gICAgICAgIGlmIChjb3MgPiAwLjk5OTkpIHtcclxuICAgICAgICAgICAgazAgPSAxIC0gdGltZTtcclxuICAgICAgICAgICAgazEgPSAwICsgdGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc3FydCgxIC0gY29zICogY29zKTtcclxuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHNpbiwgY29zKTtcclxuICAgICAgICAgICAgY29uc3Qgb25lT3ZlclNpbiA9IDEgLyBzaW47XHJcbiAgICAgICAgICAgIGswID0gTWF0aC5zaW4oKDEgLSB0aW1lKSAqIGFuZ2xlKSAqIG9uZU92ZXJTaW47XHJcbiAgICAgICAgICAgIGsxID0gTWF0aC5zaW4oKDAgKyB0aW1lKSAqIGFuZ2xlKSAqIG9uZU92ZXJTaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IGswICogcTEueCArIGsxICogcTJhLng7XHJcbiAgICAgICAgZGVzdC55ID0gazAgKiBxMS55ICsgazEgKiBxMmEueTtcclxuICAgICAgICBkZXN0LnogPSBrMCAqIHExLnogKyBrMSAqIHEyYS56O1xyXG4gICAgICAgIGRlc3QudyA9IGswICogcTEudyArIGsxICogcTJhLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHExLCBxMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29zSGFsZlRoZXRhID0gcTEueCAqIHEyLnggKyBxMS55ICogcTIueSArIHExLnogKiBxMi56ICsgcTEudyAqIHEyLnc7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGNvc0hhbGZUaGV0YSkgPj0gMS4wKSB7XHJcbiAgICAgICAgICAgIGRlc3QueHl6dyA9IHExLnh5enc7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYWxmVGhldGEgPSBNYXRoLmFjb3MoY29zSGFsZlRoZXRhKTtcclxuICAgICAgICBjb25zdCBzaW5IYWxmVGhldGEgPSBNYXRoLnNxcnQoMS4wIC0gY29zSGFsZlRoZXRhICogY29zSGFsZlRoZXRhKTtcclxuICAgICAgICBpZiAoTWF0aC5hYnMoc2luSGFsZlRoZXRhKSA8IDAuMDAxKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IHExLnggKiAwLjUgKyBxMi54ICogMC41O1xyXG4gICAgICAgICAgICBkZXN0LnkgPSBxMS55ICogMC41ICsgcTIueSAqIDAuNTtcclxuICAgICAgICAgICAgZGVzdC56ID0gcTEueiAqIDAuNSArIHEyLnogKiAwLjU7XHJcbiAgICAgICAgICAgIGRlc3QudyA9IHExLncgKiAwLjUgKyBxMi53ICogMC41O1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmF0aW9BID0gTWF0aC5zaW4oKDEgLSB0aW1lKSAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGE7XHJcbiAgICAgICAgY29uc3QgcmF0aW9CID0gTWF0aC5zaW4odGltZSAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGE7XHJcbiAgICAgICAgZGVzdC54ID0gcTEueCAqIHJhdGlvQSArIHEyLnggKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC55ID0gcTEueSAqIHJhdGlvQSArIHEyLnkgKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC56ID0gcTEueiAqIHJhdGlvQSArIHEyLnogKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC53ID0gcTEudyAqIHJhdGlvQSArIHEyLncgKiByYXRpb0I7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5nbGUgKj0gMC41O1xyXG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgICAgICBkZXN0LnggPSBheGlzLnggKiBzaW47XHJcbiAgICAgICAgZGVzdC55ID0gYXhpcy55ICogc2luO1xyXG4gICAgICAgIGRlc3QueiA9IGF4aXMueiAqIHNpbjtcclxuICAgICAgICBkZXN0LncgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbn1cclxucXVhdC5pZGVudGl0eSA9IG5ldyBxdWF0KCkuc2V0SWRlbnRpdHkoKTtcclxuIiwiaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgdmVjMyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB6KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBzZXQgeCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeHkodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgICAgIHRoaXMueiA9IDA7XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdGhpcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbmVnYXRlKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcclxuICAgICAgICBkZXN0LnogPSAtdGhpcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueiAtIHZlY3Rvci56KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG4gICAgc3F1YXJlZExlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xyXG4gICAgfVxyXG4gICAgYWRkKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCArPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56ICs9IHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3VidHJhY3QodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogLT0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAqPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGRpdmlkZSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLz0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAvPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZhbHVlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueiAqPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueiA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiAqPSBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseUJ5TWF0MyhtYXRyaXgsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXRyaXgubXVsdGlwbHlWZWMzKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlCeVF1YXQocXVhdGVybmlvbiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHF1YXRlcm5pb24ubXVsdGlwbHlWZWMzKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgdG9RdWF0KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGMgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIGNvbnN0IHMgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIGMueCA9IE1hdGguY29zKHRoaXMueCAqIDAuNSk7XHJcbiAgICAgICAgcy54ID0gTWF0aC5zaW4odGhpcy54ICogMC41KTtcclxuICAgICAgICBjLnkgPSBNYXRoLmNvcyh0aGlzLnkgKiAwLjUpO1xyXG4gICAgICAgIHMueSA9IE1hdGguc2luKHRoaXMueSAqIDAuNSk7XHJcbiAgICAgICAgYy56ID0gTWF0aC5jb3ModGhpcy56ICogMC41KTtcclxuICAgICAgICBzLnogPSBNYXRoLnNpbih0aGlzLnogKiAwLjUpO1xyXG4gICAgICAgIGRlc3QueCA9IHMueCAqIGMueSAqIGMueiAtIGMueCAqIHMueSAqIHMuejtcclxuICAgICAgICBkZXN0LnkgPSBjLnggKiBzLnkgKiBjLnogKyBzLnggKiBjLnkgKiBzLno7XHJcbiAgICAgICAgZGVzdC56ID0gYy54ICogYy55ICogcy56IC0gcy54ICogcy55ICogYy56O1xyXG4gICAgICAgIGRlc3QudyA9IGMueCAqIGMueSAqIGMueiArIHMueCAqIHMueSAqIHMuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHgyID0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkyID0gdmVjdG9yMi55O1xyXG4gICAgICAgIGNvbnN0IHoyID0gdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QueCA9IHkgKiB6MiAtIHogKiB5MjtcclxuICAgICAgICBkZXN0LnkgPSB6ICogeDIgLSB4ICogejI7XHJcbiAgICAgICAgZGVzdC56ID0geCAqIHkyIC0geSAqIHgyO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRvdCh2ZWN0b3IsIHZlY3RvcjIpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5MiA9IHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6MiA9IHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4geCAqIHgyICsgeSAqIHkyICsgeiAqIHoyO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3RvcjIueiAtIHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3F1YXJlZERpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3RvcjIueiAtIHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlyZWN0aW9uKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueSAtIHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLnogLSB2ZWN0b3IyLno7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgZGVzdC56ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiA9IHogKiBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB0aW1lICogKHZlY3RvcjIueCAtIHZlY3Rvci54KTtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHRpbWUgKiAodmVjdG9yMi55IC0gdmVjdG9yLnkpO1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdGltZSAqICh2ZWN0b3IyLnogLSB2ZWN0b3Iueik7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKyB2ZWN0b3IyLno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC0gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAqIHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC8gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC8gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG59XHJcbnZlYzMuemVybyA9IG5ldyB2ZWMzKFswLCAwLCAwXSk7XHJcbnZlYzMub25lID0gbmV3IHZlYzMoWzEsIDEsIDFdKTtcclxudmVjMy51cCA9IG5ldyB2ZWMzKFswLCAxLCAwXSk7XHJcbnZlYzMucmlnaHQgPSBuZXcgdmVjMyhbMSwgMCwgMF0pO1xyXG52ZWMzLmZvcndhcmQgPSBuZXcgdmVjMyhbMCwgMCwgMV0pO1xyXG4iLCIvLyBUaGUgY29kZSB0aGF0IGRlYWxzIHdpdGggM2QgYXVkaW9cclxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vLi4vdHNtL3ZlYzMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbmF0b3JTY2VuZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5saXN0ZW5lcjtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zY2VuZS5vdXRwdXQuY29ubmVjdCh0aGlzLmNvbnRleHQuZ2V0T3V0cHV0RGVzdGluYXRpb24oKSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVTb3VyY2UoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlUGFubmVyKCk7XHJcbiAgICAgICAgbm9kZS5wYW5uaW5nTW9kZWwgPSAnSFJURic7XHJcbiAgICAgICAgbm9kZS5kaXN0YW5jZU1vZGVsID0gJ2xpbmVhcic7XHJcbiAgICAgICAgbm9kZS5tYXhEaXN0YW5jZSA9IDIwO1xyXG4gICAgICAgIG5vZGUucmVmRGlzdGFuY2UgPSAyO1xyXG4gICAgICAgIG5vZGUuY29ubmVjdCh0aGlzLnNjZW5lKTtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxuICAgIGdldE91dHB1dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZTtcclxuICAgIH1cclxuICAgIGdldElucHV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjZW5lO1xyXG4gICAgfVxyXG4gICAgc2V0TGlzdGVuZXJQb3NpdGlvbih4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcclxuICAgIH1cclxuICAgIHNldExpc3RlbmVyT3JpZW50YXRpb24oZm9yd2FyZCwgcmF3dXApIHtcclxuICAgICAgICBsZXQgZndkID0gbmV3IHZlYzMoW2ZvcndhcmQueCwgZm9yd2FyZC55LCBmb3J3YXJkLnpdKTtcclxuICAgICAgICBsZXQgdXAgPSBmd2QuY29weSgpO1xyXG4gICAgICAgIHZlYzMuY3Jvc3ModXAsIG5ldyB2ZWMzKFtyYXd1cC54LCByYXd1cC55LCByYXd1cC56XSksIHVwKTtcclxuICAgICAgICB2ZWMzLmNyb3NzKHVwLCBmd2QsIHVwKTtcclxuICAgICAgICBmd2Qubm9ybWFsaXplKCk7XHJcbiAgICAgICAgdXAubm9ybWFsaXplKCk7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5zZXRPcmllbnRhdGlvbihmd2QueCwgZndkLnksIGZ3ZC56LCB1cC54LCB1cC55LCB1cC56KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBBIGNoYWluIG9mIGVmZmVjdHMgdGhhdCBjb25uZWN0IHRvIHRoZSBlZmZlY3QgYnVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVmZmVjdENoYWluIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGdyYXBoLCBpbnB1dCwgb3V0cHV0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzID0gW107XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLmdyYXBoID0gZ3JhcGg7XHJcbiAgICAgICAgdGhpcy5pbnB1dE5vZGUgPSBpbnB1dDtcclxuICAgICAgICB0aGlzLm91dHB1dE5vZGUgPSBvdXRwdXQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25uZWN0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgYXBwbHlFZmZlY3QoZWZmZWN0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLnB1c2goZWZmZWN0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25zKCk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVFZmZlY3QoZWZmZWN0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLmZvckVhY2goKGN1cnJFZmZlY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVmZmVjdCA9PT0gY3VyckVmZmVjdCkge1xyXG4gICAgICAgICAgICAgICAgY3VyckVmZmVjdC5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSB0aGlzLmVmZmVjdHMuZmlsdGVyKChjdXJyRWZmZWN0KSA9PiBlZmZlY3QgIT09IGN1cnJFZmZlY3QpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZUNvbm5lY3Rpb25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVmZmVjdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dE5vZGUuY29ubmVjdCh0aGlzLm91dHB1dE5vZGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICBsZXQgcHJldmlvdXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5mb3JFYWNoKChlZmZlY3QpID0+IHtcclxuICAgICAgICAgICAgY3VycmVudCA9IGVmZmVjdDtcclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LmNvbm5lY3RJbnB1dChwcmV2aW91cy5nZXRPdXRwdXQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LmNvbm5lY3RJbnB1dCh0aGlzLmlucHV0Tm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQuY29ubmVjdE91dHB1dCh0aGlzLm91dHB1dE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyB0aGlzIGlzIHRoZSBtaXhlciB0aGF0IHRha2VzIGFsbCB0aGUgZGlmZmVyZW50IG91dHB1dHMgYW5kIG1peGVzIHRoZW0gaW50byB0aGUgMiBidXNzZXM6XHJcbi8vIFdvcmxkQnVzOiBUaGUgZGlyZWN0aW9uYWwgYXVkaW9cclxuLy8gU2Vjb25kYXJ5QnVzOiBBbGwgdGhlIFVJIGFuZCB0aGluZ3MgdGhhdCBhcmUgbm9uIGRpcmVjdGlvbmFsXHJcbmltcG9ydCBFZmZlY3RDaGFpbiBmcm9tICcuL2VmZmVjdC1jaGFpbic7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1ZGlvR3JhcGgge1xyXG4gICAgY29uc3RydWN0b3Ioc2NlbmUsIGNvbnRleHQsIHN3YXBDaGFubmVscyA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5zd2FwQ2hhbm5lbHMgPSBzd2FwQ2hhbm5lbHM7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0c0J1cyA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgdGhpcy53b3JsZEJ1cyA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlCdXMgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG4gICAgICAgIHRoaXMubWFzdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLnNjZW5lLmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy53b3JsZEJ1cyk7XHJcbiAgICAgICAgLy8gdGhpcy53b3JsZEJ1cy5jb25uZWN0KHRoaXMubWFzdGVyKTtcclxuICAgICAgICB0aGlzLndvcmxkQnVzLmNvbm5lY3QodGhpcy5lZmZlY3RzQnVzKTtcclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSBuZXcgRWZmZWN0Q2hhaW4odGhpcy5jb250ZXh0LCB0aGlzLCB0aGlzLmVmZmVjdHNCdXMsIHRoaXMubWFzdGVyKTtcclxuICAgICAgICB0aGlzLnNlY29uZGFyeUJ1cy5jb25uZWN0KHRoaXMubWFzdGVyKTtcclxuICAgICAgICBpZiAodGhpcy5zd2FwQ2hhbm5lbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsTWVyZ2VyID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jcmVhdGVDaGFubmVsTWVyZ2VyKDIpO1xyXG4gICAgICAgICAgICB0aGlzLm1hc3Rlci5jb25uZWN0KHRoaXMuY2hhbm5lbFNwbGl0dGVyKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDAsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbE1lcmdlci5jb25uZWN0KHRoaXMuY29udGV4dC5nZXRPdXRwdXREZXN0aW5hdGlvbigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFzdGVyLmNvbm5lY3QodGhpcy5jb250ZXh0LmdldE91dHB1dERlc3RpbmF0aW9uKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbm5lY3RUb01hc3RlcihpbnB1dCkge1xyXG4gICAgICAgIGlucHV0LmNvbm5lY3QodGhpcy5tYXN0ZXIpO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdFRvVUkoaW5wdXQpIHtcclxuICAgICAgICBpbnB1dC5jb25uZWN0KHRoaXMuc2Vjb25kYXJ5QnVzKTtcclxuICAgIH1cclxuICAgIGFwcGx5RWZmZWN0KGVmZmVjdCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5hcHBseUVmZmVjdChlZmZlY3QpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlRWZmZWN0KGVmZmVjdCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5yZW1vdmVFZmZlY3QoZWZmZWN0KTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgdmFyIFNvdXJjZVR5cGU7XHJcbihmdW5jdGlvbiAoU291cmNlVHlwZSkge1xyXG4gICAgU291cmNlVHlwZVtTb3VyY2VUeXBlW1wiV29ybGRTb3VyY2VcIl0gPSAwXSA9IFwiV29ybGRTb3VyY2VcIjtcclxuICAgIFNvdXJjZVR5cGVbU291cmNlVHlwZVtcIlVJU291cmNlXCJdID0gMV0gPSBcIlVJU291cmNlXCI7XHJcbiAgICBTb3VyY2VUeXBlW1NvdXJjZVR5cGVbXCJNYXN0ZXJTb3VyY2VcIl0gPSAyXSA9IFwiTWFzdGVyU291cmNlXCI7XHJcbn0pKFNvdXJjZVR5cGUgfHwgKFNvdXJjZVR5cGUgPSB7fSkpO1xyXG4iLCIvLyBhbiBhdWRpbyBzb3VyY2VcclxuLy8gVGhpcyBpcyB0aGUgYWN0dWFsIHNvdW5kXHJcbmltcG9ydCB7IFNvdXJjZVR5cGUgfSBmcm9tICcuL3NvdXJjZS10eXBlJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXVkaW9Tb3VyY2Uge1xyXG4gICAgY29uc3RydWN0b3IoZ3JhcGgsIHNjZW5lLCBjb250ZXh0LCBidWZmZXIgPSBudWxsLCB0eXBlID0gU291cmNlVHlwZS5Xb3JsZFNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgIHo6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gMTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICAvLyBiaW5kIG1ldGhvZHMgc28gd2UgY2FuIGFkZCBhbmQgcmVtb3Z2ZSB0aGVtIGZyb20gZXZlbnQgbGlzdGVuZXJzXHJcbiAgICAgICAgdGhpcy5zdG9wID0gdGhpcy5zdG9wLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBnZXRCdWZmZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0QnVmZmVyKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XHJcbiAgICAgICAgaWYgKHRoaXMucGxheU9uTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5wbGF5T25Mb2FkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcGxheSh3aGVuID0gMCwgb2Zmc2V0ID0gMCwgZHVyYXRpb24gPSB0aGlzLmJ1ZmZlciA/IHRoaXMuYnVmZmVyLmR1cmF0aW9uIDogMCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYXlpbmcgJiYgdGhpcy5ub2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuYnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheU9uTG9hZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuYnVmZmVyID0gdGhpcy5idWZmZXI7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUucGxheWJhY2tSYXRlLnZhbHVlID0gdGhpcy5wbGF5YmFja1JhdGU7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5zdGFydCh3aGVuLCBvZmZzZXQsIGR1cmF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmxvb3AgPSB0aGlzLmxvb3Bpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuc2V0UG9zaXRpb24odGhpcy5wb3NpdGlvbi54LCB0aGlzLnBvc2l0aW9uLnksIHRoaXMucG9zaXRpb24ueik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgdGhpcy5zdG9wKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRQb3NpdGlvbih4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgelxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmVOb2RlKVxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lTm9kZS5zZXRQb3NpdGlvbih4LCB5LCB6KTtcclxuICAgIH1cclxuICAgIHNldFBsYXliYWNrUmF0ZShyYXRlKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSByYXRlO1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5wbGF5YmFja1JhdGUudmFsdWUgPSByYXRlO1xyXG4gICAgfVxyXG4gICAgZ2V0UGxheWJhY2tSYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH1cclxuICAgIHNldFZvbHVtZSh2b2x1bWUpIHtcclxuICAgICAgICB0aGlzLnZvbHVtZSA9IHZvbHVtZTtcclxuICAgICAgICBpZiAodGhpcy5nYWluKVxyXG4gICAgICAgICAgICB0aGlzLmdhaW4uZ2Fpbi52YWx1ZSA9IHZvbHVtZTtcclxuICAgIH1cclxuICAgIGdldFZvbHVtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52b2x1bWU7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVDb25uZWN0aW9ucygpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFNvdXJjZVR5cGUuV29ybGRTb3VyY2U6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSB0aGlzLnNjZW5lLmNyZWF0ZVNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3QodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuc2NlbmVOb2RlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNvdXJjZVR5cGUuVUlTb3VyY2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY29ubmVjdCh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5jb25uZWN0VG9VSSh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY29ubmVjdCh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5jb25uZWN0VG9NYXN0ZXIodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kZWQnLCB0aGlzLnN0b3ApO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lTm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIC8vIHNldCBhbGwgcmVmcyB0byBudWxsIHRvIGVuY291cmFnZSBnY1xyXG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgbG9vcCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubG9vcGluZyA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmxvb3AgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQW4gaXRlbSBpbiB0aGUgZGF0YSBwb29sXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb29sSXRlbSB7XHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkYXRhID0gbnVsbCwgZGVjb2RlZERhdGEgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuZGVjb2RlZERhdGEgPSBkZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIGdldERhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICAgIH1cclxuICAgIHNldERhdGEoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICBnZXREZWNvZGVkRGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIHNldERlY29kZWREYXRhKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRlY29kZWREYXRhID0gdGhpcy5kZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIGdldE5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuICAgIHNldE5hbWUobmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcbn1cclxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5leHBvcnQgY2xhc3MgSFRUUExvYWRlciB7XHJcbiAgICBnZXQocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIGZldGNoKHBhdGgpO1xyXG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSB5aWVsZCByZXN1bHQuYXJyYXlCdWZmZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBhIGRhdGEgcG9vbCBob2xkcyBmcmVxdWVudGx5IHBsYXllZCBzb3VuZHMgaW4gbWVtb3J5IHRvZ2V0aGVyIHdpdGggZGVjb2RlZCBhdWRpbyBkYXRhIHRvIG5vIGxvbmdlciBoYXZlIHRvIGRlY29kZSB0aGVtIGZyb20gdGhlIGNhY2hlIHdoZW4gbG9hZGVkIGFnYWluXHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcclxuaW1wb3J0IERhdGFQb29sSXRlbSBmcm9tICcuL2RhdGEtcG9vbC1pdGVtJztcclxuaW1wb3J0IHsgSFRUUExvYWRlciB9IGZyb20gJy4vbG9hZGVycy9odHRwLWxvYWRlcic7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb29sIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGxvYWRlciA9IG5ldyBIVFRQTG9hZGVyKCksIG1heERhdGEgPSA1MTIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMubWF4RGF0YSA9IG1heERhdGE7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIH1cclxuICAgIGdldChwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtwYXRoXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtwYXRoXS5nZXREZWNvZGVkRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyID0geWllbGQgdGhpcy5sb2FkZXIuZ2V0KHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IHlpZWxkIHRoaXMuY29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgRGF0YVBvb2xJdGVtKHBhdGgsIGJ1ZmZlciwgZGVjb2RlZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCB0aGlzLm1heERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBhIG1vcmUgY2xldmVyIHNvbHV0aW9uIHRoYW4ganVzdCByZW1vdmluZyB0aGUgZmlyc3QgbG9hZGVkIGRhdGEuIExpa2UgdHJhY2tpbmcgaG93IG11Y2ggY2VydGFpbiBkYXRhIGlzIG5lZWRlZCBhbmQgcHJpb3JpdGl6ZSB0aGVtLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHBhdGhzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIHRoaXMuZGF0YVtwYXRoc1swXV07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldERlY29kZWREYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBCYXNlRWZmZWN0IGZyb20gJy4vYmFzZS1lZmZlY3QnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb252b2x2ZXIgZXh0ZW5kcyBCYXNlRWZmZWN0IHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGdyYXBoLCBwYXJhbXMpIHtcclxuICAgICAgICBzdXBlcihjb250ZXh0LCBncmFwaCwgcGFyYW1zKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgQ3JlYXRpbmcgY29udm9sdmVyYCk7XHJcbiAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jcmVhdGVDb252b2x2ZXIoKTtcclxuICAgICAgICB0aGlzLmVmZmVjdE5vZGUuYnVmZmVyID0gdGhpcy5lZmZlY3RQYXJhbXMuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdElucHV0KG5vZGUpIHtcclxuICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlciA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKDIpO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbE1lcmdlciA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlQ2hhbm5lbE1lcmdlcigyKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDEsIDApO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbFNwbGl0dGVyLmNvbm5lY3QodGhpcy5jaGFubmVsTWVyZ2VyLCAwLCAxKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMSwgMSk7XHJcbiAgICAgICAgbm9kZS5jb25uZWN0KHRoaXMuY2hhbm5lbFNwbGl0dGVyKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxNZXJnZXIuY29ubmVjdCh0aGlzLmVmZmVjdE5vZGUpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VFZmZlY3Qge1xyXG4gICAgY29uc3RydWN0b3IoY29udGV4dCwgZ3JhcGgsIHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuZWZmZWN0UGFyYW1zID0gcGFyYW1zO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdE91dHB1dChub2RlKSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3ROb2RlLmNvbm5lY3Qobm9kZSk7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0SW5wdXQobm9kZSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXROb2RlID0gbm9kZTtcclxuICAgICAgICBpZiAodGhpcy5lZmZlY3ROb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXROb2RlLmNvbm5lY3QodGhpcy5lZmZlY3ROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRPdXRwdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWZmZWN0Tm9kZTtcclxuICAgIH1cclxuICAgIGRpc2Nvbm5lY3QoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dE5vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0Tm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4vc291cmNlLXR5cGUnO1xyXG5leHBvcnQgY2xhc3MgU3RyZWFtaW5nU291cmNlIHtcclxuICAgIGNvbnN0cnVjdG9yKGdyYXBoLCBzY2VuZSwgY29udGV4dCwgZWxlbWVudCwgdHlwZSA9IFNvdXJjZVR5cGUuTWFzdGVyU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IGdyYXBoO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICB6OiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSh0aGlzLmVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNhblBsYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wbGF5T25BdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxheSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwbGF5KHdoZW4gPSAwLCBvZmZzZXQgPSAwLCBkdXJhdGlvbiA9IDApIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5QbGF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGxheU9uQXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnBhdXNlKCk7XHJcbiAgICB9XHJcbiAgICBnZXRWb2x1bWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC52b2x1bWU7XHJcbiAgICB9XHJcbiAgICBzZXRWb2x1bWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQudm9sdW1lID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBnZXRQbGF5YmFja1JhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5wbGF5YmFja1JhdGU7XHJcbiAgICB9XHJcbiAgICBzZXRQbGF5YmFja1JhdGUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQucGxheWJhY2tSYXRlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVDb25uZWN0aW9ucygpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFNvdXJjZVR5cGUuV29ybGRTb3VyY2U6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSB0aGlzLnNjZW5lLmNyZWF0ZVNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3QodGhpcy5zY2VuZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoLmNvbm5lY3RUb01hc3Rlcih0aGlzLm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0UG9zaXRpb24oeCwgeSwgeikge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIHpcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSlcclxuICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuc2V0UG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmVOb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH1cclxuICAgIGxvb3AodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubG9vcCA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gdGhlIG1haW4gbW9kdWxlIGZvciBSZXNvbmF0b3JcclxuLy8gQVBJLCBldGMuXHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IFJlc29uYXRvckF1ZGlvQ29udGV4dCBmcm9tICcuL2F1ZGlvLWNvbnRleHQnO1xyXG5pbXBvcnQgUmVzb25hdG9yU2NlbmUgZnJvbSAnLi9zY2VuZXMvd2ViYXVkaW8tc2NlbmUnO1xyXG5pbXBvcnQgQXVkaW9HcmFwaCBmcm9tICcuL2F1ZGlvLWdyYXBoJztcclxuaW1wb3J0IEF1ZGlvU291cmNlIGZyb20gJy4vc291cmNlcy9hdWRpby1zb3VyY2UnO1xyXG5pbXBvcnQgRGF0YVBvb2wgZnJvbSAnLi9kYXRhLXBvb2wnO1xyXG5pbXBvcnQgQ29udm9sdmVyIGZyb20gJy4vZWZmZWN0cy9jb252b2x2ZXInO1xyXG5pbXBvcnQgeyBIVFRQTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL2h0dHAtbG9hZGVyJztcclxuaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4vc291cmNlcy9zb3VyY2UtdHlwZSc7XHJcbmltcG9ydCB7IFN0cmVhbWluZ1NvdXJjZSB9IGZyb20gJy4vc291cmNlcy9zdHJlYW1pbmctc291cmNlJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzb25hdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGxvYWRlciA9IG5ldyBIVFRQTG9hZGVyKCkpIHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGxvYWRlcjtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50SW1wdWxzZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbmV3IFJlc29uYXRvckF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBuZXcgUmVzb25hdG9yU2NlbmUodGhpcy5jb250ZXh0KTtcclxuICAgICAgICB0aGlzLmdyYXBoID0gbmV3IEF1ZGlvR3JhcGgodGhpcy5zY2VuZSwgdGhpcy5jb250ZXh0LCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kYXRhUG9vbCA9IG5ldyBEYXRhUG9vbCh0aGlzLmNvbnRleHQsIHRoaXMubG9hZGVyKTtcclxuICAgIH1cclxuICAgIGxvYWQocGF0aCwgdHlwZSA9IFNvdXJjZVR5cGUuV29ybGRTb3VyY2UpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgdGhpcy5kYXRhUG9vbC5nZXQocGF0aCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY3JlYXRlU291cmNlKHR5cGUsIGRhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbG9hZEltbWVkaWF0ZShwYXRoLCB0eXBlID0gU291cmNlVHlwZS5Xb3JsZFNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBBdWRpb1NvdXJjZSh0aGlzLmdyYXBoLCB0aGlzLnNjZW5lLCB0aGlzLmNvbnRleHQsIG51bGwsIHR5cGUpO1xyXG4gICAgICAgIHRoaXMuZGF0YVBvb2wuZ2V0KHBhdGgpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgc291cmNlLnNldEJ1ZmZlcihkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gICAgc3RyZWFtKHBhdGgsIHR5cGUgPSBTb3VyY2VUeXBlLk1hc3RlclNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgQXVkaW8ocGF0aCk7XHJcbiAgICAgICAgZWxlbWVudC5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTdHJlYW1pbmdTb3VyY2UodGhpcy5ncmFwaCwgdGhpcy5zY2VuZSwgdGhpcy5jb250ZXh0LCBlbGVtZW50LCB0eXBlKTtcclxuICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlU291cmNlKHR5cGUsIGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvU291cmNlKHRoaXMuZ3JhcGgsIHRoaXMuc2NlbmUsIHRoaXMuY29udGV4dCwgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBzZXRFbnZpcm9ubWVudEltcHVsc2UoZmlsZSkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50SW1wdWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5yZW1vdmVFZmZlY3QodGhpcy5lbnZpcm9ubWVudEltcHVsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaWxlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0geWllbGQgdGhpcy5kYXRhUG9vbC5nZXQoZmlsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbXB1bHNlID0gbmV3IENvbnZvbHZlcih0aGlzLmNvbnRleHQsIHRoaXMuZ3JhcGgsIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5ncmFwaC5hcHBseUVmZmVjdCh0aGlzLmVudmlyb25tZW50SW1wdWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lclBvc2l0aW9uKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnNldExpc3RlbmVyUG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lck9yaWVudGF0aW9uKGZvcndhcmQsIHVwKSB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5zZXRMaXN0ZW5lck9yaWVudGF0aW9uKGZvcndhcmQsIHVwKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGF0YVBvb2woKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhUG9vbC5jbGVhcigpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBSZXNvbmF0b3IgZnJvbSAnLi4vZnJhbWV3b3JrL3Jlc29uYXRvcic7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5yZXMgPSBuZXcgUmVzb25hdG9yKCk7XHJcbiAgICAgICAgdGhpcy5yZXMuc2V0RW52aXJvbm1lbnRJbXB1bHNlKGBhc3NldHMvR3JlZWs3RWNob0hhbGwud2F2YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGxheShmaWxlKSB7XHJcbiAgICAgICAgY29uc3Qgc291bmQgPSB0aGlzLnJlcy5sb2FkSW1tZWRpYXRlKGZpbGUpO1xyXG4gICAgICAgIHNvdW5kLnBsYXkoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7IFRUUyB9IGZyb20gJy4uL2ZyYW1ld29yay90dHMnO1xyXG5pbXBvcnQgeyBBcmlhT3V0cHV0IH0gZnJvbSAnLi4vZnJhbWV3b3JrL3R0cy9vdXRwdXRzL2FyaWEnO1xyXG5pbXBvcnQgU291bmQgZnJvbSAnLi9zb3VuZCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPdXRwdXQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50dHMgPSBuZXcgVFRTKG5ldyBBcmlhT3V0cHV0KCkpO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3V0cHV0LWFyZWFcIik7XHJcbiAgICAgICAgdGhpcy5zb3VuZCA9IG5ldyBTb3VuZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNheShzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNvdW5kLnBsYXkoYGFzc2V0cy9zY3JvbGwud2F2YCk7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgICAgIHN0cmluZy5zcGxpdChcIlxcblwiKS5mb3JFYWNoKChsaW5lKSA9PiB7XHJcbiAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZSkpO1xyXG4gICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LmFwcGVuZENoaWxkKG5vZGUpO1xyXG4gICAgICAgIC8vIHRoaXMudHRzLnNwZWFrKHN0cmluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcGxheShmaWxlKSB7XHJcbiAgICAgICAgdGhpcy5zb3VuZC5wbGF5KGZpbGUpO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5wdXQge1xyXG4gICAgY29uc3RydWN0b3IoY29tbWFuZEhhbmRsZXIsIG91dHB1dEhhbmRsZXIpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSBjb21tYW5kSGFuZGxlcjtcclxuICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dEhhbmRsZXI7XHJcbiAgICAgICAgdGhpcy5lY2hvSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5wdXQtYXJlYVwiKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRFY2hvKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lY2hvSW5wdXQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGaWVsZC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZS53aGljaCA9PSAxMykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5pbnB1dEZpZWxkLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEZpZWxkLnZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVjaG9JbnB1dCkgdGhpcy5vdXRwdXQuc2F5KGA+ICR7dmFsfWApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLmRvQ29tbWFuZCh2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCBMb29rQ29tbWFuZCBmcm9tIFwiLi9jb21tYW5kcy9sb29rXCI7XHJcbmltcG9ydCBVc2VDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL3VzZVwiO1xyXG5pbXBvcnQgVGFrZUNvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvdGFrZVwiO1xyXG5pbXBvcnQgRHJvcENvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvZHJvcFwiO1xyXG5pbXBvcnQgRWNob0NvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvZWNob1wiO1xyXG5cclxuY29uc3QgZGVmYXVsdENvbW1hbmRzID0gW1xyXG4gICAgW1tcImxvb2tcIiwgXCJsXCJdLCBMb29rQ29tbWFuZF0sXHJcbiAgICBbW1widXNlXCIsIFwiaW50ZXJhY3RcIl0sIFVzZUNvbW1hbmRdLFxyXG4gICAgW1tcInRha2VcIiwgXCJnZXRcIl0sIFRha2VDb21tYW5kXSxcclxuICAgIFtbXCJkcm9wXCIsIFwicHV0XCJdLCBEcm9wQ29tbWFuZF0sXHJcbiAgICBbXCJlY2hvXCIsIEVjaG9Db21tYW5kXVxyXG5dO1xyXG5cclxuY29uc3QgZGlyZWN0aW9uTWFwID0gW1xyXG4gICAgW1wiblwiLCBcIm5vcnRoXCJdLFxyXG4gICAgW1wibmVcIiwgXCJub3J0aGVhc3RcIl0sXHJcbiAgICBbXCJlXCIsIFwiZWFzdFwiXSxcclxuICAgIFtcInNlXCIsIFwic291dGhlYXN0XCJdLFxyXG4gICAgW1wic1wiLCBcInNvdXRoXCJdLFxyXG4gICAgW1wic3dcIiwgXCJzb3V0aHdlc3RcIl0sXHJcbiAgICBbXCJ3XCIsIFwid2VzdFwiXSxcclxuICAgIFtcIm53XCIsIFwibm9ydGh3ZXN0XCJdLFxyXG4gICAgW1widVwiLCBcInVwXCJdLFxyXG4gICAgW1wiZFwiLCBcImRvd25cIl1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1hbmRzIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbW1hbmRzKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLmNvbW1hbmRzID0gY29tbWFuZHMgfHwgbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGREZWZhdWx0Q29tbWFuZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBkb0NvbW1hbmQoc3RyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnByaW50KGBZb3UgY2FuJ3Qgc2VlbSB0byBkbyBhbnl0aGluZyBhdCB0aGUgbW9tZW50LmApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmNvbnRleHQuZ2V0Um9vbSh0aGlzLmNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBjb25zdCBzcGxpdCA9IHN0ci5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbWFuZHMuZ2V0KHNwbGl0WzBdKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzLmdldChzcGxpdFswXSkoc3BsaXQsIHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMubWF0Y2hEaXJlY3Rpb24oc3BsaXRbMF0pO1xyXG5cclxuICAgICAgICBpZiAocm9vbS5nZXRFeGl0KGRpcmVjdGlvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm1vdmUocm9vbS5nZXRFeGl0KGRpcmVjdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRDb21tYW5kKG5hbWUsIGZ1bmMpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xyXG4gICAgICAgICAgICBuYW1lLmZvckVhY2goKGNvbW1hbmQpID0+IHRoaXMuY29tbWFuZHMuc2V0KGNvbW1hbmQsIGZ1bmMpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzLnNldChuYW1lLCBmdW5jKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ29tbWFuZHMoY29tbWFuZHMpIHtcclxuICAgICAgICBjb21tYW5kcy5mb3JFYWNoKChjb21tYW5kKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkQ29tbWFuZChjb21tYW5kWzBdLCBjb21tYW5kWzFdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGREZWZhdWx0Q29tbWFuZHMoKSB7XHJcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kcyhkZWZhdWx0Q29tbWFuZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIG1hdGNoRGlyZWN0aW9uKHN0cikge1xyXG4gICAgICAgIGZvciAobGV0IGRpciBvZiBkaXJlY3Rpb25NYXApIHtcclxuICAgICAgICAgICAgaWYgKGRpclswXSA9PSBzdHIpIHJldHVybiBkaXJbMV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTG9va0NvbW1hbmQoYXJncywgY29udGV4dCkge1xyXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHtcclxuICAgICAgICBjb250ZXh0LmV4YW1pbmVSb29tKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcm9vbS5nZXRJdGVtcygpO1xyXG4gICAgICAgIGxldCBpdGVtID0gbnVsbDtcclxuICAgICAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQub3V0cHV0LnNheShgSSBjb3VsZCBub3QgZmluZCBhICR7YXJnc1sxXX0uYCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5vdXRwdXQuc2F5KGl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQub3V0cHV0LnNheShpdGVtLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBVc2VDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgY29uc3QgaXRlbXMgPSByb29tLmdldEl0ZW1zKCk7XHJcbiAgICBsZXQgaXRlbSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgaWYgKGkubmFtZS5pbmNsdWRlcyhhcmdzWzFdKSkge1xyXG4gICAgICAgICAgICBpdGVtID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgICAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICBjb250ZXh0Lm91dHB1dC5zYXkoYEkgY291bGQgbm90IGZpbmQgYSAke2FyZ3NbMV19LmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCBpdGVtLm9uVXNlKCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUYWtlQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCByb29tID0gY29udGV4dC5nZXRSb29tKGNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gcm9vbS5nZXRJdGVtcygpO1xyXG4gICAgbGV0IGl0ZW0gPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaSBvZiBpdGVtcykge1xyXG4gICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgaXRlbSA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFlvdSBjYW4ndCBmaW5kIGFueSAke2FyZ3NbMV19LmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIWl0ZW0udGFrZWFibGUpIHtcclxuICAgICAgICAgICAgY29udGV4dC5wcmludChgWW91IGNhbid0IHRha2UgJHtpdGVtLm5hbWV9LmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvb20ucmVtb3ZlSXRlbShpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29udGV4dC5wbGF5ZXIuYWRkSXRlbShpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29udGV4dC5wcmludChgWW91IHRha2UgJHtpdGVtLm5hbWV9LmApO1xyXG4gICAgICAgICAgICBpdGVtLm9uVGFrZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyb3BDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgIGxldCBpdGVtID0gbnVsbDtcclxuICAgIGZvciAobGV0IGkgb2YgaXRlbXMpIHtcclxuICAgICAgICBpZiAoaS5uYW1lLmluY2x1ZGVzKGFyZ3NbMV0pKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3UncmUgbm90IGNhcnJ5aW5nIGEgJHthcmdzWzFdfWApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb250ZXh0LnBsYXllci5yZW1vdmVJdGVtKGl0ZW0uaWQpO1xyXG4gICAgICAgIHJvb20uYWRkSXRlbShpdGVtLmlkKTtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3Ugc2V0ICR7aXRlbS5uYW1lfSBkb3duIG9uIHRoZSBmbG9vci5gKTtcclxuICAgICAgICBpdGVtLm9uRHJvcCgpO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWNob0NvbW1hbmQoYXJncywgY29udGV4dCkge1xyXG4gICAgaWYgKGFyZ3NbMV0gIT0gXCJvblwiICYmIGFyZ3NbMV0gIT0gXCJvZmZcIikge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFVzYWdlOiBlY2hvIDxvbi9vZmY+YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRleHQuc2V0SW5wdXRFY2hvKGFyZ3NbMV0gPT0gXCJvblwiID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBDb21tYW5kIGVjaG8gaXMgbm93ICR7YXJnc1sxXX0uYCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBSb29tIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBcInJvb21cIjtcclxuICAgICAgICB0aGlzLnRpdGxlID0gXCJBIHJvb21cIjtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJZb3Ugc2VlIG5vdGhpbmcgc3BlY2lhbFwiO1xyXG4gICAgICAgIHRoaXMuZmlyc3REZXNjcmlwdGlvbiA9IFwiQXMgeW91IHdhbGsgaW50byB0aGUgcm9vbSwgeW91IG5vdGljZSBub3RoaW5nIHNwZWNpYWxcIjtcclxuICAgICAgICB0aGlzLm9iamVjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLmV4aXRzID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuZW50ZXJDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5leGl0Q2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FuRW50ZXJMb2dpYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYW5FeGl0TG9naWMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGlja0NhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRW50ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50ZXJDYWxsYmFjaykgcmV0dXJuIHRoaXMuZW50ZXJDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRXhpdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5leGl0Q2FsbGJhY2spIHJldHVybiB0aGlzLmV4aXRDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbkVudGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbkVudGVyTG9naWMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FuRW50ZXJMb2dpYyh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5FeGl0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbkV4aXRMb2dpYykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW5FeGl0TG9naWModGhpcy5jb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRXhpdChkaXJlY3Rpb24sIHJvb21JRCkge1xyXG4gICAgICAgIHRoaXMuZXhpdHMuc2V0KGRpcmVjdGlvbiwgcm9vbUlEKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRFeGl0KGRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4aXRzLmdldChkaXJlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEl0ZW0oaXRlbSkge1xyXG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oaWQpIHtcclxuICAgICAgICB0aGlzLm9iamVjdHMgPSB0aGlzLm9iamVjdHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFbnRlckNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5lbnRlckNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFeGl0Q2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLmV4aXRDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRW50ZXJMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5jYW5FbnRlckxvZ2ljID0gZnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEV4aXRMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5jYW5FeGl0TG9naWMgPSBmdW5jLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGlja0NhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy50aWNrQ2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9iamVjdHMubWFwKChpdGVtKSA9PiB0aGlzLmNvbnRleHQuZ2V0SXRlbShpdGVtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25UaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRpY2tDYWxsYmFjaykgcmV0dXJuIHRoaXMudGlja0NhbGxiYWNrKHRoaXMuY29udGV4dCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgUm9vbSBmcm9tICcuLi9yb29tJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvb21CdWlsZGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucm9vbSA9IG5ldyBSb29tKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aElEKElEKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmlkID0gSUQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHdpdGhUaXRsZSh0aXRsZSkge1xyXG4gICAgICAgIHRoaXMucm9vbS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhGaXJzdERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmZpcnN0RGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLnJvb20uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRXhpdChkaXJlY3Rpb24sIHJvb21JRCkge1xyXG4gICAgICAgIHRoaXMucm9vbS5hZGRFeGl0KGRpcmVjdGlvbiwgcm9vbUlEKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoSXRlbShpdGVtSUQpIHtcclxuICAgICAgICB0aGlzLnJvb20uYWRkSXRlbShpdGVtSUQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhFbnRlckNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEVudGVyQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhFeGl0Q2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnJvb20uYWRkRXhpdENhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRW50ZXJMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEVudGVyTG9naWMoZnVuYyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aEV4aXRMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEV4aXRMb2dpYyhmdW5jKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoVGljayhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZFRpY2tDYWxsYmFjayhmdW5jKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vbTtcclxuICAgIH1cclxufSIsImltcG9ydCBSb29tQnVpbGRlciBmcm9tICcuLi8uLi9lbmdpbmUvYnVpbGRlcnMvcm9vbSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgUm9vbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwic3RhcnRcIilcclxuLndpdGhUaXRsZShcIlRoZSBzdGFydGluZyByb29tXCIpXHJcbi53aXRoRmlyc3REZXNjcmlwdGlvbihcclxuYFlvdSBzZXQgZm9vdCBpbiB5b3VyIHZlcnkgZmlyc3QgZXZlciByb29tLlxyXG5Zb3UncmUgbm90IHF1aXRlIHN1cmUgd2hhdCB5b3Ugd2VyZSBzdXBwb3NlZCB0byBleHBlY3QsIGJ1dCBpdCBkZWZpbml0ZWx5IHdhc24ndCB0aGlzLlxyXG5JIG1lYW4gd2hvIHdvdWxkIGV4cGVjdCBhIGJvcmluZyBvbGQgcm9vbSBsaWtlIHRoaXMgb25lPyBVZ2guXHJcbkp1c3QuLi4gbWFrZSBpdCBzdG9wLiBQbGVhc2UuYFxyXG4pXHJcbi53aXRoRGVzY3JpcHRpb24oXCJUaGUgZmlyc3Qgcm9vbS4gTm90aGluZyBzcGVjaWFsIGFib3V0IGl0LlwiKVxyXG4ud2l0aEV4aXQoXCJub3J0aFwiLCBcInR1bm5lbF8xXCIpXHJcbi53aXRoRXhpdChcIm5vcnRod2VzdFwiLCBcInR1bm5lbF8yXCIpXHJcbi53aXRoRW50ZXJDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBpZiAoY29udGV4dC5zdGF0ZS5nZXQoXCJzdGFydC5hd29rZW5cIikpIHJldHVybjtcclxuICAgIGNvbnN0IHsgb3V0cHV0LCB3YWl0IH0gPSBjb250ZXh0O1xyXG4gICAgY29udGV4dC5lbmFibGVDb21tYW5kSW5wdXQoZmFsc2UpO1xyXG4gICAgb3V0cHV0LnNheShcIllvdSBzbG93bHkgd2FrZSB1cFwiKTtcclxuICAgIGF3YWl0IHdhaXQoNTAwMCk7XHJcbiAgICBvdXRwdXQuc2F5KFwiSXQncyBzdHJhbmdlLiBZb3UgbmV2ZXIgdXNlZCB0byBiZSBhYmxlIHRvIGJlIGNvbnNjaW91cyBhYm91dCB0aGUgZmFjdCB0aGF0IHlvdSB3ZXJlIHdha2luZyB1cC5cIik7XHJcbiAgICBhd2FpdCB3YWl0KDUwMDApO1xyXG4gICAgb3V0cHV0LnNheShcIllldCBoZXJlIHdlIGFyZS5cIik7XHJcbiAgICBjb250ZXh0LmVuYWJsZUNvbW1hbmRJbnB1dCh0cnVlKTtcclxuICAgIGNvbnRleHQuc3RhdGUuc2V0KFwic3RhcnQuYXdva2VuXCIsIHRydWUpO1xyXG59KVxyXG4ud2l0aEl0ZW0oXCJzdG9uZVwiKVxyXG4ud2l0aEl0ZW0oXCJjdXBcIilcclxuLndpdGhJdGVtKFwidG9yY2hcIilcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBTdGFydCBmcm9tICcuL3N0YXJ0JztcclxuaW1wb3J0IFR1bm5lbDEgZnJvbSAnLi90dW5uZWwxJztcclxuaW1wb3J0IHR1bm5lbDIgZnJvbSAnLi90dW5uZWwyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFtcclxuICAgIFN0YXJ0LFxyXG4gICAgVHVubmVsMSxcclxuICAgIHR1bm5lbDJcclxuXTsiLCJpbXBvcnQgUm9vbUJ1aWxkZXIgZnJvbSAnLi4vLi4vZW5naW5lL2J1aWxkZXJzL3Jvb20nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFJvb21CdWlsZGVyKClcclxuLndpdGhJRChcInR1bm5lbF8xXCIpXHJcbi53aXRoVGl0bGUoXCJBIGxvbmcgZGFyayB0dW5uZWxcIilcclxuLndpdGhGaXJzdERlc2NyaXB0aW9uKFwiWW91IGZpcnN0IHN0ZXAgZm9vdCBpbiB0aGlzIGRhcmsgbG9vbXkgdHVubmVsLlwiKVxyXG4ud2l0aERlc2NyaXB0aW9uKFwiVGhlIHdhbGxzIGFyZSB3ZXQuIEV2ZXJ5dGhpbmcgaXMgd2V0LiBVZ2guIFdoeSBkbyB5b3UgZXZlbi5cIilcclxuLndpdGhFeGl0KFwic291dGhcIiwgXCJzdGFydFwiKVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IFJvb21CdWlsZGVyIGZyb20gXCIuLi8uLi9lbmdpbmUvYnVpbGRlcnMvcm9vbVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFJvb21CdWlsZGVyKClcclxuLndpdGhJRChcInR1bm5lbF8yXCIpXHJcbi53aXRoVGl0bGUoXCJBIGxvbmcsIHdpbmRpbmcgdHVubmVsXCIpXHJcbi53aXRoRmlyc3REZXNjcmlwdGlvbihcclxuICAgIGBZb3Ugc3RlcCBvdXQgZnJvbSB5b3VyIGhpZHkgaG9sZSBpbnRvIGEgdGhpbiwgd2luZGluZyB0dW5uZWwuIFRoZSB3YWxscyBhbmQgY2VpbGluZyBhcHBlYXIgdG8gZ2V0IHRoaW5uZXIgYW5kIHRoaW5uZXIsIHNwYWNlIHNsb3dseSBkd2luZGxpbmcgYXdheSB0byBub3RoaW5nLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG4gICAgYEEgdHVubmVsIHRoYXQgZW5kcyBpbiBhIGJvd2wgc2hhcGUuYFxyXG4pXHJcbi53aXRoRXhpdChcInNvdXRoZWFzdFwiLCBcInN0YXJ0XCIpXHJcbi5jcmVhdGUoKTsiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBcIml0ZW1cIjtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkFuIGl0ZW1cIjtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJZb3Ugc2VlIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGlzIGl0ZW1cIjtcclxuICAgICAgICB0aGlzLnVzYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50YWtlYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51c2VDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50YWtlQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZHJvcENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblVzZSgpIHtcclxuICAgICAgICBpZiAodGhpcy51c2VDYWxsYmFjaykgcmV0dXJuIHRoaXMudXNlQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblRha2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFrZUNhbGxiYWNrKSByZXR1cm4gdGhpcy50YWtlQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRyb3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcENhbGxiYWNrKSByZXR1cm4gdGhpcy5kcm9wQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuICAgIGFzeW5jIG9uVGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy50aWNrQ2FsbGJhY2spIHJldHVybiB0aGlzLnRpY2tDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy51c2VDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGFrZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy50YWtlQ2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZERyb3BDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuZHJvcENhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUaWNrQ2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgSXRlbSBmcm9tICcuLi9pdGVtJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1CdWlsZGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbSA9IG5ldyBJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aElEKElEKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmlkID0gSUQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aE5hbWUobmFtZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbS5uYW1lID0gbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLml0ZW0uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpc1VzYWJsZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbS51c2FibGUgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpc1Rha2VhYmxlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLnRha2VhYmxlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aFVzZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFVzZUNhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoVGFrZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFRha2VDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aERyb3BDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaXRlbS5hZGREcm9wQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB3aXRoVGlja0NhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFRpY2tDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSBcIi4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgSXRlbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwic3RvbmVcIilcclxuLndpdGhOYW1lKFwiYSBkdWxsIHN0b25lXCIpXHJcbi53aXRoRGVzY3JpcHRpb24oXCJUaGVyZSBpcyBub3RoaW5nIHJlbWFya2FibGUgYWJvdXQgdGhpcyByb3VnaCwgYmxhbmQgc3RvbmUuXCIpXHJcbi5pc1Rha2VhYmxlKHRydWUpXHJcbi5pc1VzYWJsZSh0cnVlKVxyXG4ud2l0aFRha2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBUaGUgJHt0aGlzLmlkfSBmZWVscyBoZWF2eSBpbiB5b3VyIGhhbmRzLmApO1xyXG59KVxyXG4ud2l0aERyb3BDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBJdCBib3VuY2VzIGJhY2sgYW5kIGZvcnRoIGEgbGl0dGxlLmApXHJcbn0pXHJcbi53aXRoVXNlQ2FsbGJhY2soYXN5bmMgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgY29udGV4dC5wcmludChgWW91IGNhbid0IHJlYWxseSBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCAke3RoaXMubmFtZX0geWV0YCk7XHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgU3RvbmUgZnJvbSAnLi9zdG9uZSc7XHJcbmltcG9ydCBUb3JjaCBmcm9tICcuL3RvcmNoJztcclxuaW1wb3J0IEN1cCBmcm9tICcuL2N1cCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBbXHJcbiAgICBTdG9uZSxcclxuICAgIFRvcmNoLFxyXG4gICAgQ3VwXHJcbl0iLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSBcIi4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgSXRlbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwidG9yY2hcIilcclxuLndpdGhOYW1lKFwiYSB0b3JjaFwiKVxyXG4ud2l0aERlc2NyaXB0aW9uKFwiQSBzdGFuZGFyZCB0b3JjaCB0aGF0IHByb3ZpZGVzIGxpZ2h0LlwiKVxyXG4uaXNVc2FibGUodHJ1ZSlcclxuLmlzVGFrZWFibGUodHJ1ZSlcclxuLndpdGhVc2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBZb3UgdHJ5IHRvIGxpZ2h0IHRoZSB0b3JjaCBidXQgZmFpbC5gKVxyXG59KVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IEl0ZW1CdWlsZGVyIGZyb20gXCIuLi8uLi9lbmdpbmUvYnVpbGRlcnMvaXRlbVwiO1xyXG5pbXBvcnQgSXRlbSBmcm9tIFwiLi4vLi4vZW5naW5lL2l0ZW1cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJdGVtQnVpbGRlcigpXHJcbi53aXRoSUQoXCJjdXBcIilcclxuLndpdGhOYW1lKFwiYSBjdXBcIilcclxuLndpdGhEZXNjcmlwdGlvbihcIkEgc3RhbmRhcmQgY29mZmVlIGN1cFwiKVxyXG4uaXNUYWtlYWJsZSh0cnVlKVxyXG4uaXNVc2FibGUoZmFsc2UpXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgR2FtZSBmcm9tICcuLi9lbmdpbmUnO1xyXG5pbXBvcnQgUm9vbXMgZnJvbSAnLi9yb29tcyc7XHJcbmltcG9ydCBJdGVtcyBmcm9tICcuL2l0ZW1zJztcclxuaW1wb3J0IE1lb3dDb21tYW5kIGZyb20gJy4vY29tbWFuZHMvbWVvdyc7XHJcblxyXG5jb25zdCBnYW1lID0gbmV3IEdhbWUoKTtcclxuXHJcbmdhbWUuaW5pdCh7XHJcbiAgICByb29tczogUm9vbXMsXHJcbiAgICBjb21tYW5kczogW1xyXG4gICAgICAgIFtbXCJtZW93XCIsIFwibWV3XCJdLCBNZW93Q29tbWFuZF1cclxuICAgIF0sXHJcbiAgICBpdGVtczogSXRlbXNcclxufSk7IiwiaW1wb3J0IFN0YXRlIGZyb20gJy4vc3RhdGUnO1xyXG5pbXBvcnQgUm9vbSBmcm9tICcuL3Jvb20nO1xyXG5pbXBvcnQgUGxheWVyIGZyb20gJy4vcGxheWVyJztcclxuaW1wb3J0IE91dHB1dCBmcm9tICcuL291dHB1dCc7XHJcbmltcG9ydCBJbnB1dCBmcm9tICcuL2lucHV0JztcclxuaW1wb3J0IENvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMnO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSBuZXcgUGxheWVyKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlO1xyXG4gICAgICAgIHRoaXMucm9vbXMgPSBbXTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgT3V0cHV0KCk7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kSGFuZGxlciA9IG5ldyBDb21tYW5kcyh0aGlzKTtcclxuICAgICAgICB0aGlzLmlucHV0ID0gbmV3IElucHV0KHRoaXMuY29tbWFuZEhhbmRsZXIsIHRoaXMub3V0cHV0KTtcclxuICAgICAgICB0aGlzLnZpc2l0ZWRSb29tcyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcmludChzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm91dHB1dC5zYXkoc3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KGRhdGEpIHtcclxuICAgICAgICB0aGlzLnJvb21zID0gZGF0YS5yb29tcy5tYXAoKHJvb20pID0+IHtcclxuICAgICAgICAgICAgcm9vbS5jb250ZXh0ID0gdGhpcztcclxuICAgICAgICAgICAgcmV0dXJuIHJvb207XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBkYXRhLnN0YXRlIHx8IFN0YXRlO1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXIuYWRkQ29tbWFuZHMoZGF0YS5jb21tYW5kcyk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSBuZXcgUGxheWVyKCk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIuY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5tb3ZlKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICB0aGlzLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWR2YW5jZVRpY2soKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLm9uVGljaygpKTtcclxuICAgICAgICB0aGlzLnJvb21zLmZvckVhY2goKHJvb20pID0+IHJvb20ub25UaWNrKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmFkdmFuY2VUaWNrKCksIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBleGFtaW5lUm9vbSgpIHtcclxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5nZXRSb29tKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICB0aGlzLm91dHB1dC5zYXkocm9vbS50aXRsZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2l0ZWRSb29tcy5nZXQodGhpcy5wbGF5ZXIuY3VycmVudFJvb20pICYmIHJvb20uZmlyc3REZXNjcmlwdGlvbiAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0cHV0LnNheShyb29tLmZpcnN0RGVzY3JpcHRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0cHV0LnNheShyb29tLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leGFtaW5lSXRlbXMoKTtcclxuICAgICAgICB0aGlzLmV4YW1pbmVFeGl0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4YW1pbmVJdGVtcygpIHtcclxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5nZXRSb29tKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHJvb20uZ2V0SXRlbXMoKTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBpdGVtRGVzY3JpcHRpb24gPSBgWW91IHNlZSBgO1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDIpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBgJHtpdGVtLm5hbWV9LCBgO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbURlc2NyaXB0aW9uICs9IGAke2l0ZW0ubmFtZX0gYW5kIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtRGVzY3JpcHRpb24gKz0gaXRlbS5uYW1lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm91dHB1dC5zYXkoaXRlbURlc2NyaXB0aW9uICsgXCIuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4YW1pbmVFeGl0cygpIHtcclxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5nZXRSb29tKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBsZXQgZXhpdHMgPSBbXTtcclxuICAgICAgICBsZXQgZXhpdERlc2NyaXB0aW9uID0gXCJZb3UgY2FuIGdvIFwiO1xyXG4gICAgICAgIGNvbnN0IGV4aXRLZXlzID0gcm9vbS5leGl0cy5rZXlzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgZXhpdCBvZiBleGl0S2V5cykge1xyXG4gICAgICAgICAgICBleGl0cy5wdXNoKGV4aXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleGl0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCBleGl0cy5sZW5ndGggLSAyKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRpb24gKz0gYCR7aXRlbX0sIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBleGl0cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRpb24gKz0gYCR7aXRlbX0gYW5kIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRpb24gKz0gaXRlbVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc2F5KGV4aXREZXNjcmlwdGlvbiArIFwiLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSb29tKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vbXMuZmluZCgocm9vbSkgPT4gcm9vbS5pZCA9PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbShpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHdhaXQobXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb3ZlKHJvb21JRCkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb29tID0gdGhpcy5nZXRSb29tKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBjb25zdCBuZXdSb29tID0gdGhpcy5nZXRSb29tKHJvb21JRCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRSb29tLmNhbkV4aXQoKSAmJiBuZXdSb29tLmNhbkVudGVyKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgY3VycmVudFJvb20ub25FeGl0KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IG5ld1Jvb20ub25FbnRlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllci5jdXJyZW50Um9vbSA9IHJvb21JRDtcclxuICAgICAgICAgICAgdGhpcy5leGFtaW5lUm9vbSgpO1xyXG4gICAgICAgICAgICB0aGlzLnZpc2l0ZWRSb29tcy5zZXQocm9vbUlELCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlQ29tbWFuZElucHV0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kSGFuZGxlci5lbmFibGVkID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5wdXRFY2hvKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5zZXRFY2hvKHZhbHVlKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIE1lb3dDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQucHJpbnQoYFlvdSBtZW93LmApO1xyXG59Il0sIm5hbWVzIjpbImhhcyIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicHJlZml4IiwiRXZlbnRzIiwiRUUiLCJmbiIsImNvbnRleHQiLCJvbmNlIiwidGhpcyIsImFkZExpc3RlbmVyIiwiZW1pdHRlciIsImV2ZW50IiwiVHlwZUVycm9yIiwibGlzdGVuZXIiLCJldnQiLCJfZXZlbnRzIiwicHVzaCIsIl9ldmVudHNDb3VudCIsImNsZWFyRXZlbnQiLCJFdmVudEVtaXR0ZXIiLCJjcmVhdGUiLCJfX3Byb3RvX18iLCJldmVudE5hbWVzIiwiZXZlbnRzIiwibmFtZSIsIm5hbWVzIiwiY2FsbCIsInNsaWNlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiY29uY2F0IiwibGlzdGVuZXJzIiwiaGFuZGxlcnMiLCJpIiwibCIsImxlbmd0aCIsImVlIiwiQXJyYXkiLCJsaXN0ZW5lckNvdW50IiwiZW1pdCIsImExIiwiYTIiLCJhMyIsImE0IiwiYTUiLCJhcmdzIiwibGVuIiwiYXJndW1lbnRzIiwicmVtb3ZlTGlzdGVuZXIiLCJ1bmRlZmluZWQiLCJhcHBseSIsImoiLCJvbiIsInJlbW92ZUFsbExpc3RlbmVycyIsIm9mZiIsInByZWZpeGVkIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJuIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImQiLCJhIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJvYmoiLCJwcm9wIiwiY29uc3RydWN0b3IiLCJzdGF0ZXMiLCJNYXAiLCJzZXQiLCJ2YWx1ZSIsIlBsYXllciIsImludmVudG9yeSIsImN1cnJlbnRSb29tIiwiYWRkSXRlbSIsImlkIiwicmVtb3ZlSXRlbSIsImZpbHRlciIsIml0ZW0iLCJnZXRJbnZlbnRvcnkiLCJtYXAiLCJnZXRJdGVtIiwiQmFzZU91dHB1dCIsInNwZWFrIiwidGV4dCIsInN0b3AiLCJzZXRPcHRpb25zIiwib3B0aW9ucyIsIkFyaWFPdXRwdXQiLCJzdXBlciIsInRpbWVvdXQiLCJpbml0IiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwic3BlZWNoRGlzcGxheSIsImFwcGVuZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJjbGVhckRpc3BsYXkiLCJub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJwYXJhIiwic2V0VGltZW91dCIsImJpbmQiLCJpbm5lckhUTUwiLCJXZWJUVFNPdXRwdXQiLCJUVFMiLCJvdXRwdXQiLCJjcmVhdGVPdXRwdXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJSZXNvbmF0b3JBdWRpb0NvbnRleHQiLCJBdWRpb0NvbnRleHQiLCJnZXRDb250ZXh0IiwiY3JlYXRlR2FpbiIsImdldE91dHB1dERlc3RpbmF0aW9uIiwiZGVzdGluYXRpb24iLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJkZWNvZGVBdWRpb0RhdGEiLCJkYXRhIiwiY3JlYXRlUGFubmVyIiwiY3JlYXRlTWVkaWFFbGVtZW50U291cmNlIiwiZWxlbWVudCIsInZlYzQiLCJ2YWx1ZXMiLCJGbG9hdDMyQXJyYXkiLCJ4eXp3IiwieCIsInkiLCJ6IiwidyIsInh5IiwieHl6IiwiciIsImciLCJiIiwicmciLCJyZ2IiLCJyZ2JhIiwiYXQiLCJpbmRleCIsInJlc2V0IiwiY29weSIsImRlc3QiLCJuZWdhdGUiLCJlcXVhbHMiLCJ2ZWN0b3IiLCJ0aHJlc2hvbGQiLCJlcHNpbG9uIiwiTWF0aCIsImFicyIsInNxcnQiLCJzcXVhcmVkTGVuZ3RoIiwiYWRkIiwic3VidHJhY3QiLCJtdWx0aXBseSIsImRpdmlkZSIsInNjYWxlIiwibm9ybWFsaXplIiwibXVsdGlwbHlNYXQ0IiwibWF0cml4IiwibXVsdGlwbHlWZWM0Iiwic3RhdGljIiwidmVjdG9yMiIsInRpbWUiLCJ6ZXJvIiwib25lIiwibWF0NCIsImFsbCIsInJvdyIsImNvbCIsImRldGVybWluYW50IiwiYTAwIiwiYTAxIiwiYTAyIiwiYTAzIiwiYTEwIiwiYTExIiwiYTEyIiwiYTEzIiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTMwIiwiYTMxIiwiYTMyIiwiYTMzIiwic2V0SWRlbnRpdHkiLCJ0cmFuc3Bvc2UiLCJ0ZW1wMDEiLCJ0ZW1wMDIiLCJ0ZW1wMDMiLCJ0ZW1wMTIiLCJ0ZW1wMTMiLCJ0ZW1wMjMiLCJpbnZlcnNlIiwiZGV0MDAiLCJkZXQwMSIsImRldDAyIiwiZGV0MDMiLCJkZXQwNCIsImRldDA1IiwiZGV0MDYiLCJkZXQwNyIsImRldDA4IiwiZGV0MDkiLCJkZXQxMCIsImRldDExIiwiZGV0IiwiYjAiLCJiMSIsImIyIiwiYjMiLCJtdWx0aXBseVZlYzMiLCJ2ZWMzIiwidG9NYXQzIiwibWF0MyIsInRvSW52ZXJzZU1hdDMiLCJkZXQyMSIsInRyYW5zbGF0ZSIsInJvdGF0ZSIsImFuZ2xlIiwiYXhpcyIsInMiLCJzaW4iLCJjIiwiY29zIiwidCIsImIwMCIsImIwMSIsImIwMiIsImIxMCIsImIxMSIsImIxMiIsImIyMCIsImIyMSIsImIyMiIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsInRvcCIsIm5lYXIiLCJmYXIiLCJybCIsInRiIiwiZm92IiwiYXNwZWN0IiwidGFuIiwiUEkiLCJmcnVzdHVtIiwicG9zaXRpb24iLCJ0YXJnZXQiLCJ1cCIsImlkZW50aXR5IiwiZGlmZmVyZW5jZSIsImNyb3NzIiwiZG90IiwibTEiLCJtMiIsImIwMyIsImIxMyIsImIyMyIsImIzMCIsImIzMSIsImIzMiIsImIzMyIsInZlYzIiLCJtdWx0aXBseU1hdDIiLCJtdWx0aXBseVZlYzIiLCJtdWx0aXBseU1hdDMiLCJ4MiIsInNxdWFyZWREaXN0YW5jZSIsInkyIiwidG9NYXQ0IiwidG9RdWF0IiwibTAwIiwibTAxIiwibTAyIiwibTEwIiwibTExIiwibTEyIiwibTIwIiwibTIxIiwibTIyIiwiZm91clhTcXVhcmVkTWludXMxIiwiZm91cllTcXVhcmVkTWludXMxIiwiZm91clpTcXVhcmVkTWludXMxIiwiYmlnZ2VzdEluZGV4IiwiZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxIiwiYmlnZ2VzdFZhbCIsIm11bHQiLCJxdWF0Iiwicm9sbCIsImF0YW4yIiwicGl0Y2giLCJ5YXciLCJhc2luIiwiY2FsY3VsYXRlVyIsImludkRvdCIsImNvbmp1Z2F0ZSIsIm90aGVyIiwicTF4IiwicTF5IiwicTF6IiwicTF3IiwicTJ4IiwicTJ5IiwicTJ6IiwicTJ3IiwicXgiLCJxeSIsInF6IiwicXciLCJpeCIsIml5IiwiaXoiLCJpdyIsInoyIiwieHgiLCJ4eiIsInl5IiwieXoiLCJ6eiIsInd4Iiwid3kiLCJ3eiIsInExIiwicTIiLCJxMmEiLCJrMCIsImsxIiwib25lT3ZlclNpbiIsImNvc0hhbGZUaGV0YSIsImhhbGZUaGV0YSIsImFjb3MiLCJzaW5IYWxmVGhldGEiLCJyYXRpb0EiLCJyYXRpb0IiLCJtdWx0aXBseUJ5TWF0MyIsIm11bHRpcGx5QnlRdWF0IiwicXVhdGVybmlvbiIsImZvcndhcmQiLCJSZXNvbmF0b3JTY2VuZSIsInNjZW5lIiwiY3JlYXRlU291cmNlIiwicGFubmluZ01vZGVsIiwiZGlzdGFuY2VNb2RlbCIsIm1heERpc3RhbmNlIiwicmVmRGlzdGFuY2UiLCJjb25uZWN0IiwiZ2V0T3V0cHV0IiwiZ2V0SW5wdXQiLCJzZXRMaXN0ZW5lclBvc2l0aW9uIiwic2V0UG9zaXRpb24iLCJzZXRMaXN0ZW5lck9yaWVudGF0aW9uIiwicmF3dXAiLCJmd2QiLCJzZXRPcmllbnRhdGlvbiIsIkVmZmVjdENoYWluIiwiZ3JhcGgiLCJpbnB1dCIsImVmZmVjdHMiLCJpbnB1dE5vZGUiLCJvdXRwdXROb2RlIiwidXBkYXRlQ29ubmVjdGlvbnMiLCJhcHBseUVmZmVjdCIsImVmZmVjdCIsInJlbW92ZUVmZmVjdCIsImZvckVhY2giLCJjdXJyRWZmZWN0IiwiZGlzY29ubmVjdCIsImN1cnJlbnQiLCJwcmV2aW91cyIsImNvbm5lY3RJbnB1dCIsImNvbm5lY3RPdXRwdXQiLCJBdWRpb0dyYXBoIiwic3dhcENoYW5uZWxzIiwiZWZmZWN0c0J1cyIsIndvcmxkQnVzIiwic2Vjb25kYXJ5QnVzIiwibWFzdGVyIiwiY2hhbm5lbFNwbGl0dGVyIiwiY3JlYXRlQ2hhbm5lbFNwbGl0dGVyIiwiY2hhbm5lbE1lcmdlciIsImNyZWF0ZUNoYW5uZWxNZXJnZXIiLCJjb25uZWN0VG9NYXN0ZXIiLCJjb25uZWN0VG9VSSIsIlNvdXJjZVR5cGUiLCJBdWRpb1NvdXJjZSIsImJ1ZmZlciIsInR5cGUiLCJXb3JsZFNvdXJjZSIsInBsYXliYWNrUmF0ZSIsImdhaW4iLCJnZXRCdWZmZXIiLCJzZXRCdWZmZXIiLCJwbGF5T25Mb2FkIiwicGxheSIsIndoZW4iLCJvZmZzZXQiLCJkdXJhdGlvbiIsInBsYXlpbmciLCJjcmVhdGVDb25uZWN0aW9ucyIsInN0YXJ0IiwibG9vcCIsImxvb3BpbmciLCJzY2VuZU5vZGUiLCJhZGRFdmVudExpc3RlbmVyIiwic2V0UGxheWJhY2tSYXRlIiwicmF0ZSIsImdldFBsYXliYWNrUmF0ZSIsInNldFZvbHVtZSIsInZvbHVtZSIsImdldFZvbHVtZSIsIlVJU291cmNlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlc3Ryb3kiLCJEYXRhUG9vbEl0ZW0iLCJkZWNvZGVkRGF0YSIsImdldERhdGEiLCJzZXREYXRhIiwiZ2V0RGVjb2RlZERhdGEiLCJzZXREZWNvZGVkRGF0YSIsImdldE5hbWUiLCJzZXROYW1lIiwiSFRUUExvYWRlciIsInBhdGgiLCJmZXRjaCIsImFycmF5QnVmZmVyIiwiRGF0YVBvb2wiLCJsb2FkZXIiLCJtYXhEYXRhIiwiZGVjb2RlZCIsImtleXMiLCJjbGVhciIsIkNvbnZvbHZlciIsInBhcmFtcyIsImVmZmVjdFBhcmFtcyIsImVmZmVjdE5vZGUiLCJjb25zb2xlIiwibG9nIiwiY3JlYXRlQ29udm9sdmVyIiwiU3RyZWFtaW5nU291cmNlIiwiTWFzdGVyU291cmNlIiwiY2FuUGxheSIsInBsYXlPbkF2YWlsYWJsZSIsInBhdXNlIiwiUmVzb25hdG9yIiwiZW52aXJvbm1lbnRJbXB1bHNlIiwiZGF0YVBvb2wiLCJsb2FkIiwibG9hZEltbWVkaWF0ZSIsInNvdXJjZSIsInN0cmVhbSIsIkF1ZGlvIiwiY3Jvc3NPcmlnaW4iLCJzZXRFbnZpcm9ubWVudEltcHVsc2UiLCJmaWxlIiwiY2xlYXJEYXRhUG9vbCIsIlNvdW5kIiwicmVzIiwiT3V0cHV0IiwidHRzIiwiaGlzdG9yeSIsImdldEVsZW1lbnRCeUlkIiwic291bmQiLCJzYXkiLCJzdHJpbmciLCJzcGxpdCIsImxpbmUiLCJJbnB1dCIsImNvbW1hbmRIYW5kbGVyIiwib3V0cHV0SGFuZGxlciIsImhhbmRsZXIiLCJlY2hvSW5wdXQiLCJpbnB1dEZpZWxkIiwic2V0RWNobyIsIndoaWNoIiwidmFsIiwiZG9Db21tYW5kIiwiZGVmYXVsdENvbW1hbmRzIiwiZXhhbWluZVJvb20iLCJpdGVtcyIsImdldFJvb20iLCJwbGF5ZXIiLCJnZXRJdGVtcyIsImluY2x1ZGVzIiwiZGVzY3JpcHRpb24iLCJhc3luYyIsIm9uVXNlIiwicm9vbSIsInRha2VhYmxlIiwicHJpbnQiLCJvblRha2UiLCJvbkRyb3AiLCJzZXRJbnB1dEVjaG8iLCJkaXJlY3Rpb25NYXAiLCJDb21tYW5kcyIsImNvbW1hbmRzIiwiZW5hYmxlZCIsImFkZERlZmF1bHRDb21tYW5kcyIsInN0ciIsImRpcmVjdGlvbiIsIm1hdGNoRGlyZWN0aW9uIiwiZ2V0RXhpdCIsIm1vdmUiLCJhZGRDb21tYW5kIiwiZnVuYyIsImlzQXJyYXkiLCJjb21tYW5kIiwiYWRkQ29tbWFuZHMiLCJkaXIiLCJSb29tIiwidGl0bGUiLCJmaXJzdERlc2NyaXB0aW9uIiwib2JqZWN0cyIsImV4aXRzIiwiZW50ZXJDYWxsYmFjayIsImV4aXRDYWxsYmFjayIsImNhbkVudGVyTG9naWMiLCJjYW5FeGl0TG9naWMiLCJ0aWNrQ2FsbGJhY2siLCJjYW5FbnRlciIsImNhbkV4aXQiLCJhZGRFeGl0Iiwicm9vbUlEIiwiYWRkRW50ZXJDYWxsYmFjayIsImNhbGxiYWNrIiwiYWRkRXhpdENhbGxiYWNrIiwiYWRkRW50ZXJMb2dpYyIsImFkZEV4aXRMb2dpYyIsImFkZFRpY2tDYWxsYmFjayIsIlJvb21CdWlsZGVyIiwid2l0aElEIiwiSUQiLCJ3aXRoVGl0bGUiLCJ3aXRoRmlyc3REZXNjcmlwdGlvbiIsIndpdGhEZXNjcmlwdGlvbiIsIndpdGhFeGl0Iiwid2l0aEl0ZW0iLCJpdGVtSUQiLCJ3aXRoRW50ZXJDYWxsYmFjayIsIndpdGhFeGl0Q2FsbGJhY2siLCJ3aXRoRW50ZXJMb2dpYyIsIndpdGhFeGl0TG9naWMiLCJ3aXRoVGljayIsInN0YXRlIiwid2FpdCIsImVuYWJsZUNvbW1hbmRJbnB1dCIsIkl0ZW0iLCJ1c2FibGUiLCJ1c2VDYWxsYmFjayIsInRha2VDYWxsYmFjayIsImRyb3BDYWxsYmFjayIsImFkZFVzZUNhbGxiYWNrIiwiYWRkVGFrZUNhbGxiYWNrIiwiYWRkRHJvcENhbGxiYWNrIiwiSXRlbUJ1aWxkZXIiLCJ3aXRoTmFtZSIsImlzVXNhYmxlIiwiaXNUYWtlYWJsZSIsIndpdGhVc2VDYWxsYmFjayIsIndpdGhUYWtlQ2FsbGJhY2siLCJ3aXRoRHJvcENhbGxiYWNrIiwid2l0aFRpY2tDYWxsYmFjayIsImdhbWUiLCJyb29tcyIsInZpc2l0ZWRSb29tcyIsImludGVydmFsIiwiYWR2YW5jZVRpY2siLCJvblRpY2siLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJleGFtaW5lSXRlbXMiLCJleGFtaW5lRXhpdHMiLCJpdGVtRGVzY3JpcHRpb24iLCJleGl0RGVzY3JpcHRpb24iLCJleGl0S2V5cyIsImV4aXQiLCJmaW5kIiwibXMiLCJuZXdSb29tIiwib25FeGl0Iiwib25FbnRlciJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +(()=>{"use strict";var t={729:t=>{var e=Object.prototype.hasOwnProperty,s="~";function i(){}function n(t,e,s){this.fn=t,this.context=e,this.once=s||!1}function a(t,e,i,a,h){if("function"!=typeof i)throw new TypeError("The listener must be a function");var r=new n(i,a||t,h),o=s?s+e:e;return t._events[o]?t._events[o].fn?t._events[o]=[t._events[o],r]:t._events[o].push(r):(t._events[o]=r,t._eventsCount++),t}function h(t,e){0==--t._eventsCount?t._events=new i:delete t._events[e]}function r(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),(new i).__proto__||(s=!1)),r.prototype.eventNames=function(){var t,i,n=[];if(0===this._eventsCount)return n;for(i in t=this._events)e.call(t,i)&&n.push(s?i.slice(1):i);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(t)):n},r.prototype.listeners=function(t){var e=s?s+t:t,i=this._events[e];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,a=i.length,h=new Array(a);n{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var i in e)s.o(e,i)&&!s.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{const t=new class{constructor(){this.states=new Map}get(t){return this.states.has(t)?this.states.get(t):null}set(t,e){return this.states.set(t,e)}serialize(){const t=this.states.entries(),e=[];for(let s of t)e.push(s);return e}deserialize(t){this.states=new Map(t)}};class e{constructor(){this.inventory=[],this.currentRoom="start",this.context=null}addItem(t){this.inventory.push(t)}removeItem(t){this.inventory=this.inventory.filter((e=>e!=t))}getInventory(){return this.inventory.map((t=>this.context.getItem(t)))}}class i{speak(t){}stop(){}setOptions(t){}}class n extends i{constructor(t={}){super(),this.timeout=100,this.timeout=t.timeout||100,this.init()}init(){this.container=document.createElement("div"),this.container.setAttribute("aria-live","polite"),this.speechDisplay=document.createElement("div"),this.speechDisplay.setAttribute("aria-live","polite"),this.container.append(this.speechDisplay),document.body.appendChild(this.container),document.body.insertBefore(this.container,document.body.firstChild)}speak(t){this.clearDisplay();const e=document.createTextNode(t),s=document.createElement("p");s.appendChild(e),this.speechDisplay.appendChild(s),setTimeout(this.clearDisplay.bind(this),this.timeout)}stop(){this.clearDisplay()}clearDisplay(){this.speechDisplay.innerHTML=""}}class a extends i{}class h{constructor(t=function(t="aria"){return"webtts"===t?a:n}()){this.output=t}speak(t){this.output.speak(t)}stop(){this.output.stop()}}var r=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{o(i.next(t))}catch(t){a(t)}}function r(t){try{o(i.throw(t))}catch(t){a(t)}}function o(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}o((i=i.apply(t,e||[])).next())}))};class o{constructor(){this.context=new AudioContext}getContext(){return this.context}createGain(){return this.context.createGain()}getOutputDestination(){return this.context.destination}createBufferSource(){return this.context.createBufferSource()}decodeAudioData(t){return r(this,void 0,void 0,(function*(){return yield this.context.decodeAudioData(t)}))}createPanner(){return this.context.createPanner()}createMediaElementSource(t){return this.context.createMediaElementSource(t)}}var u=s(729),l=s.n(u);class c{constructor(t){this.values=new Float32Array(4),void 0!==t&&(this.xyzw=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get w(){return this.values[3]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}get xyzw(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set w(t){this.values[3]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set xyzw(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}get r(){return this.values[0]}get g(){return this.values[1]}get b(){return this.values[2]}get a(){return this.values[3]}get rg(){return[this.values[0],this.values[1]]}get rgb(){return[this.values[0],this.values[1],this.values[2]]}get rgba(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set r(t){this.values[0]=t}set g(t){this.values[1]=t}set b(t){this.values[2]=t}set a(t){this.values[3]=t}set rg(t){this.values[0]=t[0],this.values[1]=t[1]}set rgb(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set rgba(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}at(t){return this.values[t]}reset(){this.x=0,this.y=0,this.z=0,this.w=0}copy(t){return t||(t=new c),t.x=this.x,t.y=this.y,t.z=this.z,t.w=this.w,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t.w=-this.w,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&(!(Math.abs(this.z-t.z)>e)&&!(Math.abs(this.w-t.w)>e)))}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y,s=this.z,i=this.w;return t*t+e*e+s*s+i*i}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}subtract(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e.z*=t,e.w*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x*=0,t.y*=0,t.z*=0,t.w*=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t.w*=e,t)}multiplyMat4(t,e){return e||(e=this),t.multiplyVec4(this,e)}static mix(t,e,s,i){return i||(i=new c),i.x=t.x+s*(e.x-t.x),i.y=t.y+s*(e.y-t.y),i.z=t.z+s*(e.z-t.z),i.w=t.w+s*(e.w-t.w),i}static sum(t,e,s){return s||(s=new c),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s.w=t.w+e.w,s}static difference(t,e,s){return s||(s=new c),s.x=t.x-e.x,s.y=t.y-e.y,s.z=t.z-e.z,s.w=t.w-e.w,s}static product(t,e,s){return s||(s=new c),s.x=t.x*e.x,s.y=t.y*e.y,s.z=t.z*e.z,s.w=t.w*e.w,s}static quotient(t,e,s){return s||(s=new c),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s.w=t.w/e.w,s}}c.zero=new c([0,0,0,1]),c.one=new c([1,1,1,1]);class v{constructor(t){this.values=new Float32Array(16),void 0!==t&&this.init(t)}at(t){return this.values[t]}init(t){for(let e=0;e<16;e++)this.values[e]=t[e];return this}reset(){for(let t=0;t<16;t++)this.values[t]=0}copy(t){t||(t=new v);for(let e=0;e<16;e++)t.values[e]=this.values[e];return t}all(){const t=[];for(let e=0;e<16;e++)t[e]=this.values[e];return t}row(t){return[this.values[4*t+0],this.values[4*t+1],this.values[4*t+2],this.values[4*t+3]]}col(t){return[this.values[t],this.values[t+4],this.values[t+8],this.values[t+12]]}equals(t,e=1e-5){for(let s=0;s<16;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}determinant(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],o=this.values[8],u=this.values[9],l=this.values[10],c=this.values[11],v=this.values[12],d=this.values[13],m=this.values[14],y=this.values[15];return(t*a-e*n)*(l*y-c*m)-(t*h-s*n)*(u*y-c*d)+(t*r-i*n)*(u*m-l*d)+(e*h-s*a)*(o*y-c*v)-(e*r-i*a)*(o*m-l*v)+(s*r-i*h)*(o*d-u*v)}setIdentity(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=0,this.values[5]=1,this.values[6]=0,this.values[7]=0,this.values[8]=0,this.values[9]=0,this.values[10]=1,this.values[11]=0,this.values[12]=0,this.values[13]=0,this.values[14]=0,this.values[15]=1,this}transpose(){const t=this.values[1],e=this.values[2],s=this.values[3],i=this.values[6],n=this.values[7],a=this.values[11];return this.values[1]=this.values[4],this.values[2]=this.values[8],this.values[3]=this.values[12],this.values[4]=t,this.values[6]=this.values[9],this.values[7]=this.values[13],this.values[8]=e,this.values[9]=i,this.values[11]=this.values[14],this.values[12]=s,this.values[13]=n,this.values[14]=a,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],o=this.values[8],u=this.values[9],l=this.values[10],c=this.values[11],v=this.values[12],d=this.values[13],m=this.values[14],y=this.values[15],p=t*a-e*n,x=t*h-s*n,w=t*r-i*n,f=e*h-s*a,g=e*r-i*a,b=s*r-i*h,z=o*d-u*v,k=o*m-l*v,I=o*y-c*v,C=u*m-l*d,E=u*y-c*d,M=l*y-c*m;let T=p*M-x*E+w*C+f*I-g*k+b*z;return T?(T=1/T,this.values[0]=(a*M-h*E+r*C)*T,this.values[1]=(-e*M+s*E-i*C)*T,this.values[2]=(d*b-m*g+y*f)*T,this.values[3]=(-u*b+l*g-c*f)*T,this.values[4]=(-n*M+h*I-r*k)*T,this.values[5]=(t*M-s*I+i*k)*T,this.values[6]=(-v*b+m*w-y*x)*T,this.values[7]=(o*b-l*w+c*x)*T,this.values[8]=(n*E-a*I+r*z)*T,this.values[9]=(-t*E+e*I-i*z)*T,this.values[10]=(v*g-d*w+y*p)*T,this.values[11]=(-o*g+u*w-c*p)*T,this.values[12]=(-n*C+a*k-h*z)*T,this.values[13]=(t*C-e*k+s*z)*T,this.values[14]=(-v*f+d*x-m*p)*T,this.values[15]=(o*f-u*x+l*p)*T,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=this.values[4],h=this.values[5],r=this.values[6],o=this.values[7],u=this.values[8],l=this.values[9],c=this.values[10],v=this.values[11],d=this.values[12],m=this.values[13],y=this.values[14],p=this.values[15];let x=t.at(0),w=t.at(1),f=t.at(2),g=t.at(3);return this.values[0]=x*e+w*a+f*u+g*d,this.values[1]=x*s+w*h+f*l+g*m,this.values[2]=x*i+w*r+f*c+g*y,this.values[3]=x*n+w*o+f*v+g*p,x=t.at(4),w=t.at(5),f=t.at(6),g=t.at(7),this.values[4]=x*e+w*a+f*u+g*d,this.values[5]=x*s+w*h+f*l+g*m,this.values[6]=x*i+w*r+f*c+g*y,this.values[7]=x*n+w*o+f*v+g*p,x=t.at(8),w=t.at(9),f=t.at(10),g=t.at(11),this.values[8]=x*e+w*a+f*u+g*d,this.values[9]=x*s+w*h+f*l+g*m,this.values[10]=x*i+w*r+f*c+g*y,this.values[11]=x*n+w*o+f*v+g*p,x=t.at(12),w=t.at(13),f=t.at(14),g=t.at(15),this.values[12]=x*e+w*a+f*u+g*d,this.values[13]=x*s+w*h+f*l+g*m,this.values[14]=x*i+w*r+f*c+g*y,this.values[15]=x*n+w*o+f*v+g*p,this}multiplyVec3(t){const e=t.x,s=t.y,i=t.z;return new p([this.values[0]*e+this.values[4]*s+this.values[8]*i+this.values[12],this.values[1]*e+this.values[5]*s+this.values[9]*i+this.values[13],this.values[2]*e+this.values[6]*s+this.values[10]*i+this.values[14]])}multiplyVec4(t,e){e||(e=new c);const s=t.x,i=t.y,n=t.z,a=t.w;return e.x=this.values[0]*s+this.values[4]*i+this.values[8]*n+this.values[12]*a,e.y=this.values[1]*s+this.values[5]*i+this.values[9]*n+this.values[13]*a,e.z=this.values[2]*s+this.values[6]*i+this.values[10]*n+this.values[14]*a,e.w=this.values[3]*s+this.values[7]*i+this.values[11]*n+this.values[15]*a,e}toMat3(){return new m([this.values[0],this.values[1],this.values[2],this.values[4],this.values[5],this.values[6],this.values[8],this.values[9],this.values[10]])}toInverseMat3(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[4],n=this.values[5],a=this.values[6],h=this.values[8],r=this.values[9],o=this.values[10],u=o*n-a*r,l=-o*i+a*h,c=r*i-n*h;let v=t*u+e*l+s*c;return v?(v=1/v,new m([u*v,(-o*e+s*r)*v,(a*e-s*n)*v,l*v,(o*t-s*h)*v,(-a*t+s*i)*v,c*v,(-r*t+e*h)*v,(n*t-e*i)*v])):null}translate(t){const e=t.x,s=t.y,i=t.z;return this.values[12]+=this.values[0]*e+this.values[4]*s+this.values[8]*i,this.values[13]+=this.values[1]*e+this.values[5]*s+this.values[9]*i,this.values[14]+=this.values[2]*e+this.values[6]*s+this.values[10]*i,this.values[15]+=this.values[3]*e+this.values[7]*s+this.values[11]*i,this}scale(t){const e=t.x,s=t.y,i=t.z;return this.values[0]*=e,this.values[1]*=e,this.values[2]*=e,this.values[3]*=e,this.values[4]*=s,this.values[5]*=s,this.values[6]*=s,this.values[7]*=s,this.values[8]*=i,this.values[9]*=i,this.values[10]*=i,this.values[11]*=i,this}rotate(t,e){let s=e.x,i=e.y,n=e.z,a=Math.sqrt(s*s+i*i+n*n);if(!a)return null;1!==a&&(a=1/a,s*=a,i*=a,n*=a);const h=Math.sin(t),r=Math.cos(t),o=1-r,u=this.values[0],l=this.values[1],c=this.values[2],v=this.values[3],d=this.values[4],m=this.values[5],y=this.values[6],p=this.values[7],x=this.values[8],w=this.values[9],f=this.values[10],g=this.values[11],b=s*s*o+r,z=i*s*o+n*h,k=n*s*o-i*h,I=s*i*o-n*h,C=i*i*o+r,E=n*i*o+s*h,M=s*n*o+i*h,T=i*n*o-s*h,D=n*n*o+r;return this.values[0]=u*b+d*z+x*k,this.values[1]=l*b+m*z+w*k,this.values[2]=c*b+y*z+f*k,this.values[3]=v*b+p*z+g*k,this.values[4]=u*I+d*C+x*E,this.values[5]=l*I+m*C+w*E,this.values[6]=c*I+y*C+f*E,this.values[7]=v*I+p*C+g*E,this.values[8]=u*M+d*T+x*D,this.values[9]=l*M+m*T+w*D,this.values[10]=c*M+y*T+f*D,this.values[11]=v*M+p*T+g*D,this}static frustum(t,e,s,i,n,a){const h=e-t,r=i-s,o=a-n;return new v([2*n/h,0,0,0,0,2*n/r,0,0,(e+t)/h,(i+s)/r,-(a+n)/o,-1,0,0,-a*n*2/o,0])}static perspective(t,e,s,i){const n=s*Math.tan(t*Math.PI/360),a=n*e;return v.frustum(-a,a,-n,n,s,i)}static orthographic(t,e,s,i,n,a){const h=e-t,r=i-s,o=a-n;return new v([2/h,0,0,0,0,2/r,0,0,0,0,-2/o,0,-(t+e)/h,-(i+s)/r,-(a+n)/o,1])}static lookAt(t,e,s=p.up){if(t.equals(e))return this.identity;const i=p.difference(t,e).normalize(),n=p.cross(s,i).normalize(),a=p.cross(i,n).normalize();return new v([n.x,a.x,i.x,0,n.y,a.y,i.y,0,n.z,a.z,i.z,0,-p.dot(n,t),-p.dot(a,t),-p.dot(i,t),1])}static product(t,e,s){const i=t.at(0),n=t.at(1),a=t.at(2),h=t.at(3),r=t.at(4),o=t.at(5),u=t.at(6),l=t.at(7),c=t.at(8),d=t.at(9),m=t.at(10),y=t.at(11),p=t.at(12),x=t.at(13),w=t.at(14),f=t.at(15),g=e.at(0),b=e.at(1),z=e.at(2),k=e.at(3),I=e.at(4),C=e.at(5),E=e.at(6),M=e.at(7),T=e.at(8),D=e.at(9),A=e.at(10),N=e.at(11),S=e.at(12),R=e.at(13),V=e.at(14),L=e.at(15);return s?(s.init([g*i+b*r+z*c+k*p,g*n+b*o+z*d+k*x,g*a+b*u+z*m+k*w,g*h+b*l+z*y+k*f,I*i+C*r+E*c+M*p,I*n+C*o+E*d+M*x,I*a+C*u+E*m+M*w,I*h+C*l+E*y+M*f,T*i+D*r+A*c+N*p,T*n+D*o+A*d+N*x,T*a+D*u+A*m+N*w,T*h+D*l+A*y+N*f,S*i+R*r+V*c+L*p,S*n+R*o+V*d+L*x,S*a+R*u+V*m+L*w,S*h+R*l+V*y+L*f]),s):new v([g*i+b*r+z*c+k*p,g*n+b*o+z*d+k*x,g*a+b*u+z*m+k*w,g*h+b*l+z*y+k*f,I*i+C*r+E*c+M*p,I*n+C*o+E*d+M*x,I*a+C*u+E*m+M*w,I*h+C*l+E*y+M*f,T*i+D*r+A*c+N*p,T*n+D*o+A*d+N*x,T*a+D*u+A*m+N*w,T*h+D*l+A*y+N*f,S*i+R*r+V*c+L*p,S*n+R*o+V*d+L*x,S*a+R*u+V*m+L*w,S*h+R*l+V*y+L*f])}}v.identity=(new v).setIdentity();class d{constructor(t){this.values=new Float32Array(2),void 0!==t&&(this.xy=t)}get x(){return this.values[0]}get y(){return this.values[1]}get xy(){return[this.values[0],this.values[1]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}at(t){return this.values[t]}reset(){this.x=0,this.y=0}copy(t){return t||(t=new d),t.x=this.x,t.y=this.y,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&!(Math.abs(this.y-t.y)>e)}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y;return t*t+e*e}add(t){return this.x+=t.x,this.y+=t.y,this}subtract(t){return this.x-=t.x,this.y-=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}divide(t){return this.x/=t.x,this.y/=t.y,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t):(e=1/e,t.x*=e,t.y*=e,t)}multiplyMat2(t,e){return e||(e=this),t.multiplyVec2(this,e)}multiplyMat3(t,e){return e||(e=this),t.multiplyVec2(this,e)}static cross(t,e,s){s||(s=new p);const i=t.x,n=t.y,a=e.x,h=i*e.y-n*a;return s.x=0,s.y=0,s.z=h,s}static dot(t,e){return t.x*e.x+t.y*e.y}static distance(t,e){return Math.sqrt(this.squaredDistance(t,e))}static squaredDistance(t,e){const s=e.x-t.x,i=e.y-t.y;return s*s+i*i}static direction(t,e,s){s||(s=new d);const i=t.x-e.x,n=t.y-e.y;let a=Math.sqrt(i*i+n*n);return 0===a?(s.x=0,s.y=0,s):(a=1/a,s.x=i*a,s.y=n*a,s)}static mix(t,e,s,i){i||(i=new d);const n=t.x,a=t.y,h=e.x,r=e.y;return i.x=n+s*(h-n),i.y=a+s*(r-a),i}static sum(t,e,s){return s||(s=new d),s.x=t.x+e.x,s.y=t.y+e.y,s}static difference(t,e,s){return s||(s=new d),s.x=t.x-e.x,s.y=t.y-e.y,s}static product(t,e,s){return s||(s=new d),s.x=t.x*e.x,s.y=t.y*e.y,s}static quotient(t,e,s){return s||(s=new d),s.x=t.x/e.x,s.y=t.y/e.y,s}}d.zero=new d([0,0]),d.one=new d([1,1]);class m{constructor(t){this.values=new Float32Array(9),void 0!==t&&this.init(t)}at(t){return this.values[t]}init(t){for(let e=0;e<9;e++)this.values[e]=t[e];return this}reset(){for(let t=0;t<9;t++)this.values[t]=0}copy(t){t||(t=new m);for(let e=0;e<9;e++)t.values[e]=this.values[e];return t}all(){const t=[];for(let e=0;e<9;e++)t[e]=this.values[e];return t}row(t){return[this.values[3*t+0],this.values[3*t+1],this.values[3*t+2]]}col(t){return[this.values[t],this.values[t+3],this.values[t+6]]}equals(t,e=1e-5){for(let s=0;s<9;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}determinant(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],o=this.values[8];return t*(o*n-a*r)+e*(-o*i+a*h)+s*(r*i-n*h)}setIdentity(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=1,this.values[5]=0,this.values[6]=0,this.values[7]=0,this.values[8]=1,this}transpose(){const t=this.values[1],e=this.values[2],s=this.values[5];return this.values[1]=this.values[3],this.values[2]=this.values[6],this.values[3]=t,this.values[5]=this.values[7],this.values[6]=e,this.values[7]=s,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],o=this.values[8],u=o*n-a*r,l=-o*i+a*h,c=r*i-n*h;let v=t*u+e*l+s*c;return v?(v=1/v,this.values[0]=u*v,this.values[1]=(-o*e+s*r)*v,this.values[2]=(a*e-s*n)*v,this.values[3]=l*v,this.values[4]=(o*t-s*h)*v,this.values[5]=(-a*t+s*i)*v,this.values[6]=c*v,this.values[7]=(-r*t+e*h)*v,this.values[8]=(n*t-e*i)*v,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=this.values[4],h=this.values[5],r=this.values[6],o=this.values[7],u=this.values[8],l=t.at(0),c=t.at(1),v=t.at(2),d=t.at(3),m=t.at(4),y=t.at(5),p=t.at(6),x=t.at(7),w=t.at(8);return this.values[0]=l*e+c*n+v*r,this.values[1]=l*s+c*a+v*o,this.values[2]=l*i+c*h+v*u,this.values[3]=d*e+m*n+y*r,this.values[4]=d*s+m*a+y*o,this.values[5]=d*i+m*h+y*u,this.values[6]=p*e+x*n+w*r,this.values[7]=p*s+x*a+w*o,this.values[8]=p*i+x*h+w*u,this}multiplyVec2(t,e){const s=t.x,i=t.y;return e?(e.xy=[s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]],e):new d([s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]])}multiplyVec3(t,e){const s=t.x,i=t.y,n=t.z;return e?(e.xyz=[s*this.values[0]+i*this.values[3]+n*this.values[6],s*this.values[1]+i*this.values[4]+n*this.values[7],s*this.values[2]+i*this.values[5]+n*this.values[8]],e):new p([s*this.values[0]+i*this.values[3]+n*this.values[6],s*this.values[1]+i*this.values[4]+n*this.values[7],s*this.values[2]+i*this.values[5]+n*this.values[8]])}toMat4(t){return t?(t.init([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1]),t):new v([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1])}toQuat(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],o=this.values[8],u=t-n-o,l=n-t-o,c=o-t-n;let v=0,d=t+n+o;u>d&&(d=u,v=1),l>d&&(d=l,v=2),c>d&&(d=c,v=3);const m=.5*Math.sqrt(d+1),p=.25/m,x=new y;switch(v){case 0:x.w=m,x.x=(a-r)*p,x.y=(h-s)*p,x.z=(e-i)*p;break;case 1:x.w=(a-r)*p,x.x=m,x.y=(e+i)*p,x.z=(h+s)*p;break;case 2:x.w=(h-s)*p,x.x=(e+i)*p,x.y=m,x.z=(a+r)*p;break;case 3:x.w=(e-i)*p,x.x=(h+s)*p,x.y=(a+r)*p,x.z=m}return x}rotate(t,e){let s=e.x,i=e.y,n=e.z,a=Math.sqrt(s*s+i*i+n*n);if(!a)return null;1!==a&&(a=1/a,s*=a,i*=a,n*=a);const h=Math.sin(t),r=Math.cos(t),o=1-r,u=this.values[0],l=this.values[1],c=this.values[2],v=this.values[4],d=this.values[5],m=this.values[6],y=this.values[8],p=this.values[9],x=this.values[10],w=s*s*o+r,f=i*s*o+n*h,g=n*s*o-i*h,b=s*i*o-n*h,z=i*i*o+r,k=n*i*o+s*h,I=s*n*o+i*h,C=i*n*o-s*h,E=n*n*o+r;return this.values[0]=u*w+v*f+y*g,this.values[1]=l*w+d*f+p*g,this.values[2]=c*w+m*f+x*g,this.values[3]=u*b+v*z+y*k,this.values[4]=l*b+d*z+p*k,this.values[5]=c*b+m*z+x*k,this.values[6]=u*I+v*C+y*E,this.values[7]=l*I+d*C+p*E,this.values[8]=c*I+m*C+x*E,this}static product(t,e,s){const i=t.at(0),n=t.at(1),a=t.at(2),h=t.at(3),r=t.at(4),o=t.at(5),u=t.at(6),l=t.at(7),c=t.at(8),v=e.at(0),d=e.at(1),y=e.at(2),p=e.at(3),x=e.at(4),w=e.at(5),f=e.at(6),g=e.at(7),b=e.at(8);return s?(s.init([v*i+d*h+y*u,v*n+d*r+y*l,v*a+d*o+y*c,p*i+x*h+w*u,p*n+x*r+w*l,p*a+x*o+w*c,f*i+g*h+b*u,f*n+g*r+b*l,f*a+g*o+b*c]),s):new m([v*i+d*h+y*u,v*n+d*r+y*l,v*a+d*o+y*c,p*i+x*h+w*u,p*n+x*r+w*l,p*a+x*o+w*c,f*i+g*h+b*u,f*n+g*r+b*l,f*a+g*o+b*c])}}m.identity=(new m).setIdentity();class y{constructor(t){this.values=new Float32Array(4),void 0!==t&&(this.xyzw=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get w(){return this.values[3]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}get xyzw(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set w(t){this.values[3]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set xyzw(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}at(t){return this.values[t]}reset(){for(let t=0;t<4;t++)this.values[t]=0}copy(t){t||(t=new y);for(let e=0;e<4;e++)t.values[e]=this.values[e];return t}roll(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(t*e+i*s),i*i+t*t-e*e-s*s)}pitch(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(e*s+i*t),i*i-t*t-e*e+s*s)}yaw(){return Math.asin(2*(this.x*this.z-this.w*this.y))}equals(t,e=1e-5){for(let s=0;s<4;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}setIdentity(){return this.x=0,this.y=0,this.z=0,this.w=1,this}calculateW(){const t=this.x,e=this.y,s=this.z;return this.w=-Math.sqrt(Math.abs(1-t*t-e*e-s*s)),this}inverse(){const t=y.dot(this,this);if(!t)return this.xyzw=[0,0,0,0],this;const e=t?1/t:0;return this.x*=-e,this.y*=-e,this.z*=-e,this.w*=e,this}conjugate(){return this.values[0]*=-1,this.values[1]*=-1,this.values[2]*=-1,this}length(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.sqrt(t*t+e*e+s*s+i*i)}normalize(t){t||(t=this);const e=this.x,s=this.y,i=this.z,n=this.w;let a=Math.sqrt(e*e+s*s+i*i+n*n);return a?(a=1/a,t.x=e*a,t.y=s*a,t.z=i*a,t.w=n*a,t):(t.x=0,t.y=0,t.z=0,t.w=0,t)}add(t){for(let e=0;e<4;e++)this.values[e]+=t.at(e);return this}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=t.x,h=t.y,r=t.z,o=t.w;return this.x=e*o+n*a+s*r-i*h,this.y=s*o+n*h+i*a-e*r,this.z=i*o+n*r+e*h-s*a,this.w=n*o-e*a-s*h-i*r,this}multiplyVec3(t,e){e||(e=new p);const s=t.x,i=t.y,n=t.z,a=this.x,h=this.y,r=this.z,o=this.w,u=o*s+h*n-r*i,l=o*i+r*s-a*n,c=o*n+a*i-h*s,v=-a*s-h*i-r*n;return e.x=u*o+v*-a+l*-r-c*-h,e.y=l*o+v*-h+c*-a-u*-r,e.z=c*o+v*-r+u*-h-l*-a,e}toMat3(t){t||(t=new m);const e=this.x,s=this.y,i=this.z,n=this.w,a=e+e,h=s+s,r=i+i,o=e*a,u=e*h,l=e*r,c=s*h,v=s*r,d=i*r,y=n*a,p=n*h,x=n*r;return t.init([1-(c+d),u+x,l-p,u-x,1-(o+d),v+y,l+p,v-y,1-(o+c)]),t}toMat4(t){t||(t=new v);const e=this.x,s=this.y,i=this.z,n=this.w,a=e+e,h=s+s,r=i+i,o=e*a,u=e*h,l=e*r,c=s*h,d=s*r,m=i*r,y=n*a,p=n*h,x=n*r;return t.init([1-(c+m),u+x,l-p,0,u-x,1-(o+m),d+y,0,l+p,d-y,1-(o+c),0,0,0,0,1]),t}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w}static sum(t,e,s){return s||(s=new y),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s.w=t.w+e.w,s}static product(t,e,s){s||(s=new y);const i=t.x,n=t.y,a=t.z,h=t.w,r=e.x,o=e.y,u=e.z,l=e.w;return s.x=i*l+h*r+n*u-a*o,s.y=n*l+h*o+a*r-i*u,s.z=a*l+h*u+i*o-n*r,s.w=h*l-i*r-n*o-a*u,s}static cross(t,e,s){s||(s=new y);const i=t.x,n=t.y,a=t.z,h=t.w,r=e.x,o=e.y,u=e.z,l=e.w;return s.x=h*u+a*l+i*o-n*r,s.y=h*l-i*r-n*o-a*u,s.z=h*r+i*l+n*u-a*o,s.w=h*o+n*l+a*r-i*u,s}static shortMix(t,e,s,i){if(i||(i=new y),s<=0)return i.xyzw=t.xyzw,i;if(s>=1)return i.xyzw=e.xyzw,i;let n=y.dot(t,e);const a=e.copy();let h,r;if(n<0&&(a.inverse(),n=-n),n>.9999)h=1-s,r=0+s;else{const t=Math.sqrt(1-n*n),e=Math.atan2(t,n),i=1/t;h=Math.sin((1-s)*e)*i,r=Math.sin((0+s)*e)*i}return i.x=h*t.x+r*a.x,i.y=h*t.y+r*a.y,i.z=h*t.z+r*a.z,i.w=h*t.w+r*a.w,i}static mix(t,e,s,i){i||(i=new y);const n=t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w;if(Math.abs(n)>=1)return i.xyzw=t.xyzw,i;const a=Math.acos(n),h=Math.sqrt(1-n*n);if(Math.abs(h)<.001)return i.x=.5*t.x+.5*e.x,i.y=.5*t.y+.5*e.y,i.z=.5*t.z+.5*e.z,i.w=.5*t.w+.5*e.w,i;const r=Math.sin((1-s)*a)/h,o=Math.sin(s*a)/h;return i.x=t.x*r+e.x*o,i.y=t.y*r+e.y*o,i.z=t.z*r+e.z*o,i.w=t.w*r+e.w*o,i}static fromAxisAngle(t,e,s){s||(s=new y),e*=.5;const i=Math.sin(e);return s.x=t.x*i,s.y=t.y*i,s.z=t.z*i,s.w=Math.cos(e),s}}y.identity=(new y).setIdentity();class p{constructor(t){this.values=new Float32Array(3),void 0!==t&&(this.xyz=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}at(t){return this.values[t]}reset(){this.x=0,this.y=0,this.z=0}copy(t){return t||(t=new p),t.x=this.x,t.y=this.y,t.z=this.z,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&!(Math.abs(this.z-t.z)>e))}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y,s=this.z;return t*t+e*e+s*s}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}subtract(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e.z*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t.z=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t)}multiplyByMat3(t,e){return e||(e=this),t.multiplyVec3(this,e)}multiplyByQuat(t,e){return e||(e=this),t.multiplyVec3(this,e)}toQuat(t){t||(t=new y);const e=new p,s=new p;return e.x=Math.cos(.5*this.x),s.x=Math.sin(.5*this.x),e.y=Math.cos(.5*this.y),s.y=Math.sin(.5*this.y),e.z=Math.cos(.5*this.z),s.z=Math.sin(.5*this.z),t.x=s.x*e.y*e.z-e.x*s.y*s.z,t.y=e.x*s.y*e.z+s.x*e.y*s.z,t.z=e.x*e.y*s.z-s.x*s.y*e.z,t.w=e.x*e.y*e.z+s.x*s.y*s.z,t}static cross(t,e,s){s||(s=new p);const i=t.x,n=t.y,a=t.z,h=e.x,r=e.y,o=e.z;return s.x=n*o-a*r,s.y=a*h-i*o,s.z=i*r-n*h,s}static dot(t,e){const s=t.x,i=t.y,n=t.z;return s*e.x+i*e.y+n*e.z}static distance(t,e){e.x,t.x,e.y,t.y,e.z,t.z;return Math.sqrt(this.squaredDistance(t,e))}static squaredDistance(t,e){const s=e.x-t.x,i=e.y-t.y,n=e.z-t.z;return s*s+i*i+n*n}static direction(t,e,s){s||(s=new p);const i=t.x-e.x,n=t.y-e.y,a=t.z-e.z;let h=Math.sqrt(i*i+n*n+a*a);return 0===h?(s.x=0,s.y=0,s.z=0,s):(h=1/h,s.x=i*h,s.y=n*h,s.z=a*h,s)}static mix(t,e,s,i){return i||(i=new p),i.x=t.x+s*(e.x-t.x),i.y=t.y+s*(e.y-t.y),i.z=t.z+s*(e.z-t.z),i}static sum(t,e,s){return s||(s=new p),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s}static difference(t,e,s){return s||(s=new p),s.x=t.x-e.x,s.y=t.y-e.y,s.z=t.z-e.z,s}static product(t,e,s){return s||(s=new p),s.x=t.x*e.x,s.y=t.y*e.y,s.z=t.z*e.z,s}static quotient(t,e,s){return s||(s=new p),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s}}p.zero=new p([0,0,0]),p.one=new p([1,1,1]),p.up=new p([0,1,0]),p.right=new p([1,0,0]),p.forward=new p([0,0,1]);class x extends(l()){constructor(t){super(),this.context=t,this.scene=this.context.getContext().createGain(),this.listener=this.context.getContext().listener,this.init()}init(){}createSource(){const t=this.context.getContext().createPanner();return t.panningModel="HRTF",t.distanceModel="linear",t.maxDistance=20,t.refDistance=2,t.connect(this.scene),t}getOutput(){return this.scene}getInput(){return this.scene}setListenerPosition(t,e,s){this.listener.setPosition(t,e,s)}setListenerOrientation(t,e){let s=new p([t.x,t.y,t.z]),i=s.copy();p.cross(i,new p([e.x,e.y,e.z]),i),p.cross(i,s,i),s.normalize(),i.normalize(),this.listener.setOrientation(s.x,s.y,s.z,i.x,i.y,i.z)}}class w{constructor(t,e,s,i){this.effects=[],this.context=t,this.graph=e,this.inputNode=s,this.outputNode=i,this.updateConnections()}applyEffect(t){this.effects.push(t),this.updateConnections()}removeEffect(t){this.effects.forEach((e=>{t===e&&e.disconnect()})),this.effects=this.effects.filter((e=>t!==e)),this.updateConnections()}updateConnections(){if(0==this.effects.length)return void this.inputNode.connect(this.outputNode);let t=null,e=null;this.effects.forEach((s=>{t=s,e?t.connectInput(e.getOutput()):t.connectInput(this.inputNode),e=t})),t&&t.connectOutput(this.outputNode)}}class f{constructor(t,e,s=!1){this.scene=t,this.context=e,this.swapChannels=s,this.init()}init(){this.effectsBus=this.context.createGain(),this.worldBus=this.context.createGain(),this.secondaryBus=this.context.createGain(),this.master=this.context.createGain(),this.scene.getOutput().connect(this.worldBus),this.worldBus.connect(this.effectsBus),this.effects=new w(this.context,this,this.effectsBus,this.master),this.secondaryBus.connect(this.master),this.swapChannels?(this.channelSplitter=this.context.getContext().createChannelSplitter(2),this.channelMerger=this.context.getContext().createChannelMerger(2),this.master.connect(this.channelSplitter),this.channelSplitter.connect(this.channelMerger,0,1),this.channelSplitter.connect(this.channelMerger,1,0),this.channelMerger.connect(this.context.getOutputDestination())):this.master.connect(this.context.getOutputDestination())}connectToMaster(t){t.connect(this.master)}connectToUI(t){t.connect(this.secondaryBus)}applyEffect(t){this.effects.applyEffect(t)}removeEffect(t){this.effects.removeEffect(t)}}var g;!function(t){t[t.WorldSource=0]="WorldSource",t[t.UISource=1]="UISource",t[t.MasterSource=2]="MasterSource"}(g||(g={}));class b{constructor(t,e,s,i=null,n=g.WorldSource){this.position={x:0,y:0,z:0},this.buffer=i,this.context=s,this.scene=e,this.graph=t,this.type=n,this.playbackRate=1,this.volume=1,this.init()}init(){this.gain=this.context.createGain(),this.stop=this.stop.bind(this)}getBuffer(){return this.buffer}setBuffer(t){this.buffer=t,this.playOnLoad&&(this.play(),this.playOnLoad=!1)}play(t=0,e=0,s=(this.buffer?this.buffer.duration:0)){this.playing&&this.node&&this.stop(),this.buffer?(this.node||(this.node=this.context.createBufferSource(),this.node.buffer=this.buffer,this.createConnections()),this.node&&(this.node.playbackRate.value=this.playbackRate,this.node.start(t,e,s),this.node.loop=this.looping,this.playing=!0,this.sceneNode&&this.sceneNode.setPosition(this.position.x,this.position.y,this.position.z),this.node.addEventListener("ended",this.stop))):this.playOnLoad=!0}setPosition(t,e,s){this.position={x:t,y:e,z:s},this.sceneNode&&this.sceneNode.setPosition(t,e,s)}setPlaybackRate(t){this.playbackRate=t,this.node&&(this.node.playbackRate.value=t)}getPlaybackRate(){return this.playbackRate}setVolume(t){this.volume=t,this.gain&&(this.gain.gain.value=t)}getVolume(){return this.volume}createConnections(){switch(this.type){case g.WorldSource:this.sceneNode||(this.sceneNode=this.scene.createSource()),this.node.connect(this.gain),this.gain.connect(this.sceneNode);break;case g.UISource:this.node.connect(this.gain),this.graph.connectToUI(this.gain);break;default:this.node.connect(this.gain),this.graph.connectToMaster(this.gain)}}stop(){this.playing=!1,this.node&&(this.node.removeEventListener("ended",this.stop),this.node.stop(),this.node.disconnect(),this.node=null,this.playing=!1,this.sceneNode&&(this.sceneNode.disconnect(),this.sceneNode=null))}destroy(){this.stop(),this.node=null,this.sceneNode=null,this.buffer=null,this.context=null,this.graph=null,this.scene=null}loop(t){this.looping=t,this.node&&(this.node.loop=t)}fadeOut(t){this.gain.gain.setValueAtTime(this.getVolume(),this.context.getContext().currentTime),this.node&&(this.gain.gain.exponentialRampToValueAtTime(1e-4,this.context.getContext().currentTime+t),setTimeout((()=>this.stop()),1e3*t))}fadeIn(t){this.gain.gain.setValueAtTime(1e-4,this.context.getContext().currentTime),this.node||this.play(),this.gain.gain.exponentialRampToValueAtTime(this.volume,this.context.getContext().currentTime+t)}}class z{constructor(t,e=null,s=null){this.name=t,this.data=e,this.decodedData=s}getData(){return this.data}setData(t){this.data=t}getDecodedData(){return this.decodedData}setDecodedData(t){this.decodedData=this.decodedData}getName(){return this.name}setName(t){this.name=t}}var k=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{o(i.next(t))}catch(t){a(t)}}function r(t){try{o(i.throw(t))}catch(t){a(t)}}function o(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}o((i=i.apply(t,e||[])).next())}))};class I{get(t){return k(this,void 0,void 0,(function*(){const e=yield fetch(t);return yield e.arrayBuffer()}))}}var C=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{o(i.next(t))}catch(t){a(t)}}function r(t){try{o(i.throw(t))}catch(t){a(t)}}function o(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}o((i=i.apply(t,e||[])).next())}))};class E extends(l()){constructor(t,e=new I,s=512){super(),this.loader=e,this.data={},this.maxData=s,this.context=t}get(t){return C(this,void 0,void 0,(function*(){if(this.data[t])return this.data[t].getDecodedData();{const e=yield this.loader.get(t),s=yield this.context.decodeAudioData(e),i=new z(t,e,s);Object.keys(this.data).length;return this.maxData,this.data[t]=i,i.getDecodedData()}}))}clear(){this.data={}}}class M extends class{constructor(t,e,s){this.graph=e,this.context=t,this.effectParams=s}connectOutput(t){this.effectNode.connect(t)}connectInput(t){this.inputNode=t,this.effectNode&&this.inputNode.connect(this.effectNode)}getOutput(){return this.effectNode}disconnect(){this.inputNode.disconnect(),this.effectNode.disconnect()}}{constructor(t,e,s){super(t,e,s),console.log("Creating convolver"),this.effectNode=this.context.getContext().createConvolver(),this.effectNode.buffer=this.effectParams.buffer}connectInput(t){this.channelSplitter=this.context.getContext().createChannelSplitter(2),this.channelMerger=this.context.getContext().createChannelMerger(2),this.channelSplitter.connect(this.channelMerger,0,0),this.channelSplitter.connect(this.channelMerger,1,0),this.channelSplitter.connect(this.channelMerger,0,1),this.channelSplitter.connect(this.channelMerger,1,1),t.connect(this.channelSplitter),this.channelMerger.connect(this.effectNode),this.inputNode=t}}class T{constructor(t,e,s,i,n=g.MasterSource){this.graph=t,this.scene=e,this.context=s,this.element=i,this.type=n,this.position={x:0,y:0,z:0},this.init()}init(){this.node=this.context.createMediaElementSource(this.element),this.gain=this.context.createGain(),this.createConnections(),this.element.addEventListener("canplay",(t=>{this.canPlay=!0,this.playOnAvailable&&this.play()}))}play(t=0,e=0,s=0){this.canPlay&&this.element.play(),this.playOnAvailable=!0}stop(){this.element.pause()}getVolume(){return this.element.volume}setVolume(t){this.element.volume=t}getPlaybackRate(){return this.element.playbackRate}setPlaybackRate(t){this.element.playbackRate=t}createConnections(){if(this.type===g.WorldSource)this.sceneNode||(this.sceneNode=this.scene.createSource()),this.node.connect(this.gain),this.gain.connect(this.sceneNode);else this.node.connect(this.gain),this.graph.connectToMaster(this.gain)}setPosition(t,e,s){this.position={x:t,y:e,z:s},this.sceneNode&&this.sceneNode.setPosition(t,e,s)}destroy(){this.stop(),this.element=null,this.graph=null,this.context=null,this.node=null,this.sceneNode=null,this.scene=null}loop(t){this.element.loop=!0}fadeIn(t){this.gain.gain.setValueAtTime(1e-4,this.context.getContext().currentTime),this.node||this.play(),this.gain.gain.exponentialRampToValueAtTime(this.getVolume(),this.context.getContext().currentTime+t)}fadeOut(t){this.gain.gain.setValueAtTime(this.getVolume(),this.context.getContext().currentTime),this.node&&(this.gain.gain.exponentialRampToValueAtTime(1e-4,this.context.getContext().currentTime+t),setTimeout((()=>this.stop()),1e3*t))}}var D=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{o(i.next(t))}catch(t){a(t)}}function r(t){try{o(i.throw(t))}catch(t){a(t)}}function o(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}o((i=i.apply(t,e||[])).next())}))};class A{constructor(t=new I){this.loader=t,this.environmentImpulse=null,this.context=new o,this.scene=new x(this.context),this.graph=new f(this.scene,this.context,!1),this.dataPool=new E(this.context,this.loader)}load(t,e=g.WorldSource){return D(this,void 0,void 0,(function*(){const s=yield this.dataPool.get(t);return this.createSource(e,s)}))}loadImmediate(t,e=g.WorldSource){const s=new b(this.graph,this.scene,this.context,null,e);return this.dataPool.get(t).then((t=>{s.setBuffer(t)})),s}stream(t,e=g.MasterSource){const s=new Audio(t);s.crossOrigin="anonymous",s.volume=1;return new T(this.graph,this.scene,this.context,s,e)}createSource(t,e){return new b(this.graph,this.scene,this.context,e)}setEnvironmentImpulse(t){return D(this,void 0,void 0,(function*(){if(this.environmentImpulse&&this.graph.removeEffect(this.environmentImpulse),null===t)return;const e=yield this.dataPool.get(t);this.environmentImpulse=new M(this.context,this.graph,{buffer:e}),this.graph.applyEffect(this.environmentImpulse)}))}setListenerPosition(t,e,s){this.scene.setListenerPosition(t,e,s)}setListenerOrientation(t,e){this.scene.setListenerOrientation(t,e)}clearDataPool(){this.dataPool.clear()}}class N{constructor(){this.res=new A,this.ambience=null,this.music=null,this.ambienceVolume=1,this.musicVolume=1,this.sfxVolume=1,this.previousAmbience="",this.previousMusic=""}play(t){const e=this.res.loadImmediate(t);e.setVolume(this.sfxVolume),e.play()}async setAmbience(t){if(t!==this.previousAmbience){if(this.ambience){const t=this.ambience;this.ambience=null,setTimeout((()=>t.fadeOut(6)),1500),setTimeout((()=>t.destroy()),6e3)}t&&(this.previousAmbience=t,this.ambience=this.res.stream(t,0),this.ambience.setVolume(this.ambienceVolume),this.ambience.play(),this.ambience.loop(!0),this.ambience.fadeIn(3))}}setMusic(t){if(t!==this.previousMusic){if(this.music){const t=this.music;setTimeout((()=>t.fadeOut(2)),500),setTimeout((()=>t.destroy()),2e3)}t&&(this.previousMusic=t,this.music=this.res.stream(t,1),this.music.setVolume(this.musicVolume),this.music.play(),this.music.fadeIn(2))}}setImpulse(t){this.res.setEnvironmentImpulse(t)}setMusicVolume(t){this.musicVolume=t,this.music&&this.music.setVolume(t)}setAmbienceVolume(t){this.ambienceVolume=t,this.ambience&&this.ambience.setVolume(t)}setSFXVolume(t){this.sfxVolume=t}}class S{constructor(){this.tts=new h(new n),this.history=document.getElementById("output-area"),this.sound=new N}say(t){if(""===t)return;this.sound.play("assets/scroll.wav");const e=document.createElement("p");t.split("\n").forEach((t=>{e.appendChild(document.createTextNode(t)),e.appendChild(document.createElement("br"))})),this.history.appendChild(e)}play(t){this.sound.play(t)}setAmbience(t){return this.sound.setAmbience(t)}setMusic(t){return this.sound.setMusic(t)}setImpulse(t){this.sound.setImpulse(t)}}class R{constructor(t,e){this.handler=t,this.output=e,this.echoInput=!0,this.inputField=document.getElementById("input-area"),this.init()}setEcho(t){this.echoInput=t}init(){this.inputField.addEventListener("keydown",(t=>{if(13==t.which){const t=this.inputField.value;this.inputField.value="",this.echoInput&&this.output.say(`> ${t}`),this.handler.doCommand(t)}}))}}const V=[[["look","l"],function(t,e){if(1==t.length)e.examineRoom();else{const s=e.getRoom(e.player.currentRoom).getItems();let i=null;for(let e of s)if(e.name.includes(t[1])){i=e;break}if(!i){const s=e.player.getInventory();for(let e of s)if(e.name.includes(t[1])){i=e;break}}i?(e.output.say(`You look at ${i.name}.`),e.output.say(i.description)):e.output.say(`I could not find a ${t[1]}.`)}}],[["use","interact"],async function(t,e){const s=e.getRoom(e.player.currentRoom).getItems();let i=null;for(let e of s)if(e.name.includes(t[1])){i=e;break}if(!i){const s=e.player.getInventory();for(let e of s)if(e.name.includes(t[1])){i=e;break}}i?await i.onUse():e.output.say(`I could not find a ${t[1]}.`)}],[["take","get"],function(t,e){const s=e.getRoom(e.player.currentRoom),i=s.getItems();let n=null;for(let e of i)if(e.name.includes(t[1])){n=e;break}n?n.takeable?(s.removeItem(n.id),e.player.addItem(n.id),e.print(`You take ${n.name}.`),n.onTake()):e.print(`You can't take ${n.name}.`):e.print(`You can't find any ${t[1]}.`)}],[["drop","put"],function(t,e){const s=e.getRoom(e.player.currentRoom),i=e.player.getInventory();let n=null;for(let e of i)if(e.name.includes(t[1])){n=e;break}n?(e.player.removeItem(n.id),s.addItem(n.id),e.print(`You set ${n.name} down on the floor.`),n.onDrop()):e.print(`You're not carrying a ${t[1]}`)}],["echo",function(t,e){"on"!=t[1]&&"off"!=t[1]?e.print("Usage: echo "):(e.setInputEcho("on"==t[1]),e.print(`Command echo is now ${t[1]}.`))}],["save",function(t,e){e.print("Saving game..."),e.save()}],["load",function(t,e){e.print("Loading game..."),e.load()}],["volume",function(t,e){if(t.length<3)return e.print("Usage: volume <0-100>");const s=parseInt(t[2]);if(s>100||s<1)return e.print("No higher than 100 and no less than 1.");if("sfx"==t[1])e.output.sound.setSFXVolume(s/100);else if("music"==t[1])e.output.sound.setMusicVolume(s/100);else{if("ambience"!=t[1])return e.print("Invalid channel. Either ambience, sfx or music is allowed.");e.output.sound.setAmbienceVolume(s/100)}e.print(`${t[1]} volume set to ${s}%`)}],[["i","inv","inventory"],function(t,e){const s=e.player.getInventory();if(s.length<1)return e.print("You're not carrying anything.");let i="You are carrying ";s.forEach(((t,e)=>{ethis.commands.set(t,e))):this.commands.set(t,e)}addCommands(t){t.forEach((t=>{this.addCommand(t[0],t[1])}))}addDefaultCommands(){this.addCommands(V)}matchDirection(t){for(let e of L)if(e[0]==t)return e[1]}}class P{constructor(t){this.context=t}save(){const t={state:this.context.state.serialize(),itemLocations:this.serializeItemLocations(),player:{currentRoom:this.context.player.currentRoom,inventory:this.context.player.inventory},volumes:{music:this.context.output.sound.musicVolume,sfx:this.context.output.sound.sfxVolume,ambience:this.context.output.sound.ambienceVolume}};localStorage.setItem("save",JSON.stringify(t))}load(){const t=JSON.parse(localStorage.getItem("save"));this.context.state.deserialize(t.state),this.deserializeItemLocations(t.itemLocations),this.deserializePlayer(t.player),this.context.output.sound.setSFXVolume(t.volumes.sfx),this.context.output.sound.setMusicVolume(t.volumes.music),this.context.output.sound.setAmbienceVolume(t.volumes.ambience)}serializeItemLocations(){return this.context.rooms.map((t=>[t.id,t.objects]))}deserializeItemLocations(t){t.forEach((t=>{this.context.getRoom(t[0]).objects=t[1]}))}deserializePlayer(t){this.context.move(t.currentRoom),this.context.player.inventory=t.inventory}}class B{constructor(s=!0){this.newGame=s,this.player=new e,this.state=t,this.rooms=[],this.items=[],this.output=new S,this.commandHandler=new O(this),this.input=new R(this.commandHandler,this.output),this.visitedRooms=new Map,this.interval=null,this.Serialization=new P(this)}print(t){this.output.say(t)}async tell(t,e){for(let s of t)this.print(s),await this.wait(e)}init(s){this.rooms=s.rooms.map((t=>(t.context=this,t))),this.items=s.items.map((t=>(t.context=this,t))),this.state=s.state||t,this.commandHandler.addCommands(s.commands),this.player=new e,this.player.context=this,this.newGame?this.move(this.player.currentRoom):this.Serialization.load(),this.start()}advanceTick(){this.items.forEach((t=>t.onTick())),this.rooms.forEach((t=>t.onTick()))}start(){this.interval=setInterval((()=>this.advanceTick()),1e3)}stop(){clearInterval(this.interval),this.interval=null}examineRoom(){const t=this.getRoom(this.player.currentRoom);this.output.say(t.title),this.visitedRooms.get(this.player.currentRoom)||""==t.firstDescription?this.output.say(t.description):this.output.say(t.firstDescription),this.examineItems(),this.examineExits()}examineItems(){const t=this.getRoom(this.player.currentRoom).getItems();if(t.length<1)return;let e="You see ";t.forEach(((s,i)=>{i{ie.id==t))}getItem(t){return this.items.find((e=>e.id==t))}wait(t){return new Promise(((e,s)=>{setTimeout(e,t)}))}async move(t){const e=this.getRoom(this.player.currentRoom),s=this.getRoom(t);e.canExit()&&s.canEnter()&&(await e.onExit(),await s.onEnter(),this.player.currentRoom=t,this.examineRoom(),this.visitedRooms.set(t,!0))}enableCommandInput(t){this.commandHandler.enabled=t}setInputEcho(t){this.input.setEcho(t)}save(){this.Serialization.save()}load(){this.Serialization.load()}}class q{constructor(){this.id="room",this.title="A room",this.description="You see nothing special",this.firstDescription="",this.objects=[],this.exits=new Map,this.enterCallback=null,this.exitCallback=null,this.canEnterLogic=null,this.canExitLogic=null,this.tickCallback=null,this.context=null,this.music=null,this.ambience=null,this.impulse=null}async onEnter(){if(this.context.output.setMusic(this.music),this.context.output.setAmbience(this.ambience),this.context.output.setImpulse(this.impulse),this.enterCallback)return this.enterCallback(this.context)}async onExit(){if(this.exitCallback)return this.exitCallback(this.context)}canEnter(){return!this.canEnterLogic||this.canEnterLogic(this.context)}canExit(){return!this.canExitLogic||this.canExitLogic(this.context)}addExit(t,e){return this.exits.set(t,e),this}getExit(t){return this.exits.get(t)}addItem(t){this.objects.push(t)}removeItem(t){this.objects=this.objects.filter((e=>e!=t))}addEnterCallback(t){this.enterCallback=t.bind(this)}addExitCallback(t){this.exitCallback=t.bind(this)}addEnterLogic(t){this.canEnterLogic=t.bind(this)}addExitLogic(t){this.canExitLogic=t.bind(this)}addTickCallback(t){this.tickCallback=t.bind(this)}getItems(){return this.objects.map((t=>this.context.getItem(t)))}async onTick(){if(this.tickCallback)return this.tickCallback(this.context)}}class Y{constructor(){this.room=new q}withID(t){return this.room.id=t,this}withTitle(t){return this.room.title=t,this}withFirstDescription(t){return this.room.firstDescription=t,this}withDescription(t){return this.room.description=t,this}withExit(t,e){return this.room.addExit(t,e),this}withItem(t){return this.room.addItem(t),this}withEnterCallback(t){return this.room.addEnterCallback(t),this}withExitCallback(t){return this.room.addExitCallback(t),this}withEnterLogic(t){return this.room.addEnterLogic(t),this}withExitLogic(t){return this.room.addExitLogic(t),this}withTick(t){return this.room.addTickCallback(t),this}withMusic(t){return this.room.music=t,this}withAmbience(t){return this.room.ambience=t,this}withImpulse(t){return this.room.impulse=t,this}create(){return this.room}}const _=(new Y).withID("start").withTitle("A small spherical alcove").withFirstDescription("You find yourself in a small, spherical alcove. It feels cold and dark, save from a dim glow which seems to be eluminating the area from the north.\nThe surface appears to be unnaturally smooth, as if melted away using acidic means. It's warm to the touch.").withDescription("A spherical alcove. The smooth surface appears to be melted away using acidic means. There's a dim glow shining in from the north.").withExit("north","tunnel1").withEnterCallback((async function(t){if(t.state.get("start.awoken"))return;const{output:e,wait:s}=t;t.enableCommandInput(!1),await t.tell(["You slowly wake up.","you're not sure if you were ever conscious about waking up, but right now, you're clearly aware that you were previously asleep.","In fact, a lot of your thoughts seem foreign to you.","You're not sure how to feel about this.","God the headache...","OK, time to think about this.","Huh, something else you never did before.","Where are you?","You reach up and touch your head.","OK, that seems to be in order. Your antennae are still there, your mouth parts seem in tact...","Hmm. All this is strange.","No use sitting around. You get up and slowly examine your surroundings."],3e3),t.enableCommandInput(!0),t.state.set("start.awoken",!0)})).create(),U=(new Y).withID("tunnel1").withTitle("A long dark tunnel").withFirstDescription("You slowly make your way out of the little alcove, heading north into a smooth, tube-shaped tunnel.\nYou notice razor thin threads coming out of the ceiling, weaving and slithering along the length of the tunnel towards the north. Thery provide a dim glow, which must have been the light you saw before.").withDescription("A tube-shaped tunnel. Thin threads seem to exit the ceiling here, eminating a soft glow.").withExit("south","start").withExit("north","central1").create(),F=(new Y).withID("central1").withTitle("A large spherical chamber").withFirstDescription("You exit the tunnel into a large, spherical chamber.\nThere are many more threads across the walls and ceiling here, the glow enveloping you fully in its unnatural light.\nThe chamber appears to be large, able to fit hundreds of you inside.\nTo the northeast, northwest, southeast and southwest you notice large statues representing ants. Threads seem to lead right into them.").withDescription("A large, spherical chamber. Glowing threads criss-cross the walls and ceiling. Around you, statues of ants.").withExit("northwest","statue1").withExit("northeast","statue2").withExit("southwest","statue3").withExit("southeast","statue4").withExit("south","tunnel1").create(),$=(new Y).withID("statue1").withTitle("The northwestern part of the central chamber").withFirstDescription("You walk over to the northwestern part of the central chamber.\n It is almost entirely taken up by a huge ant statue. One of its six legs are extended outwards, attached to which is a small, round device.").withDescription("").withExit("southeast","central1").withItem("statue1").create(),j=(new Y).withID("statue2").withTitle("The northeastern part of the central chamber").withFirstDescription("You walk over to the northeastern part of the central chamber.\n It is almost entirely taken up by a huge ant statue. Two of its six legs are extended outwards, attached to which is a large, rectangular device.").withDescription("").withExit("southwest","central1").withItem("statue2").create(),G=(new Y).withID("statue3").withTitle("The southwestern part of the central chamber").withFirstDescription("You walk over to the southwestern part of the central chamber.\n It is almost entirely taken up by a huge ant statue. Three of its six legs are extended outwards, attached to which is a round stone tablet.").withDescription("").withExit("northeast","central1").withItem("statue3").create();class W{constructor(){this.id="item",this.name="An item",this.description="You see nothing special about this item",this.usable=!0,this.takeable=!0,this.useCallback=null,this.takeCallback=null,this.dropCallback=null,this.tickCallback=null,this.context=null}async onUse(){if(this.useCallback)return this.useCallback(this.context)}async onTake(){if(this.takeCallback)return this.takeCallback(this.context)}async onDrop(){if(this.dropCallback)return this.dropCallback(this.context)}async onTick(){if(this.tickCallback)return this.tickCallback(this.context)}addUseCallback(t){this.useCallback=t.bind(this)}addTakeCallback(t){this.takeCallback=t.bind(this)}addDropCallback(t){this.dropCallback=t.bind(this)}addTickCallback(t){this.tickCallback=t.bind(this)}}class H{constructor(){this.item=new W}withID(t){return this.item.id=t,this}withName(t){return this.item.name=t,this}withDescription(t){return this.item.description=t,this}isUsable(t){return this.item.usable=t,this}isTakeable(t){return this.item.takeable=t,this}withUseCallback(t){return this.item.addUseCallback(t),this}withTakeCallback(t){return this.item.addTakeCallback(t),this}withDropCallback(t){return this.item.addDropCallback(t),this}withTickCallback(t){return this.item.addTickCallback(t),this}create(){return this.item}}const Q=(new H).withID("statue4").withName("a huge ant statue").withDescription("Before you is a big statue of an ant, in the process of falling over. All of its legs are bent at the joints.").isTakeable(!1).isUsable(!0).withUseCallback((async function(t){t.print("You can't seem to figure out what to do with this yet.")})).create(),X=[...[_,U,F,$,j,G,Q]],J=[(new H).withID("stone").withName("a dull stone").withDescription("There is nothing remarkable about this rough, bland stone.").isTakeable(!0).isUsable(!0).withTakeCallback((async function(t){t.print(`The ${this.id} feels heavy in your hands.`)})).withDropCallback((async function(t){t.print("It bounces back and forth a little.")})).withUseCallback((async function(t){t.print(`You can't really figure out what to do with ${this.name} yet`)})).create(),(new H).withID("torch").withName("a torch").withDescription("A standard torch that provides light.").isUsable(!0).isTakeable(!0).withUseCallback((async function(t){t.print("You try to light the torch but fail.")})).create(),(new H).withID("cup").withName("a cup").withDescription("A standard coffee cup").isTakeable(!0).isUsable(!1).create(),(new H).withID("statue1").withName("a huge ant statue").withDescription("Before you stands a big ant statue. One of its six legs is extended outwards, attached to a round device.").isTakeable(!1).isUsable(!0).withUseCallback((async function(t){t.print("You press the button on the round device attached to the statue's arm.")})).create(),(new H).withID("statue2").withName("a huge ant statue").withDescription("Before you stands a big ant statue. Two of its six legs is extended outwards, attached to a rectangular device.").isTakeable(!1).isUsable(!0).withUseCallback((async function(t){t.print("You press the button on the rectangular device attached to the statue's arm.")})).create(),(new H).withID("statue3").withName("a huge ant statue").withDescription("Before you stands a big ant statue. Three of its six legs are extended outwards, attached to a round stone tablet.").isTakeable(!1).isUsable(!0).withUseCallback((async function(t){t.print("You examine the stone tablet in the statue's hands. There appear to be symbols on it which you can make out.")})).create(),Q];async function K(t,e){e.print("You meow.")}function Z(t){new B(t).init({rooms:X,commands:[[["meow","mew"],K]],items:J})}localStorage.getItem("save")&&(document.getElementById("save-game-found").hidden=!1,document.getElementById("before-play").hidden=!0,document.getElementById("load-save-game").addEventListener("click",(()=>{document.getElementById("save-game-found").hidden=!0,document.getElementById("play-area").hidden=!1,Z(!1)})),document.getElementById("start-new-game").addEventListener("click",(()=>{document.getElementById("save-game-found").hidden=!0,document.getElementById("play-area").hidden=!1,Z(!0)}))),document.getElementById("begin").addEventListener("click",(()=>{document.getElementById("before-play").hidden=!0,document.getElementById("play-area").hidden=!1,Z(!0)}))})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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UUFBUyxFQUNwRDVpQixTQUFTd1osZUFBZSxhQUFhb0osUUFBUyxFQUM5Q0QsR0FBVSxNQUVkM2lCLFNBQVN3WixlQUFlLGtCQUFrQjNFLGlCQUFpQixTQUFTLEtBQ2hFN1UsU0FBU3daLGVBQWUsbUJBQW1Cb0osUUFBUyxFQUNwRDVpQixTQUFTd1osZUFBZSxhQUFhb0osUUFBUyxFQUM5Q0QsR0FBVSxPQUlsQjNpQixTQUFTd1osZUFBZSxTQUFTM0UsaUJBQWlCLFNBQVMsS0FDdkQ3VSxTQUFTd1osZUFBZSxlQUFlb0osUUFBUyxFQUNoRDVpQixTQUFTd1osZUFBZSxhQUFhb0osUUFBUyxFQUM5Q0QsR0FBVSxPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9wbGF5ZXIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvb3V0cHV0cy9iYXNlLW91dHB1dC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3R0cy9vdXRwdXRzL2FyaWEuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvb3V0cHV0cy93ZWJ0dHMuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvb3V0cHV0LWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvYXVkaW8tY29udGV4dC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3RzbS92ZWM0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHNtL21hdDQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90c20vdmVjMi5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3RzbS9tYXQzLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHNtL3F1YXQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90c20vdmVjMy5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9zY2VuZXMvd2ViYXVkaW8tc2NlbmUuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZWZmZWN0LWNoYWluLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2F1ZGlvLWdyYXBoLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL3NvdXJjZXMvc291cmNlLXR5cGUuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3Ivc291cmNlcy9hdWRpby1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZGF0YS1wb29sLWl0ZW0uanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvbG9hZGVycy9odHRwLWxvYWRlci5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9kYXRhLXBvb2wuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZWZmZWN0cy9jb252b2x2ZXIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZWZmZWN0cy9iYXNlLWVmZmVjdC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9zb3VyY2VzL3N0cmVhbWluZy1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9zb3VuZC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL291dHB1dC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2lucHV0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy9sb29rLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvdXNlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvdGFrZS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzL2Ryb3AuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy9lY2hvLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvc2F2ZS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzL2xvYWQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy92b2x1bWUuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy9pbnZlbnRvcnkuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9zZXJpYWxpemF0aW9uLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9yb29tLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvYnVpbGRlcnMvcm9vbS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9sYWlyL3N0YXJ0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL2xhaXIvdHVubmVsMS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9sYWlyL2NlbnRyYWwxLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL2xhaXIvc3RhdHVlMS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9sYWlyL3N0YXR1ZTIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2dhbWUvcm9vbXMvbGFpci9zdGF0dWUzLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvaXRlbS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2J1aWxkZXJzL2l0ZW0uanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2dhbWUvaXRlbXMvc3RhdHVlNC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9yb29tcy9sYWlyL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3N0b25lLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3RvcmNoLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL2N1cC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9pdGVtcy9zdGF0dWUxLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3N0YXR1ZTIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2dhbWUvaXRlbXMvc3RhdHVlMy5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9jb21tYW5kcy9tZW93LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBwcmVmaXggPSAnfic7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgdG8gY3JlYXRlIGEgc3RvcmFnZSBmb3Igb3VyIGBFRWAgb2JqZWN0cy5cbiAqIEFuIGBFdmVudHNgIGluc3RhbmNlIGlzIGEgcGxhaW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRXZlbnRzKCkge31cblxuLy9cbi8vIFdlIHRyeSB0byBub3QgaW5oZXJpdCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC4gSW4gc29tZSBlbmdpbmVzIGNyZWF0aW5nIGFuXG4vLyBpbnN0YW5jZSBpbiB0aGlzIHdheSBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGBPYmplY3QuY3JlYXRlKG51bGwpYCBkaXJlY3RseS5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBjaGFyYWN0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Rcbi8vIG92ZXJyaWRkZW4gb3IgdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy9cbmlmIChPYmplY3QuY3JlYXRlKSB7XG4gIEV2ZW50cy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vXG4gIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgYF9fcHJvdG9fX2AgcHJvcGVydHkgaXMgc3RpbGwgaW5oZXJpdGVkIGluXG4gIC8vIHNvbWUgb2xkIGJyb3dzZXJzIGxpa2UgQW5kcm9pZCA0LCBpUGhvbmUgNS4xLCBPcGVyYSAxMSBhbmQgU2FmYXJpIDUuXG4gIC8vXG4gIGlmICghbmV3IEV2ZW50cygpLl9fcHJvdG9fXykgcHJlZml4ID0gZmFsc2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29uY2U9ZmFsc2VdIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEVFKGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5vbmNlID0gb25jZSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IGVtaXR0ZXIsIG9uY2UpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0pIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gbGlzdGVuZXIsIGVtaXR0ZXIuX2V2ZW50c0NvdW50Kys7XG4gIGVsc2UgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XS5mbikgZW1pdHRlci5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBbZW1pdHRlci5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXTtcblxuICByZXR1cm4gZW1pdHRlcjtcbn1cblxuLyoqXG4gKiBDbGVhciBldmVudCBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZ0IFRoZSBFdmVudCBuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJFdmVudChlbWl0dGVyLCBldnQpIHtcbiAgaWYgKC0tZW1pdHRlci5fZXZlbnRzQ291bnQgPT09IDApIGVtaXR0ZXIuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgZWxzZSBkZWxldGUgZW1pdHRlci5fZXZlbnRzW2V2dF07XG59XG5cbi8qKlxuICogTWluaW1hbCBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UgdGhhdCBpcyBtb2xkZWQgYWdhaW5zdCB0aGUgTm9kZS5qc1xuICogYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkXG4gKiBsaXN0ZW5lcnMuXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICB2YXIgbmFtZXMgPSBbXVxuICAgICwgZXZlbnRzXG4gICAgLCBuYW1lO1xuXG4gIGlmICh0aGlzLl9ldmVudHNDb3VudCA9PT0gMCkgcmV0dXJuIG5hbWVzO1xuXG4gIGZvciAobmFtZSBpbiAoZXZlbnRzID0gdGhpcy5fZXZlbnRzKSkge1xuICAgIGlmIChoYXMuY2FsbChldmVudHMsIG5hbWUpKSBuYW1lcy5wdXNoKHByZWZpeCA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lKTtcbiAgfVxuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgcmV0dXJuIG5hbWVzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV2ZW50cykpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgaGFuZGxlcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWhhbmRsZXJzKSByZXR1cm4gW107XG4gIGlmIChoYW5kbGVycy5mbikgcmV0dXJuIFtoYW5kbGVycy5mbl07XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBoYW5kbGVyc1tpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIDA7XG4gIGlmIChsaXN0ZW5lcnMuZm4pIHJldHVybiAxO1xuICByZXR1cm4gbGlzdGVuZXJzLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQ2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBjYXNlIDQ6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIsIGEzKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFhcmdzKSBmb3IgKGogPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcbiAgaWYgKCFmbikge1xuICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKFxuICAgICAgbGlzdGVuZXJzLmZuID09PSBmbiAmJlxuICAgICAgKCFvbmNlIHx8IGxpc3RlbmVycy5vbmNlKSAmJlxuICAgICAgKCFjb250ZXh0IHx8IGxpc3RlbmVycy5jb250ZXh0ID09PSBjb250ZXh0KVxuICAgICkge1xuICAgICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZXZlbnRzID0gW10sIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuIHx8XG4gICAgICAgIChvbmNlICYmICFsaXN0ZW5lcnNbaV0ub25jZSkgfHxcbiAgICAgICAgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnRzLnB1c2gobGlzdGVuZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJlc2V0IHRoZSBhcnJheSwgb3IgcmVtb3ZlIGl0IGNvbXBsZXRlbHkgaWYgd2UgaGF2ZSBubyBtb3JlIGxpc3RlbmVycy5cbiAgICAvL1xuICAgIGlmIChldmVudHMubGVuZ3RoKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGV2ZW50cy5sZW5ndGggPT09IDEgPyBldmVudHNbMF0gOiBldmVudHM7XG4gICAgZWxzZSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IFtldmVudF0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQ7XG5cbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRzW2V2dF0pIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gQWxpYXMgbWV0aG9kcyBuYW1lcyBiZWNhdXNlIHBlb3BsZSByb2xsIGxpa2UgdGhhdC5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEFsbG93IGBFdmVudEVtaXR0ZXJgIHRvIGJlIGltcG9ydGVkIGFzIG1vZHVsZSBuYW1lc3BhY2UuXG4vL1xuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJjbGFzcyBTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlcyA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoa2V5KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlcy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVzLmdldChrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVzLnNldChrZXksIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXJpYWxpemUoKSB7XHJcbiAgICAgICAgY29uc3QgZW50cmllcyA9IHRoaXMuc3RhdGVzLmVudHJpZXMoKTtcclxuICAgICAgICBjb25zdCBlbnRyeW1hcCA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHN0YXRlIG9mIGVudHJpZXMpIHtcclxuICAgICAgICAgICAgZW50cnltYXAucHVzaChzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbnRyeW1hcDtcclxuICAgIH1cclxuXHJcbiAgICBkZXNlcmlhbGl6ZShkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSBuZXcgTWFwKGRhdGEpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgU3RhdGUoKTsiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBQbGF5ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbnZlbnRvcnkgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSb29tID0gXCJzdGFydFwiO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSXRlbShpZCkge1xyXG4gICAgICAgIHRoaXMuaW52ZW50b3J5LnB1c2goaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oaWQpIHtcclxuICAgICAgICB0aGlzLmludmVudG9yeSA9IHRoaXMuaW52ZW50b3J5LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW52ZW50b3J5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludmVudG9yeS5tYXAoKGl0ZW0pID0+IHRoaXMuY29udGV4dC5nZXRJdGVtKGl0ZW0pKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBjbGFzcyBCYXNlT3V0cHV0IHtcclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlT3V0cHV0IH0gZnJvbSAnLi9iYXNlLW91dHB1dCc7XHJcbmV4cG9ydCBjbGFzcyBBcmlhT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IDEwMDtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgfHwgMTAwO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQodGhpcy5zcGVlY2hEaXNwbGF5KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lciwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLmNsZWFyRGlzcGxheSgpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG4gICAgICAgIHBhcmEuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hEaXNwbGF5LmFwcGVuZENoaWxkKHBhcmEpO1xyXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5jbGVhckRpc3BsYXkuYmluZCh0aGlzKSwgdGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckRpc3BsYXkoKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGlzcGxheSgpIHtcclxuICAgICAgICB0aGlzLnNwZWVjaERpc3BsYXkuaW5uZXJIVE1MID0gJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmFzZU91dHB1dCB9IGZyb20gJy4vYmFzZS1vdXRwdXQnO1xyXG5leHBvcnQgY2xhc3MgV2ViVFRTT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbn1cclxuIiwiaW1wb3J0IHsgY3JlYXRlT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXQtZmFjdG9yeSc7XHJcbmV4cG9ydCBjbGFzcyBUVFMge1xyXG4gICAgY29uc3RydWN0b3Iob3V0cHV0ID0gY3JlYXRlT3V0cHV0KCkpIHtcclxuICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dDtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLm91dHB1dC5zcGVhayh0ZXh0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc3RvcCgpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJhc2VPdXRwdXQgfSBmcm9tICcuL291dHB1dHMvYmFzZS1vdXRwdXQnO1xyXG5pbXBvcnQgeyBBcmlhT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXRzL2FyaWEnO1xyXG5pbXBvcnQgeyBXZWJUVFNPdXRwdXQgfSBmcm9tICcuL291dHB1dHMvd2VidHRzJztcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dChrZXkgPSAnYXJpYScpIHtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgY2FzZSAnYXJpYSc6XHJcbiAgICAgICAgICAgIHJldHVybiBBcmlhT3V0cHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd3ZWJ0dHMnOlxyXG4gICAgICAgICAgICByZXR1cm4gV2ViVFRTT3V0cHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gQXJpYU91dHB1dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IHsgV2ViVFRTT3V0cHV0LCBBcmlhT3V0cHV0LCBCYXNlT3V0cHV0IH07XHJcbiIsIi8vIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgQXVkaW9Db250ZXh0XHJcbi8vIGV2ZW50dWFsbHkgd2lsbCBiZSB1c2VkIHRvIGRlYWwgd2l0aCBjcm9zcyBicm93c2VyIGlzc3Vlc1xyXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc29uYXRvckF1ZGlvQ29udGV4dCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb250ZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVHYWluKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG4gICAgfVxyXG4gICAgZ2V0T3V0cHV0RGVzdGluYXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbjtcclxuICAgIH1cclxuICAgIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgfVxyXG4gICAgZGVjb2RlQXVkaW9EYXRhKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgdGhpcy5jb250ZXh0LmRlY29kZUF1ZGlvRGF0YShkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNyZWF0ZVBhbm5lcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShlbGVtZW50KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB2ZWM0IHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSg0KTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy54eXp3ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB6KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCB3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6dygpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl0sIHRoaXMudmFsdWVzWzNdXTtcclxuICAgIH1cclxuICAgIHNldCB4KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB5KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB6KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB3KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB4eSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIHNldCB4eXoodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6dyh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCByKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCBnKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCBiKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCBhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCByZygpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgcmdiKCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBnZXQgcmdiYSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl0sIHRoaXMudmFsdWVzWzNdXTtcclxuICAgIH1cclxuICAgIHNldCByKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBnKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBiKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCByZyh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIHNldCByZ2IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBzZXQgcmdiYSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG4gICAgICAgIHRoaXMudyA9IDA7XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdGhpcy56O1xyXG4gICAgICAgIGRlc3QudyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5lZ2F0ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSAtdGhpcy54O1xyXG4gICAgICAgIGRlc3QueSA9IC10aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gLXRoaXMuejtcclxuICAgICAgICBkZXN0LncgPSAtdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueiAtIHZlY3Rvci56KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLncgLSB2ZWN0b3IudykgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuc3F1YXJlZExlbmd0aCgpKTtcclxuICAgIH1cclxuICAgIHNxdWFyZWRMZW5ndGgoKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XHJcbiAgICB9XHJcbiAgICBhZGQodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSArPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogKz0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53ICs9IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3VidHJhY3QodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogLT0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53IC09IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICo9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAqPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogKj0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53ICo9IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZGl2aWRlKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56IC89IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudyAvPSB2ZWN0b3IudztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZhbHVlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueiAqPSB2YWx1ZTtcclxuICAgICAgICBkZXN0LncgKj0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBub3JtYWxpemUoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXN0LnggKj0gMDtcclxuICAgICAgICAgICAgZGVzdC55ICo9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueiAqPSAwO1xyXG4gICAgICAgICAgICBkZXN0LncgKj0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEuMCAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSAqPSBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC56ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LncgKj0gbGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlNYXQ0KG1hdHJpeCwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzQodGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB0aW1lICogKHZlY3RvcjIueCAtIHZlY3Rvci54KTtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHRpbWUgKiAodmVjdG9yMi55IC0gdmVjdG9yLnkpO1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdGltZSAqICh2ZWN0b3IyLnogLSB2ZWN0b3Iueik7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgKyB0aW1lICogKHZlY3RvcjIudyAtIHZlY3Rvci53KTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzdW0odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiArIHZlY3RvcjIuejtcclxuICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyArIHZlY3RvcjIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLSB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgLSB2ZWN0b3IyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcHJvZHVjdCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICogdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICogdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICogdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QudyA9IHZlY3Rvci53ICogdmVjdG9yMi53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHF1b3RpZW50KHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLyB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgLyB2ZWN0b3IyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbn1cclxudmVjNC56ZXJvID0gbmV3IHZlYzQoWzAsIDAsIDAsIDFdKTtcclxudmVjNC5vbmUgPSBuZXcgdmVjNChbMSwgMSwgMSwgMV0pO1xyXG4iLCJpbXBvcnQgbWF0MyBmcm9tICcuL21hdDMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuL3ZlYzQnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBtYXQ0IHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCh2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIGluaXQodmFsdWVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gdmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgbWF0NCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBhbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICBkYXRhW2ldID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG4gICAgcm93KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgMF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogNCArIDFdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDQgKyAyXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgM11cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgY29sKGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXhdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDRdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDhdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDEyXVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgICBlcXVhbHMobWF0cml4LCB0aHJlc2hvbGQgPSBlcHNpbG9uKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnZhbHVlc1tpXSAtIG1hdHJpeC5hdChpKSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGRldGVybWluYW50KCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBhMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgY29uc3QgYTMwID0gdGhpcy52YWx1ZXNbMTJdO1xyXG4gICAgICAgIGNvbnN0IGEzMSA9IHRoaXMudmFsdWVzWzEzXTtcclxuICAgICAgICBjb25zdCBhMzIgPSB0aGlzLnZhbHVlc1sxNF07XHJcbiAgICAgICAgY29uc3QgYTMzID0gdGhpcy52YWx1ZXNbMTVdO1xyXG4gICAgICAgIGNvbnN0IGRldDAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xyXG4gICAgICAgIGNvbnN0IGRldDA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xyXG4gICAgICAgIGNvbnN0IGRldDA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xyXG4gICAgICAgIGNvbnN0IGRldDA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xyXG4gICAgICAgIGNvbnN0IGRldDEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG4gICAgICAgIHJldHVybiAoZGV0MDAgKiBkZXQxMSAtXHJcbiAgICAgICAgICAgIGRldDAxICogZGV0MTAgK1xyXG4gICAgICAgICAgICBkZXQwMiAqIGRldDA5ICtcclxuICAgICAgICAgICAgZGV0MDMgKiBkZXQwOCAtXHJcbiAgICAgICAgICAgIGRldDA0ICogZGV0MDcgK1xyXG4gICAgICAgICAgICBkZXQwNSAqIGRldDA2KTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE0XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRyYW5zcG9zZSgpIHtcclxuICAgICAgICBjb25zdCB0ZW1wMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCB0ZW1wMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCB0ZW1wMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCB0ZW1wMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCB0ZW1wMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCB0ZW1wMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdGhpcy52YWx1ZXNbMTJdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gdGVtcDAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSB0aGlzLnZhbHVlc1sxM107XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSB0ZW1wMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSB0ZW1wMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gdGhpcy52YWx1ZXNbMTRdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9IHRlbXAwMztcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSB0ZW1wMTM7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gdGVtcDIzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgaW52ZXJzZSgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XHJcbiAgICAgICAgY29uc3QgYTIzID0gdGhpcy52YWx1ZXNbMTFdO1xyXG4gICAgICAgIGNvbnN0IGEzMCA9IHRoaXMudmFsdWVzWzEyXTtcclxuICAgICAgICBjb25zdCBhMzEgPSB0aGlzLnZhbHVlc1sxM107XHJcbiAgICAgICAgY29uc3QgYTMyID0gdGhpcy52YWx1ZXNbMTRdO1xyXG4gICAgICAgIGNvbnN0IGEzMyA9IHRoaXMudmFsdWVzWzE1XTtcclxuICAgICAgICBjb25zdCBkZXQwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcclxuICAgICAgICBjb25zdCBkZXQwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcclxuICAgICAgICBjb25zdCBkZXQwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcclxuICAgICAgICBjb25zdCBkZXQwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcclxuICAgICAgICBjb25zdCBkZXQxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjtcclxuICAgICAgICBsZXQgZGV0ID0gZGV0MDAgKiBkZXQxMSAtXHJcbiAgICAgICAgICAgIGRldDAxICogZGV0MTAgK1xyXG4gICAgICAgICAgICBkZXQwMiAqIGRldDA5ICtcclxuICAgICAgICAgICAgZGV0MDMgKiBkZXQwOCAtXHJcbiAgICAgICAgICAgIGRldDA0ICogZGV0MDcgK1xyXG4gICAgICAgICAgICBkZXQwNSAqIGRldDA2O1xyXG4gICAgICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSAoYTExICogZGV0MTEgLSBhMTIgKiBkZXQxMCArIGExMyAqIGRldDA5KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9ICgtYTAxICogZGV0MTEgKyBhMDIgKiBkZXQxMCAtIGEwMyAqIGRldDA5KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IChhMzEgKiBkZXQwNSAtIGEzMiAqIGRldDA0ICsgYTMzICogZGV0MDMpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gKC1hMjEgKiBkZXQwNSArIGEyMiAqIGRldDA0IC0gYTIzICogZGV0MDMpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gKC1hMTAgKiBkZXQxMSArIGExMiAqIGRldDA4IC0gYTEzICogZGV0MDcpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gKGEwMCAqIGRldDExIC0gYTAyICogZGV0MDggKyBhMDMgKiBkZXQwNykgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSAoLWEzMCAqIGRldDA1ICsgYTMyICogZGV0MDIgLSBhMzMgKiBkZXQwMSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAoYTIwICogZGV0MDUgLSBhMjIgKiBkZXQwMiArIGEyMyAqIGRldDAxKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IChhMTAgKiBkZXQxMCAtIGExMSAqIGRldDA4ICsgYTEzICogZGV0MDYpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gKC1hMDAgKiBkZXQxMCArIGEwMSAqIGRldDA4IC0gYTAzICogZGV0MDYpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSA9IChhMzAgKiBkZXQwNCAtIGEzMSAqIGRldDAyICsgYTMzICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9ICgtYTIwICogZGV0MDQgKyBhMjEgKiBkZXQwMiAtIGEyMyAqIGRldDAwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMl0gPSAoLWExMCAqIGRldDA5ICsgYTExICogZGV0MDcgLSBhMTIgKiBkZXQwNikgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gKGEwMCAqIGRldDA5IC0gYTAxICogZGV0MDcgKyBhMDIgKiBkZXQwNikgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gKC1hMzAgKiBkZXQwMyArIGEzMSAqIGRldDAxIC0gYTMyICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE1XSA9IChhMjAgKiBkZXQwMyAtIGEyMSAqIGRldDAxICsgYTIyICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkobWF0cml4KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTAzID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTEzID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IHRoaXMudmFsdWVzWzExXTtcclxuICAgICAgICBjb25zdCBhMzAgPSB0aGlzLnZhbHVlc1sxMl07XHJcbiAgICAgICAgY29uc3QgYTMxID0gdGhpcy52YWx1ZXNbMTNdO1xyXG4gICAgICAgIGNvbnN0IGEzMiA9IHRoaXMudmFsdWVzWzE0XTtcclxuICAgICAgICBjb25zdCBhMzMgPSB0aGlzLnZhbHVlc1sxNV07XHJcbiAgICAgICAgbGV0IGIwID0gbWF0cml4LmF0KDApO1xyXG4gICAgICAgIGxldCBiMSA9IG1hdHJpeC5hdCgxKTtcclxuICAgICAgICBsZXQgYjIgPSBtYXRyaXguYXQoMik7XHJcbiAgICAgICAgbGV0IGIzID0gbWF0cml4LmF0KDMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcbiAgICAgICAgYjAgPSBtYXRyaXguYXQoNCk7XHJcbiAgICAgICAgYjEgPSBtYXRyaXguYXQoNSk7XHJcbiAgICAgICAgYjIgPSBtYXRyaXguYXQoNik7XHJcbiAgICAgICAgYjMgPSBtYXRyaXguYXQoNyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcclxuICAgICAgICBiMCA9IG1hdHJpeC5hdCg4KTtcclxuICAgICAgICBiMSA9IG1hdHJpeC5hdCg5KTtcclxuICAgICAgICBiMiA9IG1hdHJpeC5hdCgxMCk7XHJcbiAgICAgICAgYjMgPSBtYXRyaXguYXQoMTEpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcclxuICAgICAgICBiMCA9IG1hdHJpeC5hdCgxMik7XHJcbiAgICAgICAgYjEgPSBtYXRyaXguYXQoMTMpO1xyXG4gICAgICAgIGIyID0gbWF0cml4LmF0KDE0KTtcclxuICAgICAgICBiMyA9IG1hdHJpeC5hdCgxNSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzModmVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB2ZWMzKFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTJdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzldICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxM10sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTBdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxNF1cclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIG11bHRpcGx5VmVjNCh2ZWN0b3IsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB2ZWN0b3IudztcclxuICAgICAgICBkZXN0LnggPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMl0gKiB3O1xyXG4gICAgICAgIGRlc3QueSA9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOV0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzEzXSAqIHc7XHJcbiAgICAgICAgZGVzdC56ID1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzZdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMF0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzE0XSAqIHc7XHJcbiAgICAgICAgZGVzdC53ID1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbM10gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzddICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMV0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzE1XSAqIHc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQzKFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzldLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxMF1cclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHRvSW52ZXJzZU1hdDMoKSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDtcclxuICAgICAgICBjb25zdCBkZXQyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcclxuICAgICAgICBsZXQgZGV0ID0gYTAwICogZGV0MDEgKyBhMDEgKiBkZXQxMSArIGEwMiAqIGRldDIxO1xyXG4gICAgICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQzKFtcclxuICAgICAgICAgICAgZGV0MDEgKiBkZXQsXHJcbiAgICAgICAgICAgICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldCxcclxuICAgICAgICAgICAgKGExMiAqIGEwMSAtIGEwMiAqIGExMSkgKiBkZXQsXHJcbiAgICAgICAgICAgIGRldDExICogZGV0LFxyXG4gICAgICAgICAgICAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldCxcclxuICAgICAgICAgICAgKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApICogZGV0LFxyXG4gICAgICAgICAgICBkZXQyMSAqIGRldCxcclxuICAgICAgICAgICAgKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApICogZGV0LFxyXG4gICAgICAgICAgICAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldFxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgdHJhbnNsYXRlKHZlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSArPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSAqIHggKyB0aGlzLnZhbHVlc1s0XSAqIHkgKyB0aGlzLnZhbHVlc1s4XSAqIHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdICs9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdICogeCArIHRoaXMudmFsdWVzWzVdICogeSArIHRoaXMudmFsdWVzWzldICogejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNF0gKz1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0gKiB4ICsgdGhpcy52YWx1ZXNbNl0gKiB5ICsgdGhpcy52YWx1ZXNbMTBdICogejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNV0gKz1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbM10gKiB4ICsgdGhpcy52YWx1ZXNbN10gKiB5ICsgdGhpcy52YWx1ZXNbMTFdICogejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdICo9IHg7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gKj0geDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSAqPSB4O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdICo9IHg7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gKj0geTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSAqPSB5O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdICo9IHk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gKj0geTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSAqPSB6O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldICo9IHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdICo9IHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdICo9IHo7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByb3RhdGUoYW5nbGUsIGF4aXMpIHtcclxuICAgICAgICBsZXQgeCA9IGF4aXMueDtcclxuICAgICAgICBsZXQgeSA9IGF4aXMueTtcclxuICAgICAgICBsZXQgeiA9IGF4aXMuejtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGggIT09IDEpIHtcclxuICAgICAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICAgICAgeCAqPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIHkgKj0gbGVuZ3RoO1xyXG4gICAgICAgICAgICB6ICo9IGxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgICAgICBjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IHQgPSAxLjAgLSBjO1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBhMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgY29uc3QgYjAwID0geCAqIHggKiB0ICsgYztcclxuICAgICAgICBjb25zdCBiMDEgPSB5ICogeCAqIHQgKyB6ICogcztcclxuICAgICAgICBjb25zdCBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcclxuICAgICAgICBjb25zdCBiMTAgPSB4ICogeSAqIHQgLSB6ICogcztcclxuICAgICAgICBjb25zdCBiMTEgPSB5ICogeSAqIHQgKyBjO1xyXG4gICAgICAgIGNvbnN0IGIxMiA9IHogKiB5ICogdCArIHggKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMCA9IHggKiB6ICogdCArIHkgKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IHkgKiB6ICogdCAtIHggKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMiA9IHogKiB6ICogdCArIGM7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBhMDEgKiBiMDAgKyBhMTEgKiBiMDEgKyBhMjEgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBhMDIgKiBiMDAgKyBhMTIgKiBiMDEgKyBhMjIgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBhMDAgKiBiMTAgKyBhMTAgKiBiMTEgKyBhMjAgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBhMDEgKiBiMTAgKyBhMTEgKiBiMTEgKyBhMjEgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBhMDMgKiBiMTAgKyBhMTMgKiBiMTEgKyBhMjMgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBhMDAgKiBiMjAgKyBhMTAgKiBiMjEgKyBhMjAgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdID0gYTAyICogYjIwICsgYTEyICogYjIxICsgYTIyICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9IGEwMyAqIGIyMCArIGExMyAqIGIyMSArIGEyMyAqIGIyMjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcnVzdHVtKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgY29uc3QgcmwgPSByaWdodCAtIGxlZnQ7XHJcbiAgICAgICAgY29uc3QgdGIgPSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgY29uc3QgZm4gPSBmYXIgLSBuZWFyO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIChuZWFyICogMikgLyBybCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKG5lYXIgKiAyKSAvIHRiLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAocmlnaHQgKyBsZWZ0KSAvIHJsLFxyXG4gICAgICAgICAgICAodG9wICsgYm90dG9tKSAvIHRiLFxyXG4gICAgICAgICAgICAtKGZhciArIG5lYXIpIC8gZm4sXHJcbiAgICAgICAgICAgIC0xLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtKGZhciAqIG5lYXIgKiAyKSAvIGZuLFxyXG4gICAgICAgICAgICAwXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcGVyc3BlY3RpdmUoZm92LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIGNvbnN0IHRvcCA9IG5lYXIgKiBNYXRoLnRhbigoZm92ICogTWF0aC5QSSkgLyAzNjAuMCk7XHJcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0b3AgKiBhc3BlY3Q7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuZnJ1c3R1bSgtcmlnaHQsIHJpZ2h0LCAtdG9wLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgb3J0aG9ncmFwaGljKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgY29uc3QgcmwgPSByaWdodCAtIGxlZnQ7XHJcbiAgICAgICAgY29uc3QgdGIgPSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgY29uc3QgZm4gPSBmYXIgLSBuZWFyO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIDIgLyBybCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMiAvIHRiLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtMiAvIGZuLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtKGxlZnQgKyByaWdodCkgLyBybCxcclxuICAgICAgICAgICAgLSh0b3AgKyBib3R0b20pIC8gdGIsXHJcbiAgICAgICAgICAgIC0oZmFyICsgbmVhcikgLyBmbixcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGxvb2tBdChwb3NpdGlvbiwgdGFyZ2V0LCB1cCA9IHZlYzMudXApIHtcclxuICAgICAgICBpZiAocG9zaXRpb24uZXF1YWxzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHogPSB2ZWMzLmRpZmZlcmVuY2UocG9zaXRpb24sIHRhcmdldCkubm9ybWFsaXplKCk7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlYzMuY3Jvc3ModXAsIHopLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWMzLmNyb3NzKHosIHgpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIHgueCxcclxuICAgICAgICAgICAgeS54LFxyXG4gICAgICAgICAgICB6LngsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHgueSxcclxuICAgICAgICAgICAgeS55LFxyXG4gICAgICAgICAgICB6LnksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHgueixcclxuICAgICAgICAgICAgeS56LFxyXG4gICAgICAgICAgICB6LnosXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh4LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh5LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh6LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIDFcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KG0xLCBtMiwgcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gbTEuYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYTAxID0gbTEuYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYTAyID0gbTEuYXQoMik7XHJcbiAgICAgICAgY29uc3QgYTAzID0gbTEuYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYTEwID0gbTEuYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYTExID0gbTEuYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYTEyID0gbTEuYXQoNik7XHJcbiAgICAgICAgY29uc3QgYTEzID0gbTEuYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYTIwID0gbTEuYXQoOCk7XHJcbiAgICAgICAgY29uc3QgYTIxID0gbTEuYXQoOSk7XHJcbiAgICAgICAgY29uc3QgYTIyID0gbTEuYXQoMTApO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IG0xLmF0KDExKTtcclxuICAgICAgICBjb25zdCBhMzAgPSBtMS5hdCgxMik7XHJcbiAgICAgICAgY29uc3QgYTMxID0gbTEuYXQoMTMpO1xyXG4gICAgICAgIGNvbnN0IGEzMiA9IG0xLmF0KDE0KTtcclxuICAgICAgICBjb25zdCBhMzMgPSBtMS5hdCgxNSk7XHJcbiAgICAgICAgY29uc3QgYjAwID0gbTIuYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYjAxID0gbTIuYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYjAyID0gbTIuYXQoMik7XHJcbiAgICAgICAgY29uc3QgYjAzID0gbTIuYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYjEwID0gbTIuYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYjExID0gbTIuYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYjEyID0gbTIuYXQoNik7XHJcbiAgICAgICAgY29uc3QgYjEzID0gbTIuYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYjIwID0gbTIuYXQoOCk7XHJcbiAgICAgICAgY29uc3QgYjIxID0gbTIuYXQoOSk7XHJcbiAgICAgICAgY29uc3QgYjIyID0gbTIuYXQoMTApO1xyXG4gICAgICAgIGNvbnN0IGIyMyA9IG0yLmF0KDExKTtcclxuICAgICAgICBjb25zdCBiMzAgPSBtMi5hdCgxMik7XHJcbiAgICAgICAgY29uc3QgYjMxID0gbTIuYXQoMTMpO1xyXG4gICAgICAgIGNvbnN0IGIzMiA9IG0yLmF0KDE0KTtcclxuICAgICAgICBjb25zdCBiMzMgPSBtMi5hdCgxNSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjAgKyBiMDMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjEgKyBiMDMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIgKyBiMDMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDMgKyBiMDEgKiBhMTMgKyBiMDIgKiBhMjMgKyBiMDMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAgKyBiMTMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjEgKyBiMTMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIgKyBiMTMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDMgKyBiMTEgKiBhMTMgKyBiMTIgKiBhMjMgKyBiMTMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjAgKyBiMjMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEgKyBiMjMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjIgKyBiMjMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDMgKyBiMjEgKiBhMTMgKyBiMjIgKiBhMjMgKyBiMjMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDAgKyBiMzEgKiBhMTAgKyBiMzIgKiBhMjAgKyBiMzMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDEgKyBiMzEgKiBhMTEgKyBiMzIgKiBhMjEgKyBiMzMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDIgKyBiMzEgKiBhMTIgKyBiMzIgKiBhMjIgKyBiMzMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDMgKyBiMzEgKiBhMTMgKyBiMzIgKiBhMjMgKyBiMzMgKiBhMzNcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwICsgYjAzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxICsgYjAzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyICsgYjAzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAzICsgYjAxICogYTEzICsgYjAyICogYTIzICsgYjAzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwICsgYjEzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxICsgYjEzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyICsgYjEzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAzICsgYjExICogYTEzICsgYjEyICogYTIzICsgYjEzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwICsgYjIzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxICsgYjIzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyICsgYjIzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAzICsgYjIxICogYTEzICsgYjIyICogYTIzICsgYjIzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAwICsgYjMxICogYTEwICsgYjMyICogYTIwICsgYjMzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAxICsgYjMxICogYTExICsgYjMyICogYTIxICsgYjMzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAyICsgYjMxICogYTEyICsgYjMyICogYTIyICsgYjMzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAzICsgYjMxICogYTEzICsgYjMyICogYTIzICsgYjMzICogYTMzXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5tYXQ0LmlkZW50aXR5ID0gbmV3IG1hdDQoKS5zZXRJZGVudGl0eSgpO1xyXG4iLCJpbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB2ZWMyIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy54eSA9IHZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgeCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBnZXQgeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV1dO1xyXG4gICAgfVxyXG4gICAgc2V0IHgodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHkodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB0aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gdGhpcy55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbmVnYXRlKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGVxdWFscyh2ZWN0b3IsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy54IC0gdmVjdG9yLngpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueSAtIHZlY3Rvci55KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG4gICAgc3F1YXJlZExlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XHJcbiAgICB9XHJcbiAgICBhZGQodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSArPSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN1YnRyYWN0KHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAtPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLT0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZGl2aWRlKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLz0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzY2FsZSh2YWx1ZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueSAqPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlNYXQyKG1hdHJpeCwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzIodGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseU1hdDMobWF0cml4LCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0cml4Lm11bHRpcGx5VmVjMih0aGlzLCBkZXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeDIgPSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeTIgPSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHggKiB5MiAtIHkgKiB4MjtcclxuICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgZGVzdC56ID0gejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkb3QodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlY3Rvci54ICogdmVjdG9yMi54ICsgdmVjdG9yLnkgKiB2ZWN0b3IyLnk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWREaXN0YW5jZSh2ZWN0b3IsIHZlY3RvcjIpKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3RvcjIueCAtIHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IyLnkgLSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaXJlY3Rpb24odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnkgPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggPSB4ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSA9IHkgKiBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5MiA9IHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnggPSB4ICsgdGltZSAqICh4MiAtIHgpO1xyXG4gICAgICAgIGRlc3QueSA9IHkgKyB0aW1lICogKHkyIC0geSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC8gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG59XHJcbnZlYzIuemVybyA9IG5ldyB2ZWMyKFswLCAwXSk7XHJcbnZlYzIub25lID0gbmV3IHZlYzIoWzEsIDFdKTtcclxuIiwiaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuaW1wb3J0IHZlYzIgZnJvbSAnLi92ZWMyJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi92ZWMzJztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgbWF0MyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCh2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIGluaXQodmFsdWVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBhbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRhdGFbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgICByb3coaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDMgKyAwXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiAzICsgMV0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogMyArIDJdXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIGNvbChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbaW5kZXhdLCB0aGlzLnZhbHVlc1tpbmRleCArIDNdLCB0aGlzLnZhbHVlc1tpbmRleCArIDZdXTtcclxuICAgIH1cclxuICAgIGVxdWFscyhtYXRyaXgsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52YWx1ZXNbaV0gLSBtYXRyaXguYXQoaSkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBkZXRlcm1pbmFudCgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XHJcbiAgICAgICAgY29uc3QgZGV0MjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XHJcbiAgICAgICAgcmV0dXJuIGEwMCAqIGRldDAxICsgYTAxICogZGV0MTEgKyBhMDIgKiBkZXQyMTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgdHJhbnNwb3NlKCkge1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAxMiA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHRlbXAwMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gdGVtcDAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gdGVtcDEyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgaW52ZXJzZSgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XHJcbiAgICAgICAgY29uc3QgZGV0MjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XHJcbiAgICAgICAgbGV0IGRldCA9IGEwMCAqIGRldDAxICsgYTAxICogZGV0MTEgKyBhMDIgKiBkZXQyMTtcclxuICAgICAgICBpZiAoIWRldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGV0ID0gMS4wIC8gZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gZGV0MDEgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAoYTEyICogYTAxIC0gYTAyICogYTExKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGRldDExICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBkZXQyMSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9ICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IChhMTEgKiBhMDAgLSBhMDEgKiBhMTApICogZGV0O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkobWF0cml4KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYjAwID0gbWF0cml4LmF0KDApO1xyXG4gICAgICAgIGNvbnN0IGIwMSA9IG1hdHJpeC5hdCgxKTtcclxuICAgICAgICBjb25zdCBiMDIgPSBtYXRyaXguYXQoMik7XHJcbiAgICAgICAgY29uc3QgYjEwID0gbWF0cml4LmF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGIxMSA9IG1hdHJpeC5hdCg0KTtcclxuICAgICAgICBjb25zdCBiMTIgPSBtYXRyaXguYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYjIwID0gbWF0cml4LmF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IG1hdHJpeC5hdCg3KTtcclxuICAgICAgICBjb25zdCBiMjIgPSBtYXRyaXguYXQoOCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzIodmVjdG9yLCByZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lnh5ID0gW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMV0gKyB5ICogdGhpcy52YWx1ZXNbNF0gKyB0aGlzLnZhbHVlc1s3XVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyB2ZWMyKFtcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1swXSArIHkgKiB0aGlzLnZhbHVlc1szXSArIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgdGhpcy52YWx1ZXNbN11cclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlWZWMzKHZlY3RvciwgcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQueHl6ID0gW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgeiAqIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgeiAqIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzVdICsgeiAqIHRoaXMudmFsdWVzWzhdXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IHZlYzMoW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgeiAqIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgeiAqIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzVdICsgeiAqIHRoaXMudmFsdWVzWzhdXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvTWF0NChyZXN1bHQpIHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbml0KFtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1syXSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1szXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s3XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzNdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0b1F1YXQoKSB7XHJcbiAgICAgICAgY29uc3QgbTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgbTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgbTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgbTEwID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgbTExID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgbTEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgbTIwID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgbTIxID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgbTIyID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgZm91clhTcXVhcmVkTWludXMxID0gbTAwIC0gbTExIC0gbTIyO1xyXG4gICAgICAgIGNvbnN0IGZvdXJZU3F1YXJlZE1pbnVzMSA9IG0xMSAtIG0wMCAtIG0yMjtcclxuICAgICAgICBjb25zdCBmb3VyWlNxdWFyZWRNaW51czEgPSBtMjIgLSBtMDAgLSBtMTE7XHJcbiAgICAgICAgY29uc3QgZm91cldTcXVhcmVkTWludXMxID0gbTAwICsgbTExICsgbTIyO1xyXG4gICAgICAgIGxldCBiaWdnZXN0SW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyV1NxdWFyZWRNaW51czE7XHJcbiAgICAgICAgaWYgKGZvdXJYU3F1YXJlZE1pbnVzMSA+IGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSkge1xyXG4gICAgICAgICAgICBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyWFNxdWFyZWRNaW51czE7XHJcbiAgICAgICAgICAgIGJpZ2dlc3RJbmRleCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3VyWVNxdWFyZWRNaW51czEgPiBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEpIHtcclxuICAgICAgICAgICAgZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxID0gZm91cllTcXVhcmVkTWludXMxO1xyXG4gICAgICAgICAgICBiaWdnZXN0SW5kZXggPSAyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm91clpTcXVhcmVkTWludXMxID4gZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxKSB7XHJcbiAgICAgICAgICAgIGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSA9IGZvdXJaU3F1YXJlZE1pbnVzMTtcclxuICAgICAgICAgICAgYmlnZ2VzdEluZGV4ID0gMztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmlnZ2VzdFZhbCA9IE1hdGguc3FydChmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgKyAxKSAqIDAuNTtcclxuICAgICAgICBjb25zdCBtdWx0ID0gMC4yNSAvIGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICBzd2l0Y2ggKGJpZ2dlc3RJbmRleCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IChtMTIgLSBtMjEpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC55ID0gKG0yMCAtIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnogPSAobTAxIC0gbTEwKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LncgPSAobTEyIC0gbTIxKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IChtMDEgKyBtMTApICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMCArIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMCAtIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnggPSAobTAxICsgbTEwKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IChtMTIgKyBtMjEpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IChtMDEgLSBtMTApICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC54ID0gKG0yMCArIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEyICsgbTIxKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJvdGF0ZShhbmdsZSwgYXhpcykge1xyXG4gICAgICAgIGxldCB4ID0gYXhpcy54O1xyXG4gICAgICAgIGxldCB5ID0gYXhpcy55O1xyXG4gICAgICAgIGxldCB6ID0gYXhpcy56O1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcclxuICAgICAgICBpZiAoIWxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSAxIC8gbGVuZ3RoO1xyXG4gICAgICAgICAgICB4ICo9IGxlbmd0aDtcclxuICAgICAgICAgICAgeSAqPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIHogKj0gbGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IGMgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgY29uc3QgdCA9IDEuMCAtIGM7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGIwMCA9IHggKiB4ICogdCArIGM7XHJcbiAgICAgICAgY29uc3QgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XHJcbiAgICAgICAgY29uc3QgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XHJcbiAgICAgICAgY29uc3QgYjEwID0geCAqIHkgKiB0IC0geiAqIHM7XHJcbiAgICAgICAgY29uc3QgYjExID0geSAqIHkgKiB0ICsgYztcclxuICAgICAgICBjb25zdCBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcclxuICAgICAgICBjb25zdCBiMjAgPSB4ICogeiAqIHQgKyB5ICogcztcclxuICAgICAgICBjb25zdCBiMjEgPSB5ICogeiAqIHQgLSB4ICogcztcclxuICAgICAgICBjb25zdCBiMjIgPSB6ICogeiAqIHQgKyBjO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gYTAyICogYjIwICsgYTEyICogYjIxICsgYTIyICogYjIyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QobTEsIG0yLCByZXN1bHQpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSBtMS5hdCgwKTtcclxuICAgICAgICBjb25zdCBhMDEgPSBtMS5hdCgxKTtcclxuICAgICAgICBjb25zdCBhMDIgPSBtMS5hdCgyKTtcclxuICAgICAgICBjb25zdCBhMTAgPSBtMS5hdCgzKTtcclxuICAgICAgICBjb25zdCBhMTEgPSBtMS5hdCg0KTtcclxuICAgICAgICBjb25zdCBhMTIgPSBtMS5hdCg1KTtcclxuICAgICAgICBjb25zdCBhMjAgPSBtMS5hdCg2KTtcclxuICAgICAgICBjb25zdCBhMjEgPSBtMS5hdCg3KTtcclxuICAgICAgICBjb25zdCBhMjIgPSBtMS5hdCg4KTtcclxuICAgICAgICBjb25zdCBiMDAgPSBtMi5hdCgwKTtcclxuICAgICAgICBjb25zdCBiMDEgPSBtMi5hdCgxKTtcclxuICAgICAgICBjb25zdCBiMDIgPSBtMi5hdCgyKTtcclxuICAgICAgICBjb25zdCBiMTAgPSBtMi5hdCgzKTtcclxuICAgICAgICBjb25zdCBiMTEgPSBtMi5hdCg0KTtcclxuICAgICAgICBjb25zdCBiMTIgPSBtMi5hdCg1KTtcclxuICAgICAgICBjb25zdCBiMjAgPSBtMi5hdCg2KTtcclxuICAgICAgICBjb25zdCBiMjEgPSBtMi5hdCg3KTtcclxuICAgICAgICBjb25zdCBiMjIgPSBtMi5hdCg4KTtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbml0KFtcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMixcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMixcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMlxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgbWF0MyhbXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjJcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbm1hdDMuaWRlbnRpdHkgPSBuZXcgbWF0MygpLnNldElkZW50aXR5KCk7XHJcbiIsImltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHF1YXQge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDQpO1xyXG4gICAgICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnh5encgPSB2YWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHooKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXooKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXp3KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXSwgdGhpcy52YWx1ZXNbM11dO1xyXG4gICAgfVxyXG4gICAgc2V0IHgodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHkodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHoodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHcodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5eih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIHNldCB4eXp3KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICByb2xsKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoMi4wICogKHggKiB5ICsgdyAqIHopLCB3ICogdyArIHggKiB4IC0geSAqIHkgLSB6ICogeik7XHJcbiAgICB9XHJcbiAgICBwaXRjaCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKDIuMCAqICh5ICogeiArIHcgKiB4KSwgdyAqIHcgLSB4ICogeCAtIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgfVxyXG4gICAgeWF3KCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmFzaW4oMi4wICogKHRoaXMueCAqIHRoaXMueiAtIHRoaXMudyAqIHRoaXMueSkpO1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnZhbHVlc1tpXSAtIHZlY3Rvci5hdChpKSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG4gICAgICAgIHRoaXMudyA9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBjYWxjdWxhdGVXKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIHRoaXMudyA9IC1NYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBpbnZlcnNlKCkge1xyXG4gICAgICAgIGNvbnN0IGRvdCA9IHF1YXQuZG90KHRoaXMsIHRoaXMpO1xyXG4gICAgICAgIGlmICghZG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6dyA9IFswLCAwLCAwLCAwXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludkRvdCA9IGRvdCA/IDEuMCAvIGRvdCA6IDA7XHJcbiAgICAgICAgdGhpcy54ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy55ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy56ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy53ICo9IGludkRvdDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGNvbmp1Z2F0ZSgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSAqPSAtMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSAqPSAtMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSAqPSAtMTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGxlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdyk7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgZGVzdC56ID0gMDtcclxuICAgICAgICAgICAgZGVzdC53ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiA9IHogKiBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC53ID0gdyAqIGxlbmd0aDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGFkZChvdGhlcikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldICs9IG90aGVyLmF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5KG90aGVyKSB7XHJcbiAgICAgICAgY29uc3QgcTF4ID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgcTF5ID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgcTF6ID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgcTF3ID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgcTJ4ID0gb3RoZXIueDtcclxuICAgICAgICBjb25zdCBxMnkgPSBvdGhlci55O1xyXG4gICAgICAgIGNvbnN0IHEyeiA9IG90aGVyLno7XHJcbiAgICAgICAgY29uc3QgcTJ3ID0gb3RoZXIudztcclxuICAgICAgICB0aGlzLnggPSBxMXggKiBxMncgKyBxMXcgKiBxMnggKyBxMXkgKiBxMnogLSBxMXogKiBxMnk7XHJcbiAgICAgICAgdGhpcy55ID0gcTF5ICogcTJ3ICsgcTF3ICogcTJ5ICsgcTF6ICogcTJ4IC0gcTF4ICogcTJ6O1xyXG4gICAgICAgIHRoaXMueiA9IHExeiAqIHEydyArIHExdyAqIHEyeiArIHExeCAqIHEyeSAtIHExeSAqIHEyeDtcclxuICAgICAgICB0aGlzLncgPSBxMXcgKiBxMncgLSBxMXggKiBxMnggLSBxMXkgKiBxMnkgLSBxMXogKiBxMno7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzModmVjdG9yLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBjb25zdCBxeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCBxeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCBxeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCBxdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcclxuICAgICAgICBjb25zdCBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcclxuICAgICAgICBjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcclxuICAgICAgICBjb25zdCBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcbiAgICAgICAgZGVzdC54ID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgICAgICBkZXN0LnkgPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xyXG4gICAgICAgIGRlc3QueiA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDMoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCB4MiA9IHggKyB4O1xyXG4gICAgICAgIGNvbnN0IHkyID0geSArIHk7XHJcbiAgICAgICAgY29uc3QgejIgPSB6ICsgejtcclxuICAgICAgICBjb25zdCB4eCA9IHggKiB4MjtcclxuICAgICAgICBjb25zdCB4eSA9IHggKiB5MjtcclxuICAgICAgICBjb25zdCB4eiA9IHggKiB6MjtcclxuICAgICAgICBjb25zdCB5eSA9IHkgKiB5MjtcclxuICAgICAgICBjb25zdCB5eiA9IHkgKiB6MjtcclxuICAgICAgICBjb25zdCB6eiA9IHogKiB6MjtcclxuICAgICAgICBjb25zdCB3eCA9IHcgKiB4MjtcclxuICAgICAgICBjb25zdCB3eSA9IHcgKiB5MjtcclxuICAgICAgICBjb25zdCB3eiA9IHcgKiB6MjtcclxuICAgICAgICBkZXN0LmluaXQoW1xyXG4gICAgICAgICAgICAxIC0gKHl5ICsgenopLFxyXG4gICAgICAgICAgICB4eSArIHd6LFxyXG4gICAgICAgICAgICB4eiAtIHd5LFxyXG4gICAgICAgICAgICB4eSAtIHd6LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgenopLFxyXG4gICAgICAgICAgICB5eiArIHd4LFxyXG4gICAgICAgICAgICB4eiArIHd5LFxyXG4gICAgICAgICAgICB5eiAtIHd4LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgeXkpXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDQoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCB4MiA9IHggKyB4O1xyXG4gICAgICAgIGNvbnN0IHkyID0geSArIHk7XHJcbiAgICAgICAgY29uc3QgejIgPSB6ICsgejtcclxuICAgICAgICBjb25zdCB4eCA9IHggKiB4MjtcclxuICAgICAgICBjb25zdCB4eSA9IHggKiB5MjtcclxuICAgICAgICBjb25zdCB4eiA9IHggKiB6MjtcclxuICAgICAgICBjb25zdCB5eSA9IHkgKiB5MjtcclxuICAgICAgICBjb25zdCB5eiA9IHkgKiB6MjtcclxuICAgICAgICBjb25zdCB6eiA9IHogKiB6MjtcclxuICAgICAgICBjb25zdCB3eCA9IHcgKiB4MjtcclxuICAgICAgICBjb25zdCB3eSA9IHcgKiB5MjtcclxuICAgICAgICBjb25zdCB3eiA9IHcgKiB6MjtcclxuICAgICAgICBkZXN0LmluaXQoW1xyXG4gICAgICAgICAgICAxIC0gKHl5ICsgenopLFxyXG4gICAgICAgICAgICB4eSArIHd6LFxyXG4gICAgICAgICAgICB4eiAtIHd5LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB4eSAtIHd6LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgenopLFxyXG4gICAgICAgICAgICB5eiArIHd4LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB4eiArIHd5LFxyXG4gICAgICAgICAgICB5eiAtIHd4LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgeXkpLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZG90KHExLCBxMikge1xyXG4gICAgICAgIHJldHVybiBxMS54ICogcTIueCArIHExLnkgKiBxMi55ICsgcTEueiAqIHEyLnogKyBxMS53ICogcTIudztcclxuICAgIH1cclxuICAgIHN0YXRpYyBzdW0ocTEsIHEyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSBxMS54ICsgcTIueDtcclxuICAgICAgICBkZXN0LnkgPSBxMS55ICsgcTIueTtcclxuICAgICAgICBkZXN0LnogPSBxMS56ICsgcTIuejtcclxuICAgICAgICBkZXN0LncgPSBxMS53ICsgcTIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KHExLCBxMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcTF4ID0gcTEueDtcclxuICAgICAgICBjb25zdCBxMXkgPSBxMS55O1xyXG4gICAgICAgIGNvbnN0IHExeiA9IHExLno7XHJcbiAgICAgICAgY29uc3QgcTF3ID0gcTEudztcclxuICAgICAgICBjb25zdCBxMnggPSBxMi54O1xyXG4gICAgICAgIGNvbnN0IHEyeSA9IHEyLnk7XHJcbiAgICAgICAgY29uc3QgcTJ6ID0gcTIuejtcclxuICAgICAgICBjb25zdCBxMncgPSBxMi53O1xyXG4gICAgICAgIGRlc3QueCA9IHExeCAqIHEydyArIHExdyAqIHEyeCArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcclxuICAgICAgICBkZXN0LnkgPSBxMXkgKiBxMncgKyBxMXcgKiBxMnkgKyBxMXogKiBxMnggLSBxMXggKiBxMno7XHJcbiAgICAgICAgZGVzdC56ID0gcTF6ICogcTJ3ICsgcTF3ICogcTJ6ICsgcTF4ICogcTJ5IC0gcTF5ICogcTJ4O1xyXG4gICAgICAgIGRlc3QudyA9IHExdyAqIHEydyAtIHExeCAqIHEyeCAtIHExeSAqIHEyeSAtIHExeiAqIHEyejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyhxMSwgcTIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHExeCA9IHExLng7XHJcbiAgICAgICAgY29uc3QgcTF5ID0gcTEueTtcclxuICAgICAgICBjb25zdCBxMXogPSBxMS56O1xyXG4gICAgICAgIGNvbnN0IHExdyA9IHExLnc7XHJcbiAgICAgICAgY29uc3QgcTJ4ID0gcTIueDtcclxuICAgICAgICBjb25zdCBxMnkgPSBxMi55O1xyXG4gICAgICAgIGNvbnN0IHEyeiA9IHEyLno7XHJcbiAgICAgICAgY29uc3QgcTJ3ID0gcTIudztcclxuICAgICAgICBkZXN0LnggPSBxMXcgKiBxMnogKyBxMXogKiBxMncgKyBxMXggKiBxMnkgLSBxMXkgKiBxMng7XHJcbiAgICAgICAgZGVzdC55ID0gcTF3ICogcTJ3IC0gcTF4ICogcTJ4IC0gcTF5ICogcTJ5IC0gcTF6ICogcTJ6O1xyXG4gICAgICAgIGRlc3QueiA9IHExdyAqIHEyeCArIHExeCAqIHEydyArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcclxuICAgICAgICBkZXN0LncgPSBxMXcgKiBxMnkgKyBxMXkgKiBxMncgKyBxMXogKiBxMnggLSBxMXggKiBxMno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2hvcnRNaXgocTEsIHEyLCB0aW1lLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGltZSA8PSAwLjApIHtcclxuICAgICAgICAgICAgZGVzdC54eXp3ID0gcTEueHl6dztcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRpbWUgPj0gMS4wKSB7XHJcbiAgICAgICAgICAgIGRlc3QueHl6dyA9IHEyLnh5enc7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY29zID0gcXVhdC5kb3QocTEsIHEyKTtcclxuICAgICAgICBjb25zdCBxMmEgPSBxMi5jb3B5KCk7XHJcbiAgICAgICAgaWYgKGNvcyA8IDAuMCkge1xyXG4gICAgICAgICAgICBxMmEuaW52ZXJzZSgpO1xyXG4gICAgICAgICAgICBjb3MgPSAtY29zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgazA7XHJcbiAgICAgICAgbGV0IGsxO1xyXG4gICAgICAgIGlmIChjb3MgPiAwLjk5OTkpIHtcclxuICAgICAgICAgICAgazAgPSAxIC0gdGltZTtcclxuICAgICAgICAgICAgazEgPSAwICsgdGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc3FydCgxIC0gY29zICogY29zKTtcclxuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHNpbiwgY29zKTtcclxuICAgICAgICAgICAgY29uc3Qgb25lT3ZlclNpbiA9IDEgLyBzaW47XHJcbiAgICAgICAgICAgIGswID0gTWF0aC5zaW4oKDEgLSB0aW1lKSAqIGFuZ2xlKSAqIG9uZU92ZXJTaW47XHJcbiAgICAgICAgICAgIGsxID0gTWF0aC5zaW4oKDAgKyB0aW1lKSAqIGFuZ2xlKSAqIG9uZU92ZXJTaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IGswICogcTEueCArIGsxICogcTJhLng7XHJcbiAgICAgICAgZGVzdC55ID0gazAgKiBxMS55ICsgazEgKiBxMmEueTtcclxuICAgICAgICBkZXN0LnogPSBrMCAqIHExLnogKyBrMSAqIHEyYS56O1xyXG4gICAgICAgIGRlc3QudyA9IGswICogcTEudyArIGsxICogcTJhLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHExLCBxMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29zSGFsZlRoZXRhID0gcTEueCAqIHEyLnggKyBxMS55ICogcTIueSArIHExLnogKiBxMi56ICsgcTEudyAqIHEyLnc7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGNvc0hhbGZUaGV0YSkgPj0gMS4wKSB7XHJcbiAgICAgICAgICAgIGRlc3QueHl6dyA9IHExLnh5enc7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYWxmVGhldGEgPSBNYXRoLmFjb3MoY29zSGFsZlRoZXRhKTtcclxuICAgICAgICBjb25zdCBzaW5IYWxmVGhldGEgPSBNYXRoLnNxcnQoMS4wIC0gY29zSGFsZlRoZXRhICogY29zSGFsZlRoZXRhKTtcclxuICAgICAgICBpZiAoTWF0aC5hYnMoc2luSGFsZlRoZXRhKSA8IDAuMDAxKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IHExLnggKiAwLjUgKyBxMi54ICogMC41O1xyXG4gICAgICAgICAgICBkZXN0LnkgPSBxMS55ICogMC41ICsgcTIueSAqIDAuNTtcclxuICAgICAgICAgICAgZGVzdC56ID0gcTEueiAqIDAuNSArIHEyLnogKiAwLjU7XHJcbiAgICAgICAgICAgIGRlc3QudyA9IHExLncgKiAwLjUgKyBxMi53ICogMC41O1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmF0aW9BID0gTWF0aC5zaW4oKDEgLSB0aW1lKSAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGE7XHJcbiAgICAgICAgY29uc3QgcmF0aW9CID0gTWF0aC5zaW4odGltZSAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGE7XHJcbiAgICAgICAgZGVzdC54ID0gcTEueCAqIHJhdGlvQSArIHEyLnggKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC55ID0gcTEueSAqIHJhdGlvQSArIHEyLnkgKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC56ID0gcTEueiAqIHJhdGlvQSArIHEyLnogKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC53ID0gcTEudyAqIHJhdGlvQSArIHEyLncgKiByYXRpb0I7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5nbGUgKj0gMC41O1xyXG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgICAgICBkZXN0LnggPSBheGlzLnggKiBzaW47XHJcbiAgICAgICAgZGVzdC55ID0gYXhpcy55ICogc2luO1xyXG4gICAgICAgIGRlc3QueiA9IGF4aXMueiAqIHNpbjtcclxuICAgICAgICBkZXN0LncgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbn1cclxucXVhdC5pZGVudGl0eSA9IG5ldyBxdWF0KCkuc2V0SWRlbnRpdHkoKTtcclxuIiwiaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgdmVjMyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB6KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBzZXQgeCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeHkodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgICAgIHRoaXMueiA9IDA7XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdGhpcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbmVnYXRlKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcclxuICAgICAgICBkZXN0LnogPSAtdGhpcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueiAtIHZlY3Rvci56KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG4gICAgc3F1YXJlZExlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xyXG4gICAgfVxyXG4gICAgYWRkKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCArPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56ICs9IHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3VidHJhY3QodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogLT0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAqPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGRpdmlkZSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLz0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAvPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZhbHVlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueiAqPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueiA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiAqPSBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseUJ5TWF0MyhtYXRyaXgsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXRyaXgubXVsdGlwbHlWZWMzKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlCeVF1YXQocXVhdGVybmlvbiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHF1YXRlcm5pb24ubXVsdGlwbHlWZWMzKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgdG9RdWF0KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGMgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIGNvbnN0IHMgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIGMueCA9IE1hdGguY29zKHRoaXMueCAqIDAuNSk7XHJcbiAgICAgICAgcy54ID0gTWF0aC5zaW4odGhpcy54ICogMC41KTtcclxuICAgICAgICBjLnkgPSBNYXRoLmNvcyh0aGlzLnkgKiAwLjUpO1xyXG4gICAgICAgIHMueSA9IE1hdGguc2luKHRoaXMueSAqIDAuNSk7XHJcbiAgICAgICAgYy56ID0gTWF0aC5jb3ModGhpcy56ICogMC41KTtcclxuICAgICAgICBzLnogPSBNYXRoLnNpbih0aGlzLnogKiAwLjUpO1xyXG4gICAgICAgIGRlc3QueCA9IHMueCAqIGMueSAqIGMueiAtIGMueCAqIHMueSAqIHMuejtcclxuICAgICAgICBkZXN0LnkgPSBjLnggKiBzLnkgKiBjLnogKyBzLnggKiBjLnkgKiBzLno7XHJcbiAgICAgICAgZGVzdC56ID0gYy54ICogYy55ICogcy56IC0gcy54ICogcy55ICogYy56O1xyXG4gICAgICAgIGRlc3QudyA9IGMueCAqIGMueSAqIGMueiArIHMueCAqIHMueSAqIHMuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHgyID0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkyID0gdmVjdG9yMi55O1xyXG4gICAgICAgIGNvbnN0IHoyID0gdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QueCA9IHkgKiB6MiAtIHogKiB5MjtcclxuICAgICAgICBkZXN0LnkgPSB6ICogeDIgLSB4ICogejI7XHJcbiAgICAgICAgZGVzdC56ID0geCAqIHkyIC0geSAqIHgyO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRvdCh2ZWN0b3IsIHZlY3RvcjIpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5MiA9IHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6MiA9IHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4geCAqIHgyICsgeSAqIHkyICsgeiAqIHoyO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3RvcjIueiAtIHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3F1YXJlZERpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3RvcjIueiAtIHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlyZWN0aW9uKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueSAtIHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLnogLSB2ZWN0b3IyLno7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgZGVzdC56ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiA9IHogKiBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB0aW1lICogKHZlY3RvcjIueCAtIHZlY3Rvci54KTtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHRpbWUgKiAodmVjdG9yMi55IC0gdmVjdG9yLnkpO1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdGltZSAqICh2ZWN0b3IyLnogLSB2ZWN0b3Iueik7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKyB2ZWN0b3IyLno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC0gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAqIHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC8gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC8gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG59XHJcbnZlYzMuemVybyA9IG5ldyB2ZWMzKFswLCAwLCAwXSk7XHJcbnZlYzMub25lID0gbmV3IHZlYzMoWzEsIDEsIDFdKTtcclxudmVjMy51cCA9IG5ldyB2ZWMzKFswLCAxLCAwXSk7XHJcbnZlYzMucmlnaHQgPSBuZXcgdmVjMyhbMSwgMCwgMF0pO1xyXG52ZWMzLmZvcndhcmQgPSBuZXcgdmVjMyhbMCwgMCwgMV0pO1xyXG4iLCIvLyBUaGUgY29kZSB0aGF0IGRlYWxzIHdpdGggM2QgYXVkaW9cclxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vLi4vdHNtL3ZlYzMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbmF0b3JTY2VuZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5saXN0ZW5lcjtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zY2VuZS5vdXRwdXQuY29ubmVjdCh0aGlzLmNvbnRleHQuZ2V0T3V0cHV0RGVzdGluYXRpb24oKSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVTb3VyY2UoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlUGFubmVyKCk7XHJcbiAgICAgICAgbm9kZS5wYW5uaW5nTW9kZWwgPSAnSFJURic7XHJcbiAgICAgICAgbm9kZS5kaXN0YW5jZU1vZGVsID0gJ2xpbmVhcic7XHJcbiAgICAgICAgbm9kZS5tYXhEaXN0YW5jZSA9IDIwO1xyXG4gICAgICAgIG5vZGUucmVmRGlzdGFuY2UgPSAyO1xyXG4gICAgICAgIG5vZGUuY29ubmVjdCh0aGlzLnNjZW5lKTtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxuICAgIGdldE91dHB1dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZTtcclxuICAgIH1cclxuICAgIGdldElucHV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjZW5lO1xyXG4gICAgfVxyXG4gICAgc2V0TGlzdGVuZXJQb3NpdGlvbih4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcclxuICAgIH1cclxuICAgIHNldExpc3RlbmVyT3JpZW50YXRpb24oZm9yd2FyZCwgcmF3dXApIHtcclxuICAgICAgICBsZXQgZndkID0gbmV3IHZlYzMoW2ZvcndhcmQueCwgZm9yd2FyZC55LCBmb3J3YXJkLnpdKTtcclxuICAgICAgICBsZXQgdXAgPSBmd2QuY29weSgpO1xyXG4gICAgICAgIHZlYzMuY3Jvc3ModXAsIG5ldyB2ZWMzKFtyYXd1cC54LCByYXd1cC55LCByYXd1cC56XSksIHVwKTtcclxuICAgICAgICB2ZWMzLmNyb3NzKHVwLCBmd2QsIHVwKTtcclxuICAgICAgICBmd2Qubm9ybWFsaXplKCk7XHJcbiAgICAgICAgdXAubm9ybWFsaXplKCk7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5zZXRPcmllbnRhdGlvbihmd2QueCwgZndkLnksIGZ3ZC56LCB1cC54LCB1cC55LCB1cC56KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBBIGNoYWluIG9mIGVmZmVjdHMgdGhhdCBjb25uZWN0IHRvIHRoZSBlZmZlY3QgYnVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVmZmVjdENoYWluIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGdyYXBoLCBpbnB1dCwgb3V0cHV0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzID0gW107XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLmdyYXBoID0gZ3JhcGg7XHJcbiAgICAgICAgdGhpcy5pbnB1dE5vZGUgPSBpbnB1dDtcclxuICAgICAgICB0aGlzLm91dHB1dE5vZGUgPSBvdXRwdXQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25uZWN0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgYXBwbHlFZmZlY3QoZWZmZWN0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLnB1c2goZWZmZWN0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25zKCk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVFZmZlY3QoZWZmZWN0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLmZvckVhY2goKGN1cnJFZmZlY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVmZmVjdCA9PT0gY3VyckVmZmVjdCkge1xyXG4gICAgICAgICAgICAgICAgY3VyckVmZmVjdC5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSB0aGlzLmVmZmVjdHMuZmlsdGVyKChjdXJyRWZmZWN0KSA9PiBlZmZlY3QgIT09IGN1cnJFZmZlY3QpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZUNvbm5lY3Rpb25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVmZmVjdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dE5vZGUuY29ubmVjdCh0aGlzLm91dHB1dE5vZGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICBsZXQgcHJldmlvdXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5mb3JFYWNoKChlZmZlY3QpID0+IHtcclxuICAgICAgICAgICAgY3VycmVudCA9IGVmZmVjdDtcclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LmNvbm5lY3RJbnB1dChwcmV2aW91cy5nZXRPdXRwdXQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LmNvbm5lY3RJbnB1dCh0aGlzLmlucHV0Tm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQuY29ubmVjdE91dHB1dCh0aGlzLm91dHB1dE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyB0aGlzIGlzIHRoZSBtaXhlciB0aGF0IHRha2VzIGFsbCB0aGUgZGlmZmVyZW50IG91dHB1dHMgYW5kIG1peGVzIHRoZW0gaW50byB0aGUgMiBidXNzZXM6XHJcbi8vIFdvcmxkQnVzOiBUaGUgZGlyZWN0aW9uYWwgYXVkaW9cclxuLy8gU2Vjb25kYXJ5QnVzOiBBbGwgdGhlIFVJIGFuZCB0aGluZ3MgdGhhdCBhcmUgbm9uIGRpcmVjdGlvbmFsXHJcbmltcG9ydCBFZmZlY3RDaGFpbiBmcm9tICcuL2VmZmVjdC1jaGFpbic7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1ZGlvR3JhcGgge1xyXG4gICAgY29uc3RydWN0b3Ioc2NlbmUsIGNvbnRleHQsIHN3YXBDaGFubmVscyA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5zd2FwQ2hhbm5lbHMgPSBzd2FwQ2hhbm5lbHM7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0c0J1cyA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgdGhpcy53b3JsZEJ1cyA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlCdXMgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG4gICAgICAgIHRoaXMubWFzdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLnNjZW5lLmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy53b3JsZEJ1cyk7XHJcbiAgICAgICAgLy8gdGhpcy53b3JsZEJ1cy5jb25uZWN0KHRoaXMubWFzdGVyKTtcclxuICAgICAgICB0aGlzLndvcmxkQnVzLmNvbm5lY3QodGhpcy5lZmZlY3RzQnVzKTtcclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSBuZXcgRWZmZWN0Q2hhaW4odGhpcy5jb250ZXh0LCB0aGlzLCB0aGlzLmVmZmVjdHNCdXMsIHRoaXMubWFzdGVyKTtcclxuICAgICAgICB0aGlzLnNlY29uZGFyeUJ1cy5jb25uZWN0KHRoaXMubWFzdGVyKTtcclxuICAgICAgICBpZiAodGhpcy5zd2FwQ2hhbm5lbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsTWVyZ2VyID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jcmVhdGVDaGFubmVsTWVyZ2VyKDIpO1xyXG4gICAgICAgICAgICB0aGlzLm1hc3Rlci5jb25uZWN0KHRoaXMuY2hhbm5lbFNwbGl0dGVyKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDAsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbE1lcmdlci5jb25uZWN0KHRoaXMuY29udGV4dC5nZXRPdXRwdXREZXN0aW5hdGlvbigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFzdGVyLmNvbm5lY3QodGhpcy5jb250ZXh0LmdldE91dHB1dERlc3RpbmF0aW9uKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbm5lY3RUb01hc3RlcihpbnB1dCkge1xyXG4gICAgICAgIGlucHV0LmNvbm5lY3QodGhpcy5tYXN0ZXIpO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdFRvVUkoaW5wdXQpIHtcclxuICAgICAgICBpbnB1dC5jb25uZWN0KHRoaXMuc2Vjb25kYXJ5QnVzKTtcclxuICAgIH1cclxuICAgIGFwcGx5RWZmZWN0KGVmZmVjdCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5hcHBseUVmZmVjdChlZmZlY3QpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlRWZmZWN0KGVmZmVjdCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5yZW1vdmVFZmZlY3QoZWZmZWN0KTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgdmFyIFNvdXJjZVR5cGU7XHJcbihmdW5jdGlvbiAoU291cmNlVHlwZSkge1xyXG4gICAgU291cmNlVHlwZVtTb3VyY2VUeXBlW1wiV29ybGRTb3VyY2VcIl0gPSAwXSA9IFwiV29ybGRTb3VyY2VcIjtcclxuICAgIFNvdXJjZVR5cGVbU291cmNlVHlwZVtcIlVJU291cmNlXCJdID0gMV0gPSBcIlVJU291cmNlXCI7XHJcbiAgICBTb3VyY2VUeXBlW1NvdXJjZVR5cGVbXCJNYXN0ZXJTb3VyY2VcIl0gPSAyXSA9IFwiTWFzdGVyU291cmNlXCI7XHJcbn0pKFNvdXJjZVR5cGUgfHwgKFNvdXJjZVR5cGUgPSB7fSkpO1xyXG4iLCIvLyBhbiBhdWRpbyBzb3VyY2VcclxuLy8gVGhpcyBpcyB0aGUgYWN0dWFsIHNvdW5kXHJcbmltcG9ydCB7IFNvdXJjZVR5cGUgfSBmcm9tICcuL3NvdXJjZS10eXBlJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXVkaW9Tb3VyY2Uge1xyXG4gICAgY29uc3RydWN0b3IoZ3JhcGgsIHNjZW5lLCBjb250ZXh0LCBidWZmZXIgPSBudWxsLCB0eXBlID0gU291cmNlVHlwZS5Xb3JsZFNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgIHo6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gMTtcclxuICAgICAgICB0aGlzLnZvbHVtZSA9IDE7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuZ2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgLy8gYmluZCBtZXRob2RzIHNvIHdlIGNhbiBhZGQgYW5kIHJlbW92dmUgdGhlbSBmcm9tIGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgICAgIHRoaXMuc3RvcCA9IHRoaXMuc3RvcC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgZ2V0QnVmZmVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldEJ1ZmZlcihkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5idWZmZXIgPSBkYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLnBsYXlPbkxvYWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGxheU9uTG9hZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHBsYXkod2hlbiA9IDAsIG9mZnNldCA9IDAsIGR1cmF0aW9uID0gdGhpcy5idWZmZXIgPyB0aGlzLmJ1ZmZlci5kdXJhdGlvbiA6IDApIHtcclxuICAgICAgICBpZiAodGhpcy5wbGF5aW5nICYmIHRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlPbkxvYWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5ub2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbm5lY3Rpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRoaXMucGxheWJhY2tSYXRlO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuc3RhcnQod2hlbiwgb2Zmc2V0LCBkdXJhdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5sb29wID0gdGhpcy5sb29waW5nO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVOb2RlLnNldFBvc2l0aW9uKHRoaXMucG9zaXRpb24ueCwgdGhpcy5wb3NpdGlvbi55LCB0aGlzLnBvc2l0aW9uLnopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIHRoaXMuc3RvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0UG9zaXRpb24oeCwgeSwgeikge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIHpcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSlcclxuICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuc2V0UG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBzZXRQbGF5YmFja1JhdGUocmF0ZSkge1xyXG4gICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gcmF0ZTtcclxuICAgICAgICBpZiAodGhpcy5ub2RlKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGUucGxheWJhY2tSYXRlLnZhbHVlID0gcmF0ZTtcclxuICAgIH1cclxuICAgIGdldFBsYXliYWNrUmF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU7XHJcbiAgICB9XHJcbiAgICBzZXRWb2x1bWUodm9sdW1lKSB7XHJcbiAgICAgICAgdGhpcy52b2x1bWUgPSB2b2x1bWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FpbilcclxuICAgICAgICAgICAgdGhpcy5nYWluLmdhaW4udmFsdWUgPSB2b2x1bWU7XHJcbiAgICB9XHJcbiAgICBnZXRWb2x1bWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudm9sdW1lO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlQ29ubmVjdGlvbnMoKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTb3VyY2VUeXBlLldvcmxkU291cmNlOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVOb2RlID0gdGhpcy5zY2VuZS5jcmVhdGVTb3VyY2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0KHRoaXMuZ2Fpbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVjdCh0aGlzLnNjZW5lTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTb3VyY2VUeXBlLlVJU291cmNlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3QodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGguY29ubmVjdFRvVUkodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3QodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGguY29ubmVjdFRvTWFzdGVyKHRoaXMuZ2Fpbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgdGhpcy5zdG9wKTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLnN0b3AoKTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAvLyBzZXQgYWxsIHJlZnMgdG8gbnVsbCB0byBlbmNvdXJhZ2UgZ2NcclxuICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmVOb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdyYXBoID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH1cclxuICAgIGxvb3AodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmxvb3BpbmcgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5ub2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5sb29wID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZmFkZU91dCh0aW1lKSB7XHJcbiAgICAgICAgdGhpcy5nYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUodGhpcy5nZXRWb2x1bWUoKSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSArIHRpbWUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCksIHRpbWUgKiAxMDAwKTtcclxuICAgIH1cclxuICAgIGZhZGVJbih0aW1lKSB7XHJcbiAgICAgICAgdGhpcy5nYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmN1cnJlbnRUaW1lKTtcclxuICAgICAgICBpZiAoIXRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nYWluLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLnZvbHVtZSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSArIHRpbWUpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIEFuIGl0ZW0gaW4gdGhlIGRhdGEgcG9vbFxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRhUG9vbEl0ZW0ge1xyXG4gICAgY29uc3RydWN0b3IobmFtZSwgZGF0YSA9IG51bGwsIGRlY29kZWREYXRhID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmRlY29kZWREYXRhID0gZGVjb2RlZERhdGE7XHJcbiAgICB9XHJcbiAgICBnZXREYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgICB9XHJcbiAgICBzZXREYXRhKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0RGVjb2RlZERhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlZERhdGE7XHJcbiAgICB9XHJcbiAgICBzZXREZWNvZGVkRGF0YShkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kZWNvZGVkRGF0YSA9IHRoaXMuZGVjb2RlZERhdGE7XHJcbiAgICB9XHJcbiAgICBnZXROYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9XHJcbiAgICBzZXROYW1lKG5hbWUpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG59XHJcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuZXhwb3J0IGNsYXNzIEhUVFBMb2FkZXIge1xyXG4gICAgZ2V0KHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBmZXRjaChwYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0geWllbGQgcmVzdWx0LmFycmF5QnVmZmVyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gYSBkYXRhIHBvb2wgaG9sZHMgZnJlcXVlbnRseSBwbGF5ZWQgc291bmRzIGluIG1lbW9yeSB0b2dldGhlciB3aXRoIGRlY29kZWQgYXVkaW8gZGF0YSB0byBubyBsb25nZXIgaGF2ZSB0byBkZWNvZGUgdGhlbSBmcm9tIHRoZSBjYWNoZSB3aGVuIGxvYWRlZCBhZ2FpblxyXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMyc7XHJcbmltcG9ydCBEYXRhUG9vbEl0ZW0gZnJvbSAnLi9kYXRhLXBvb2wtaXRlbSc7XHJcbmltcG9ydCB7IEhUVFBMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvaHR0cC1sb2FkZXInO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRhUG9vbCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBsb2FkZXIgPSBuZXcgSFRUUExvYWRlcigpLCBtYXhEYXRhID0gNTEyKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGxvYWRlcjtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLm1heERhdGEgPSBtYXhEYXRhO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBnZXQocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbcGF0aF0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFbcGF0aF0uZ2V0RGVjb2RlZERhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHlpZWxkIHRoaXMubG9hZGVyLmdldChwYXRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSB5aWVsZCB0aGlzLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IERhdGFQb29sSXRlbShwYXRoLCBidWZmZXIsIGRlY29kZWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgdGhpcy5tYXhEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgYSBtb3JlIGNsZXZlciBzb2x1dGlvbiB0aGFuIGp1c3QgcmVtb3ZpbmcgdGhlIGZpcnN0IGxvYWRlZCBkYXRhLiBMaWtlIHRyYWNraW5nIGhvdyBtdWNoIGNlcnRhaW4gZGF0YSBpcyBuZWVkZWQgYW5kIHByaW9yaXRpemUgdGhlbS5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBwYXRoczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGlzLmRhdGFbcGF0aHNbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXREZWNvZGVkRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgQmFzZUVmZmVjdCBmcm9tICcuL2Jhc2UtZWZmZWN0JztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udm9sdmVyIGV4dGVuZHMgQmFzZUVmZmVjdCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBncmFwaCwgcGFyYW1zKSB7XHJcbiAgICAgICAgc3VwZXIoY29udGV4dCwgZ3JhcGgsIHBhcmFtcyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYENyZWF0aW5nIGNvbnZvbHZlcmApO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlQ29udm9sdmVyKCk7XHJcbiAgICAgICAgdGhpcy5lZmZlY3ROb2RlLmJ1ZmZlciA9IHRoaXMuZWZmZWN0UGFyYW1zLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGNvbm5lY3RJbnB1dChub2RlKSB7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxNZXJnZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUNoYW5uZWxNZXJnZXIoMik7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbFNwbGl0dGVyLmNvbm5lY3QodGhpcy5jaGFubmVsTWVyZ2VyLCAxLCAwKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMCwgMSk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDEsIDEpO1xyXG4gICAgICAgIG5vZGUuY29ubmVjdCh0aGlzLmNoYW5uZWxTcGxpdHRlcik7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsTWVyZ2VyLmNvbm5lY3QodGhpcy5lZmZlY3ROb2RlKTtcclxuICAgICAgICB0aGlzLmlucHV0Tm9kZSA9IG5vZGU7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZUVmZmVjdCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBncmFwaCwgcGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IGdyYXBoO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0T3V0cHV0KG5vZGUpIHtcclxuICAgICAgICB0aGlzLmVmZmVjdE5vZGUuY29ubmVjdChub2RlKTtcclxuICAgIH1cclxuICAgIGNvbm5lY3RJbnB1dChub2RlKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dE5vZGUgPSBub2RlO1xyXG4gICAgICAgIGlmICh0aGlzLmVmZmVjdE5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dE5vZGUuY29ubmVjdCh0aGlzLmVmZmVjdE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldE91dHB1dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lZmZlY3ROb2RlO1xyXG4gICAgfVxyXG4gICAgZGlzY29ubmVjdCgpIHtcclxuICAgICAgICB0aGlzLmlucHV0Tm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgdGhpcy5lZmZlY3ROb2RlLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBTb3VyY2VUeXBlIH0gZnJvbSAnLi9zb3VyY2UtdHlwZSc7XHJcbmV4cG9ydCBjbGFzcyBTdHJlYW1pbmdTb3VyY2Uge1xyXG4gICAgY29uc3RydWN0b3IoZ3JhcGgsIHNjZW5lLCBjb250ZXh0LCBlbGVtZW50LCB0eXBlID0gU291cmNlVHlwZS5NYXN0ZXJTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLmdyYXBoID0gZ3JhcGg7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgIHo6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHRoaXMuZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUNvbm5lY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYW5QbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGxheU9uQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcGxheSh3aGVuID0gMCwgb2Zmc2V0ID0gMCwgZHVyYXRpb24gPSAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuUGxheSkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBsYXlPbkF2YWlsYWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5wYXVzZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0Vm9sdW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQudm9sdW1lO1xyXG4gICAgfVxyXG4gICAgc2V0Vm9sdW1lKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnZvbHVtZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZ2V0UGxheWJhY2tSYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQucGxheWJhY2tSYXRlO1xyXG4gICAgfVxyXG4gICAgc2V0UGxheWJhY2tSYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnBsYXliYWNrUmF0ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlQ29ubmVjdGlvbnMoKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTb3VyY2VUeXBlLldvcmxkU291cmNlOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVOb2RlID0gdGhpcy5zY2VuZS5jcmVhdGVTb3VyY2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0KHRoaXMuZ2Fpbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVjdCh0aGlzLnNjZW5lTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0KHRoaXMuZ2Fpbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoLmNvbm5lY3RUb01hc3Rlcih0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0UG9zaXRpb24oeCwgeSwgeikge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIHpcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSlcclxuICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuc2V0UG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmVOb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH1cclxuICAgIGxvb3AodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubG9vcCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmYWRlSW4odGltZSkge1xyXG4gICAgICAgIHRoaXMuZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMDAwMSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5nZXRWb2x1bWUoKSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSArIHRpbWUpO1xyXG4gICAgfVxyXG4gICAgZmFkZU91dCh0aW1lKSB7XHJcbiAgICAgICAgdGhpcy5nYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUodGhpcy5nZXRWb2x1bWUoKSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jdXJyZW50VGltZSArIHRpbWUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCksIHRpbWUgKiAxMDAwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyB0aGUgbWFpbiBtb2R1bGUgZm9yIFJlc29uYXRvclxyXG4vLyBBUEksIGV0Yy5cclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5pbXBvcnQgUmVzb25hdG9yQXVkaW9Db250ZXh0IGZyb20gJy4vYXVkaW8tY29udGV4dCc7XHJcbmltcG9ydCBSZXNvbmF0b3JTY2VuZSBmcm9tICcuL3NjZW5lcy93ZWJhdWRpby1zY2VuZSc7XHJcbmltcG9ydCBBdWRpb0dyYXBoIGZyb20gJy4vYXVkaW8tZ3JhcGgnO1xyXG5pbXBvcnQgQXVkaW9Tb3VyY2UgZnJvbSAnLi9zb3VyY2VzL2F1ZGlvLXNvdXJjZSc7XHJcbmltcG9ydCBEYXRhUG9vbCBmcm9tICcuL2RhdGEtcG9vbCc7XHJcbmltcG9ydCBDb252b2x2ZXIgZnJvbSAnLi9lZmZlY3RzL2NvbnZvbHZlcic7XHJcbmltcG9ydCB7IEhUVFBMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvaHR0cC1sb2FkZXInO1xyXG5pbXBvcnQgeyBTb3VyY2VUeXBlIH0gZnJvbSAnLi9zb3VyY2VzL3NvdXJjZS10eXBlJztcclxuaW1wb3J0IHsgU3RyZWFtaW5nU291cmNlIH0gZnJvbSAnLi9zb3VyY2VzL3N0cmVhbWluZy1zb3VyY2UnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbmF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IobG9hZGVyID0gbmV3IEhUVFBMb2FkZXIoKSkge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbXB1bHNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgUmVzb25hdG9yQXVkaW9Db250ZXh0KCk7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG5ldyBSZXNvbmF0b3JTY2VuZSh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBuZXcgQXVkaW9HcmFwaCh0aGlzLnNjZW5lLCB0aGlzLmNvbnRleHQsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRhdGFQb29sID0gbmV3IERhdGFQb29sKHRoaXMuY29udGV4dCwgdGhpcy5sb2FkZXIpO1xyXG4gICAgfVxyXG4gICAgbG9hZChwYXRoLCB0eXBlID0gU291cmNlVHlwZS5Xb3JsZFNvdXJjZSkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCB0aGlzLmRhdGFQb29sLmdldChwYXRoKTtcclxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5jcmVhdGVTb3VyY2UodHlwZSwgZGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBsb2FkSW1tZWRpYXRlKHBhdGgsIHR5cGUgPSBTb3VyY2VUeXBlLldvcmxkU291cmNlKSB7XHJcbiAgICAgICAgY29uc3Qgc291cmNlID0gbmV3IEF1ZGlvU291cmNlKHRoaXMuZ3JhcGgsIHRoaXMuc2NlbmUsIHRoaXMuY29udGV4dCwgbnVsbCwgdHlwZSk7XHJcbiAgICAgICAgdGhpcy5kYXRhUG9vbC5nZXQocGF0aCkudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBzb3VyY2Uuc2V0QnVmZmVyKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICB9XHJcbiAgICBzdHJlYW0ocGF0aCwgdHlwZSA9IFNvdXJjZVR5cGUuTWFzdGVyU291cmNlKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBBdWRpbyhwYXRoKTtcclxuICAgICAgICBlbGVtZW50LmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgICAgZWxlbWVudC52b2x1bWUgPSAxO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTdHJlYW1pbmdTb3VyY2UodGhpcy5ncmFwaCwgdGhpcy5zY2VuZSwgdGhpcy5jb250ZXh0LCBlbGVtZW50LCB0eXBlKTtcclxuICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlU291cmNlKHR5cGUsIGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvU291cmNlKHRoaXMuZ3JhcGgsIHRoaXMuc2NlbmUsIHRoaXMuY29udGV4dCwgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBzZXRFbnZpcm9ubWVudEltcHVsc2UoZmlsZSkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50SW1wdWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5yZW1vdmVFZmZlY3QodGhpcy5lbnZpcm9ubWVudEltcHVsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaWxlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0geWllbGQgdGhpcy5kYXRhUG9vbC5nZXQoZmlsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbXB1bHNlID0gbmV3IENvbnZvbHZlcih0aGlzLmNvbnRleHQsIHRoaXMuZ3JhcGgsIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5ncmFwaC5hcHBseUVmZmVjdCh0aGlzLmVudmlyb25tZW50SW1wdWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lclBvc2l0aW9uKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnNldExpc3RlbmVyUG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lck9yaWVudGF0aW9uKGZvcndhcmQsIHVwKSB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5zZXRMaXN0ZW5lck9yaWVudGF0aW9uKGZvcndhcmQsIHVwKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGF0YVBvb2woKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhUG9vbC5jbGVhcigpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBSZXNvbmF0b3IgZnJvbSAnLi4vZnJhbWV3b3JrL3Jlc29uYXRvcic7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5yZXMgPSBuZXcgUmVzb25hdG9yKCk7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tdXNpYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZVZvbHVtZSA9IDE7XHJcbiAgICAgICAgdGhpcy5tdXNpY1ZvbHVtZSA9IDE7XHJcbiAgICAgICAgdGhpcy5zZnhWb2x1bWUgPSAxO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNBbWJpZW5jZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c011c2ljID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwbGF5KGZpbGUpIHtcclxuICAgICAgICBjb25zdCBzb3VuZCA9IHRoaXMucmVzLmxvYWRJbW1lZGlhdGUoZmlsZSk7XHJcbiAgICAgICAgc291bmQuc2V0Vm9sdW1lKHRoaXMuc2Z4Vm9sdW1lKTtcclxuICAgICAgICBzb3VuZC5wbGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0QW1iaWVuY2UoZmlsZSkge1xyXG4gICAgICAgIGlmIChmaWxlID09PSB0aGlzLnByZXZpb3VzQW1iaWVuY2UpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5hbWJpZW5jZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0FtYmllbmNlID0gdGhpcy5hbWJpZW5jZTtcclxuICAgICAgICAgICAgdGhpcy5hbWJpZW5jZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcHJldmlvdXNBbWJpZW5jZS5mYWRlT3V0KDYpLCAxNTAwKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwcmV2aW91c0FtYmllbmNlLmRlc3Ryb3koKSwgNjAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNBbWJpZW5jZSA9IGZpbGU7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZSA9IHRoaXMucmVzLnN0cmVhbShmaWxlLCAwKTtcclxuICAgICAgICB0aGlzLmFtYmllbmNlLnNldFZvbHVtZSh0aGlzLmFtYmllbmNlVm9sdW1lKTtcclxuICAgICAgICB0aGlzLmFtYmllbmNlLnBsYXkoKTtcclxuICAgICAgICB0aGlzLmFtYmllbmNlLmxvb3AodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZS5mYWRlSW4oMyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TXVzaWMoZmlsZSkge1xyXG4gICAgICAgIGlmIChmaWxlID09PSB0aGlzLnByZXZpb3VzTXVzaWMpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5tdXNpYykge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c011c2ljID0gdGhpcy5tdXNpYztcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwcmV2aW91c011c2ljLmZhZGVPdXQoMiksIDUwMCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcHJldmlvdXNNdXNpYy5kZXN0cm95KCksIDIwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByZXZpb3VzTXVzaWMgPSBmaWxlO1xyXG4gICAgICAgIHRoaXMubXVzaWMgPSB0aGlzLnJlcy5zdHJlYW0oZmlsZSwgMSk7XHJcbiAgICAgICAgdGhpcy5tdXNpYy5zZXRWb2x1bWUodGhpcy5tdXNpY1ZvbHVtZSk7XHJcbiAgICAgICAgdGhpcy5tdXNpYy5wbGF5KCk7XHJcbiAgICAgICAgdGhpcy5tdXNpYy5mYWRlSW4oMik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW1wdWxzZShmaWxlKSB7XHJcbiAgICAgICAgdGhpcy5yZXMuc2V0RW52aXJvbm1lbnRJbXB1bHNlKGZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE11c2ljVm9sdW1lKHZvbHVtZSkge1xyXG4gICAgICAgIHRoaXMubXVzaWNWb2x1bWUgPSB2b2x1bWU7XHJcbiAgICAgICAgaWYgKHRoaXMubXVzaWMpIHRoaXMubXVzaWMuc2V0Vm9sdW1lKHZvbHVtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QW1iaWVuY2VWb2x1bWUodm9sdW1lKSB7XHJcbiAgICAgICAgdGhpcy5hbWJpZW5jZVZvbHVtZSA9IHZvbHVtZTtcclxuICAgICAgICBpZiAodGhpcy5hbWJpZW5jZSkgdGhpcy5hbWJpZW5jZS5zZXRWb2x1bWUodm9sdW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTRlhWb2x1bWUodm9sdW1lKSB7XHJcbiAgICAgICAgdGhpcy5zZnhWb2x1bWUgPSB2b2x1bWU7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBUVFMgfSBmcm9tICcuLi9mcmFtZXdvcmsvdHRzJztcclxuaW1wb3J0IHsgQXJpYU91dHB1dCB9IGZyb20gJy4uL2ZyYW1ld29yay90dHMvb3V0cHV0cy9hcmlhJztcclxuaW1wb3J0IFNvdW5kIGZyb20gJy4vc291bmQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3V0cHV0IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudHRzID0gbmV3IFRUUyhuZXcgQXJpYU91dHB1dCgpKTtcclxuICAgICAgICB0aGlzLmhpc3RvcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm91dHB1dC1hcmVhXCIpO1xyXG4gICAgICAgIHRoaXMuc291bmQgPSBuZXcgU291bmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXkoc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHN0cmluZyA9PT0gXCJcIikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc291bmQucGxheShgYXNzZXRzL3Njcm9sbC53YXZgKTtcclxuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICAgICAgc3RyaW5nLnNwbGl0KFwiXFxuXCIpLmZvckVhY2goKGxpbmUpID0+IHtcclxuICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lKSk7XHJcbiAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpKTtcclxuICAgICAgICAgICAgLy8gdGhpcy50dHMuc3BlYWsobGluZSwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5hcHBlbmRDaGlsZChub2RlKTtcclxuICAgICAgICAvLyB0aGlzLnR0cy5zcGVhayhzdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHBsYXkoZmlsZSkge1xyXG4gICAgICAgIHRoaXMuc291bmQucGxheShmaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRBbWJpZW5jZShmaWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc291bmQuc2V0QW1iaWVuY2UoZmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TXVzaWMoZmlsZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNvdW5kLnNldE11c2ljKGZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEltcHVsc2UoZmlsZSkge1xyXG4gICAgICAgIHRoaXMuc291bmQuc2V0SW1wdWxzZShmaWxlKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbW1hbmRIYW5kbGVyLCBvdXRwdXRIYW5kbGVyKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gY29tbWFuZEhhbmRsZXI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQgPSBvdXRwdXRIYW5kbGVyO1xyXG4gICAgICAgIHRoaXMuZWNob0lucHV0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlucHV0RmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlucHV0LWFyZWFcIik7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RWNobyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZWNob0lucHV0ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmlucHV0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGUud2hpY2ggPT0gMTMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaW5wdXRGaWVsZC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRGaWVsZC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lY2hvSW5wdXQpIHRoaXMub3V0cHV0LnNheShgPiAke3ZhbH1gKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlci5kb0NvbW1hbmQodmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgTG9va0NvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvbG9va1wiO1xyXG5pbXBvcnQgVXNlQ29tbWFuZCBmcm9tIFwiLi9jb21tYW5kcy91c2VcIjtcclxuaW1wb3J0IFRha2VDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL3Rha2VcIjtcclxuaW1wb3J0IERyb3BDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL2Ryb3BcIjtcclxuaW1wb3J0IEVjaG9Db21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL2VjaG9cIjtcclxuaW1wb3J0IFNhdmVDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL3NhdmVcIjtcclxuaW1wb3J0IExvYWRDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL2xvYWRcIjtcclxuaW1wb3J0IFZvbHVtZUNvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvdm9sdW1lXCI7XHJcbmltcG9ydCBJbnZlbnRvcnlDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL2ludmVudG9yeVwiO1xyXG5cclxuY29uc3QgZGVmYXVsdENvbW1hbmRzID0gW1xyXG4gICAgW1tcImxvb2tcIiwgXCJsXCJdLCBMb29rQ29tbWFuZF0sXHJcbiAgICBbW1widXNlXCIsIFwiaW50ZXJhY3RcIl0sIFVzZUNvbW1hbmRdLFxyXG4gICAgW1tcInRha2VcIiwgXCJnZXRcIl0sIFRha2VDb21tYW5kXSxcclxuICAgIFtbXCJkcm9wXCIsIFwicHV0XCJdLCBEcm9wQ29tbWFuZF0sXHJcbiAgICBbXCJlY2hvXCIsIEVjaG9Db21tYW5kXSxcclxuICAgIFtcInNhdmVcIiwgU2F2ZUNvbW1hbmRdLFxyXG4gICAgW1wibG9hZFwiLCBMb2FkQ29tbWFuZF0sXHJcbiAgICBbXCJ2b2x1bWVcIiwgVm9sdW1lQ29tbWFuZF0sXHJcbiAgICBbW1wiaVwiLCBcImludlwiLCBcImludmVudG9yeVwiXSwgSW52ZW50b3J5Q29tbWFuZF1cclxuXTtcclxuXHJcbmNvbnN0IGRpcmVjdGlvbk1hcCA9IFtcclxuICAgIFtcIm5cIiwgXCJub3J0aFwiXSxcclxuICAgIFtcIm5lXCIsIFwibm9ydGhlYXN0XCJdLFxyXG4gICAgW1wiZVwiLCBcImVhc3RcIl0sXHJcbiAgICBbXCJzZVwiLCBcInNvdXRoZWFzdFwiXSxcclxuICAgIFtcInNcIiwgXCJzb3V0aFwiXSxcclxuICAgIFtcInN3XCIsIFwic291dGh3ZXN0XCJdLFxyXG4gICAgW1wid1wiLCBcIndlc3RcIl0sXHJcbiAgICBbXCJud1wiLCBcIm5vcnRod2VzdFwiXSxcclxuICAgIFtcInVcIiwgXCJ1cFwiXSxcclxuICAgIFtcImRcIiwgXCJkb3duXCJdXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tYW5kcyB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjb21tYW5kcykge1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kcyA9IGNvbW1hbmRzIHx8IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkRGVmYXVsdENvbW1hbmRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZG9Db21tYW5kKHN0cikge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5wcmludChgWW91IGNhbid0IHNlZW0gdG8gZG8gYW55dGhpbmcgYXQgdGhlIG1vbWVudC5gKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5jb250ZXh0LmdldFJvb20odGhpcy5jb250ZXh0LnBsYXllci5jdXJyZW50Um9vbSk7XHJcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBzdHIuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1hbmRzLmdldChzcGxpdFswXSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5nZXQoc3BsaXRbMF0pKHNwbGl0LCB0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLm1hdGNoRGlyZWN0aW9uKHNwbGl0WzBdKTtcclxuXHJcbiAgICAgICAgaWYgKHJvb20uZ2V0RXhpdChkaXJlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5tb3ZlKHJvb20uZ2V0RXhpdChkaXJlY3Rpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ29tbWFuZChuYW1lLCBmdW5jKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcclxuICAgICAgICAgICAgbmFtZS5mb3JFYWNoKChjb21tYW5kKSA9PiB0aGlzLmNvbW1hbmRzLnNldChjb21tYW5kLCBmdW5jKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5zZXQobmFtZSwgZnVuYyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZENvbW1hbmRzKGNvbW1hbmRzKSB7XHJcbiAgICAgICAgY29tbWFuZHMuZm9yRWFjaCgoY29tbWFuZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoY29tbWFuZFswXSwgY29tbWFuZFsxXSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRGVmYXVsdENvbW1hbmRzKCkge1xyXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZHMoZGVmYXVsdENvbW1hbmRzKTtcclxuICAgIH1cclxuXHJcbiAgICBtYXRjaERpcmVjdGlvbihzdHIpIHtcclxuICAgICAgICBmb3IgKGxldCBkaXIgb2YgZGlyZWN0aW9uTWFwKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXJbMF0gPT0gc3RyKSByZXR1cm4gZGlyWzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExvb2tDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgY29udGV4dC5leGFtaW5lUm9vbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCByb29tID0gY29udGV4dC5nZXRSb29tKGNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHJvb20uZ2V0SXRlbXMoKTtcclxuICAgICAgICBsZXQgaXRlbSA9IG51bGw7XHJcbiAgICAgICAgZm9yIChsZXQgaSBvZiBpdGVtcykge1xyXG4gICAgICAgICAgICBpZiAoaS5uYW1lLmluY2x1ZGVzKGFyZ3NbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IGNvbnRleHQucGxheWVyLmdldEludmVudG9yeSgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaS5uYW1lLmluY2x1ZGVzKGFyZ3NbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQub3V0cHV0LnNheShgSSBjb3VsZCBub3QgZmluZCBhICR7YXJnc1sxXX0uYCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5vdXRwdXQuc2F5KGBZb3UgbG9vayBhdCAke2l0ZW0ubmFtZX0uYCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQub3V0cHV0LnNheShpdGVtLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBVc2VDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgY29uc3QgaXRlbXMgPSByb29tLmdldEl0ZW1zKCk7XHJcbiAgICBsZXQgaXRlbSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgaWYgKGkubmFtZS5pbmNsdWRlcyhhcmdzWzFdKSkge1xyXG4gICAgICAgICAgICBpdGVtID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgICAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICBjb250ZXh0Lm91dHB1dC5zYXkoYEkgY291bGQgbm90IGZpbmQgYSAke2FyZ3NbMV19LmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCBpdGVtLm9uVXNlKCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUYWtlQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCByb29tID0gY29udGV4dC5nZXRSb29tKGNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gcm9vbS5nZXRJdGVtcygpO1xyXG4gICAgbGV0IGl0ZW0gPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaSBvZiBpdGVtcykge1xyXG4gICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgaXRlbSA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFlvdSBjYW4ndCBmaW5kIGFueSAke2FyZ3NbMV19LmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIWl0ZW0udGFrZWFibGUpIHtcclxuICAgICAgICAgICAgY29udGV4dC5wcmludChgWW91IGNhbid0IHRha2UgJHtpdGVtLm5hbWV9LmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvb20ucmVtb3ZlSXRlbShpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29udGV4dC5wbGF5ZXIuYWRkSXRlbShpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29udGV4dC5wcmludChgWW91IHRha2UgJHtpdGVtLm5hbWV9LmApO1xyXG4gICAgICAgICAgICBpdGVtLm9uVGFrZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyb3BDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgIGxldCBpdGVtID0gbnVsbDtcclxuICAgIGZvciAobGV0IGkgb2YgaXRlbXMpIHtcclxuICAgICAgICBpZiAoaS5uYW1lLmluY2x1ZGVzKGFyZ3NbMV0pKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3UncmUgbm90IGNhcnJ5aW5nIGEgJHthcmdzWzFdfWApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb250ZXh0LnBsYXllci5yZW1vdmVJdGVtKGl0ZW0uaWQpO1xyXG4gICAgICAgIHJvb20uYWRkSXRlbShpdGVtLmlkKTtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3Ugc2V0ICR7aXRlbS5uYW1lfSBkb3duIG9uIHRoZSBmbG9vci5gKTtcclxuICAgICAgICBpdGVtLm9uRHJvcCgpO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWNob0NvbW1hbmQoYXJncywgY29udGV4dCkge1xyXG4gICAgaWYgKGFyZ3NbMV0gIT0gXCJvblwiICYmIGFyZ3NbMV0gIT0gXCJvZmZcIikge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFVzYWdlOiBlY2hvIDxvbi9vZmY+YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRleHQuc2V0SW5wdXRFY2hvKGFyZ3NbMV0gPT0gXCJvblwiID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBDb21tYW5kIGVjaG8gaXMgbm93ICR7YXJnc1sxXX0uYCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTYXZlQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBTYXZpbmcgZ2FtZS4uLmApO1xyXG4gICAgY29udGV4dC5zYXZlKCk7XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMb2FkQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBMb2FkaW5nIGdhbWUuLi5gKTtcclxuICAgIGNvbnRleHQubG9hZCgpO1xyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVm9sdW1lQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQucHJpbnQoYFVzYWdlOiB2b2x1bWUgPG11c2ljL3NmeC9hbWJpZW5jZT4gPDAtMTAwPmApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChhcmdzWzJdKTtcclxuICAgIGlmICh2YWx1ZSA+IDEwMCB8fCB2YWx1ZSA8IDEpIHtcclxuICAgICAgICByZXR1cm4gY29udGV4dC5wcmludChgTm8gaGlnaGVyIHRoYW4gMTAwIGFuZCBubyBsZXNzIHRoYW4gMS5gKTtcclxuICAgIH1cclxuICAgIGlmIChhcmdzWzFdID09IFwic2Z4XCIpIHtcclxuICAgICAgICBjb250ZXh0Lm91dHB1dC5zb3VuZC5zZXRTRlhWb2x1bWUodmFsdWUvMTAwKTtcclxuICAgIH0gZWxzZSBpZiAoYXJnc1sxXSA9PSBcIm11c2ljXCIpIHtcclxuICAgICAgICBjb250ZXh0Lm91dHB1dC5zb3VuZC5zZXRNdXNpY1ZvbHVtZSh2YWx1ZS8xMDApO1xyXG4gICAgfSBlbHNlIGlmIChhcmdzWzFdID09IFwiYW1iaWVuY2VcIikge1xyXG4gICAgICAgIGNvbnRleHQub3V0cHV0LnNvdW5kLnNldEFtYmllbmNlVm9sdW1lKHZhbHVlLzEwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBjb250ZXh0LnByaW50KGBJbnZhbGlkIGNoYW5uZWwuIEVpdGhlciBhbWJpZW5jZSwgc2Z4IG9yIG11c2ljIGlzIGFsbG93ZWQuYCk7XHJcbiAgICB9XHJcbiAgICBjb250ZXh0LnByaW50KGAke2FyZ3NbMV19IHZvbHVtZSBzZXQgdG8gJHt2YWx1ZX0lYClcclxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEludmVudG9yeUNvbW1hbmQoYXJncywgY29udGV4dCkge1xyXG4gICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgIGlmIChpdGVtcy5sZW5ndGggPCAxKSByZXR1cm4gY29udGV4dC5wcmludChgWW91J3JlIG5vdCBjYXJyeWluZyBhbnl0aGluZy5gKTtcclxuICAgIGxldCBpdGVtRGVzY3JpcHRpb24gPSBgWW91IGFyZSBjYXJyeWluZyBgO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAyKSB7XHJcbiAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBgJHtpdGVtLm5hbWV9LCBgO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBgJHtpdGVtLm5hbWV9IGFuZCBgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBpdGVtLm5hbWVcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnRleHQucHJpbnQoaXRlbURlc2NyaXB0aW9uICsgXCIuXCIpO1xyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VyaWFsaXphdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGNvbnN0IHNhdmVvYmogPSB7XHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmNvbnRleHQuc3RhdGUuc2VyaWFsaXplKCksXHJcbiAgICAgICAgICAgIGl0ZW1Mb2NhdGlvbnM6IHRoaXMuc2VyaWFsaXplSXRlbUxvY2F0aW9ucygpLFxyXG4gICAgICAgICAgICBwbGF5ZXI6ICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRSb29tOiB0aGlzLmNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tLFxyXG4gICAgICAgICAgICAgICAgaW52ZW50b3J5OiB0aGlzLmNvbnRleHQucGxheWVyLmludmVudG9yeVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2b2x1bWVzOiB7XHJcbiAgICAgICAgICAgICAgICBtdXNpYzogdGhpcy5jb250ZXh0Lm91dHB1dC5zb3VuZC5tdXNpY1ZvbHVtZSxcclxuICAgICAgICAgICAgICAgIHNmeDogdGhpcy5jb250ZXh0Lm91dHB1dC5zb3VuZC5zZnhWb2x1bWUsXHJcbiAgICAgICAgICAgICAgICBhbWJpZW5jZTogdGhpcy5jb250ZXh0Lm91dHB1dC5zb3VuZC5hbWJpZW5jZVZvbHVtZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNhdmVcIiwgSlNPTi5zdHJpbmdpZnkoc2F2ZW9iaikpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWQoKSB7XHJcbiAgICAgICAgY29uc3QgbG9hZG9iaiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzYXZlXCIpKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQuc3RhdGUuZGVzZXJpYWxpemUobG9hZG9iai5zdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5kZXNlcmlhbGl6ZUl0ZW1Mb2NhdGlvbnMobG9hZG9iai5pdGVtTG9jYXRpb25zKTtcclxuICAgICAgICB0aGlzLmRlc2VyaWFsaXplUGxheWVyKGxvYWRvYmoucGxheWVyKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQub3V0cHV0LnNvdW5kLnNldFNGWFZvbHVtZShsb2Fkb2JqLnZvbHVtZXMuc2Z4KTtcclxuICAgICAgICB0aGlzLmNvbnRleHQub3V0cHV0LnNvdW5kLnNldE11c2ljVm9sdW1lKGxvYWRvYmoudm9sdW1lcy5tdXNpYyk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lm91dHB1dC5zb3VuZC5zZXRBbWJpZW5jZVZvbHVtZShsb2Fkb2JqLnZvbHVtZXMuYW1iaWVuY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlcmlhbGl6ZUl0ZW1Mb2NhdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5yb29tcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtpdGVtLmlkLCBcclxuICAgICAgICAgICAgICAgIGl0ZW0ub2JqZWN0c1xyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzZXJpYWxpemVJdGVtTG9jYXRpb25zKGl0ZW1zKSB7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByb29tID0gdGhpcy5jb250ZXh0LmdldFJvb20oaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHJvb20ub2JqZWN0cyA9IGl0ZW1bMV07XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBkZXNlcmlhbGl6ZVBsYXllcihwbGF5ZXIpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQubW92ZShwbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5wbGF5ZXIuaW52ZW50b3J5ID0gcGxheWVyLmludmVudG9yeTtcclxuICAgIH1cclxufSIsImltcG9ydCBTdGF0ZSBmcm9tICcuL3N0YXRlJztcclxuaW1wb3J0IFJvb20gZnJvbSAnLi9yb29tJztcclxuaW1wb3J0IFBsYXllciBmcm9tICcuL3BsYXllcic7XHJcbmltcG9ydCBPdXRwdXQgZnJvbSAnLi9vdXRwdXQnO1xyXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi9pbnB1dCc7XHJcbmltcG9ydCBDb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcclxuaW1wb3J0IFNlcmlhbGl6YXRpb24gZnJvbSAnLi9zZXJpYWxpemF0aW9uJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWUge1xyXG4gICAgY29uc3RydWN0b3IobmV3R2FtZSA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLm5ld0dhbWUgPSBuZXdHYW1lO1xyXG4gICAgICAgIHRoaXMucGxheWVyID0gbmV3IFBsYXllcigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZTtcclxuICAgICAgICB0aGlzLnJvb21zID0gW107XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IE91dHB1dCgpO1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXIgPSBuZXcgQ29tbWFuZHModGhpcyk7XHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBJbnB1dCh0aGlzLmNvbW1hbmRIYW5kbGVyLCB0aGlzLm91dHB1dCk7XHJcbiAgICAgICAgdGhpcy52aXNpdGVkUm9vbXMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5TZXJpYWxpemF0aW9uID0gbmV3IFNlcmlhbGl6YXRpb24odGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpbnQoc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc2F5KHN0cmluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdGVsbChsaW5lcywgdGltZSkge1xyXG4gICAgICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmludChsaW5lKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0KHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0KGRhdGEpIHtcclxuICAgICAgICB0aGlzLnJvb21zID0gZGF0YS5yb29tcy5tYXAoKHJvb20pID0+IHtcclxuICAgICAgICAgICAgcm9vbS5jb250ZXh0ID0gdGhpcztcclxuICAgICAgICAgICAgcmV0dXJuIHJvb207XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBkYXRhLnN0YXRlIHx8IFN0YXRlO1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXIuYWRkQ29tbWFuZHMoZGF0YS5jb21tYW5kcyk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSBuZXcgUGxheWVyKCk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIuY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3R2FtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmUodGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VyaWFsaXphdGlvbi5sb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZHZhbmNlVGljaygpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0ub25UaWNrKCkpO1xyXG4gICAgICAgIHRoaXMucm9vbXMuZm9yRWFjaCgocm9vbSkgPT4gcm9vbS5vblRpY2soKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuYWR2YW5jZVRpY2soKSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGV4YW1pbmVSb29tKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmdldFJvb20odGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIHRoaXMub3V0cHV0LnNheShyb29tLnRpdGxlKTtcclxuICAgICAgICBpZiAoIXRoaXMudmlzaXRlZFJvb21zLmdldCh0aGlzLnBsYXllci5jdXJyZW50Um9vbSkgJiYgcm9vbS5maXJzdERlc2NyaXB0aW9uICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRwdXQuc2F5KHJvb20uZmlyc3REZXNjcmlwdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRwdXQuc2F5KHJvb20uZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4YW1pbmVJdGVtcygpO1xyXG4gICAgICAgIHRoaXMuZXhhbWluZUV4aXRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhhbWluZUl0ZW1zKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmdldFJvb20odGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcm9vbS5nZXRJdGVtcygpO1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGl0ZW1EZXNjcmlwdGlvbiA9IGBZb3Ugc2VlIGA7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMikge1xyXG4gICAgICAgICAgICAgICAgaXRlbURlc2NyaXB0aW9uICs9IGAke2l0ZW0ubmFtZX0sIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtRGVzY3JpcHRpb24gKz0gYCR7aXRlbS5uYW1lfSBhbmQgYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBpdGVtLm5hbWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub3V0cHV0LnNheShpdGVtRGVzY3JpcHRpb24gKyBcIi5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZXhhbWluZUV4aXRzKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmdldFJvb20odGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIGxldCBleGl0cyA9IFtdO1xyXG4gICAgICAgIGxldCBleGl0RGVzY3JpcHRpb24gPSBcIllvdSBjYW4gZ28gXCI7XHJcbiAgICAgICAgY29uc3QgZXhpdEtleXMgPSByb29tLmV4aXRzLmtleXMoKTtcclxuICAgICAgICBmb3IgKGxldCBleGl0IG9mIGV4aXRLZXlzKSB7XHJcbiAgICAgICAgICAgIGV4aXRzLnB1c2goZXhpdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4aXRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGV4aXRzLmxlbmd0aCAtIDIpIHtcclxuICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdGlvbiArPSBgJHtpdGVtfSwgYDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA8IGV4aXRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdGlvbiArPSBgJHtpdGVtfSBhbmQgYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdGlvbiArPSBpdGVtXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm91dHB1dC5zYXkoZXhpdERlc2NyaXB0aW9uICsgXCIuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJvb20oaWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb29tcy5maW5kKChyb29tKSA9PiByb29tLmlkID09IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2FpdChtcykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vdmUocm9vbUlEKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFJvb20gPSB0aGlzLmdldFJvb20odGhpcy5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIGNvbnN0IG5ld1Jvb20gPSB0aGlzLmdldFJvb20ocm9vbUlEKTtcclxuICAgICAgICBpZiAoY3VycmVudFJvb20uY2FuRXhpdCgpICYmIG5ld1Jvb20uY2FuRW50ZXIoKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBjdXJyZW50Um9vbS5vbkV4aXQoKTtcclxuICAgICAgICAgICAgYXdhaXQgbmV3Um9vbS5vbkVudGVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyLmN1cnJlbnRSb29tID0gcm9vbUlEO1xyXG4gICAgICAgICAgICB0aGlzLmV4YW1pbmVSb29tKCk7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaXRlZFJvb21zLnNldChyb29tSUQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVDb21tYW5kSW5wdXQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyLmVuYWJsZWQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbnB1dEVjaG8odmFsdWUpIHtcclxuICAgICAgICB0aGlzLmlucHV0LnNldEVjaG8odmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5TZXJpYWxpemF0aW9uLnNhdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuU2VyaWFsaXphdGlvbi5sb2FkKCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBSb29tIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBcInJvb21cIjtcclxuICAgICAgICB0aGlzLnRpdGxlID0gXCJBIHJvb21cIjtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJZb3Ugc2VlIG5vdGhpbmcgc3BlY2lhbFwiO1xyXG4gICAgICAgIHRoaXMuZmlyc3REZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5vYmplY3RzID0gW107XHJcbiAgICAgICAgdGhpcy5leGl0cyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmVudGVyQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZXhpdENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhbkVudGVyTG9naWMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FuRXhpdExvZ2ljID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm11c2ljID0gbnVsbDtcclxuICAgICAgICB0aGlzLmFtYmllbmNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmltcHVsc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRW50ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lm91dHB1dC5zZXRNdXNpYyh0aGlzLm11c2ljKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQub3V0cHV0LnNldEFtYmllbmNlKHRoaXMuYW1iaWVuY2UpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5vdXRwdXQuc2V0SW1wdWxzZSh0aGlzLmltcHVsc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLmVudGVyQ2FsbGJhY2spIHJldHVybiB0aGlzLmVudGVyQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkV4aXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhpdENhbGxiYWNrKSByZXR1cm4gdGhpcy5leGl0Q2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5FbnRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5FbnRlckxvZ2ljKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbkVudGVyTG9naWModGhpcy5jb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuRXhpdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5FeGl0TG9naWMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FuRXhpdExvZ2ljKHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEV4aXQoZGlyZWN0aW9uLCByb29tSUQpIHtcclxuICAgICAgICB0aGlzLmV4aXRzLnNldChkaXJlY3Rpb24sIHJvb21JRCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXhpdChkaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5leGl0cy5nZXQoZGlyZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRJdGVtKGl0ZW0pIHtcclxuICAgICAgICB0aGlzLm9iamVjdHMucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVJdGVtKGlkKSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3RzID0gdGhpcy5vYmplY3RzLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRW50ZXJDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuZW50ZXJDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRXhpdENhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5leGl0Q2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEVudGVyTG9naWMoZnVuYykge1xyXG4gICAgICAgIHRoaXMuY2FuRW50ZXJMb2dpYyA9IGZ1bmMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFeGl0TG9naWMoZnVuYykge1xyXG4gICAgICAgIHRoaXMuY2FuRXhpdExvZ2ljID0gZnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFRpY2tDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMudGlja0NhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzLm1hcCgoaXRlbSkgPT4gdGhpcy5jb250ZXh0LmdldEl0ZW0oaXRlbSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uVGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy50aWNrQ2FsbGJhY2spIHJldHVybiB0aGlzLnRpY2tDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IFJvb20gZnJvbSAnLi4vcm9vbSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb29tQnVpbGRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnJvb20gPSBuZXcgUm9vbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhJRChJRCkge1xyXG4gICAgICAgIHRoaXMucm9vbS5pZCA9IElEO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhUaXRsZSh0aXRsZSkge1xyXG4gICAgICAgIHRoaXMucm9vbS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhGaXJzdERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmZpcnN0RGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLnJvb20uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRXhpdChkaXJlY3Rpb24sIHJvb21JRCkge1xyXG4gICAgICAgIHRoaXMucm9vbS5hZGRFeGl0KGRpcmVjdGlvbiwgcm9vbUlEKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoSXRlbShpdGVtSUQpIHtcclxuICAgICAgICB0aGlzLnJvb20uYWRkSXRlbShpdGVtSUQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhFbnRlckNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEVudGVyQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhFeGl0Q2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnJvb20uYWRkRXhpdENhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRW50ZXJMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEVudGVyTG9naWMoZnVuYyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aEV4aXRMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEV4aXRMb2dpYyhmdW5jKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoVGljayhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZFRpY2tDYWxsYmFjayhmdW5jKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoTXVzaWMoZmlsZSkge1xyXG4gICAgICAgIHRoaXMucm9vbS5tdXNpYyA9IGZpbGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aEFtYmllbmNlKGZpbGUpIHtcclxuICAgICAgICB0aGlzLnJvb20uYW1iaWVuY2UgPSBmaWxlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhJbXB1bHNlKGZpbGUpIHtcclxuICAgICAgICB0aGlzLnJvb20uaW1wdWxzZSA9IGZpbGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb29tO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IFJvb21CdWlsZGVyIGZyb20gJy4uLy4uLy4uL2VuZ2luZS9idWlsZGVycy9yb29tJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBSb29tQnVpbGRlcigpXHJcbi53aXRoSUQoXCJzdGFydFwiKVxyXG4ud2l0aFRpdGxlKFwiQSBzbWFsbCBzcGhlcmljYWwgYWxjb3ZlXCIpXHJcbi53aXRoRmlyc3REZXNjcmlwdGlvbihcclxuYFlvdSBmaW5kIHlvdXJzZWxmIGluIGEgc21hbGwsIHNwaGVyaWNhbCBhbGNvdmUuIEl0IGZlZWxzIGNvbGQgYW5kIGRhcmssIHNhdmUgZnJvbSBhIGRpbSBnbG93IHdoaWNoIHNlZW1zIHRvIGJlIGVsdW1pbmF0aW5nIHRoZSBhcmVhIGZyb20gdGhlIG5vcnRoLlxyXG5UaGUgc3VyZmFjZSBhcHBlYXJzIHRvIGJlIHVubmF0dXJhbGx5IHNtb290aCwgYXMgaWYgbWVsdGVkIGF3YXkgdXNpbmcgYWNpZGljIG1lYW5zLiBJdCdzIHdhcm0gdG8gdGhlIHRvdWNoLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG5gQSBzcGhlcmljYWwgYWxjb3ZlLiBUaGUgc21vb3RoIHN1cmZhY2UgYXBwZWFycyB0byBiZSBtZWx0ZWQgYXdheSB1c2luZyBhY2lkaWMgbWVhbnMuIFRoZXJlJ3MgYSBkaW0gZ2xvdyBzaGluaW5nIGluIGZyb20gdGhlIG5vcnRoLmBcclxuKVxyXG4ud2l0aEV4aXQoXCJub3J0aFwiLCBcInR1bm5lbDFcIilcclxuLndpdGhFbnRlckNhbGxiYWNrKGFzeW5jIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIGlmIChjb250ZXh0LnN0YXRlLmdldChcInN0YXJ0LmF3b2tlblwiKSkgcmV0dXJuO1xyXG4gICAgY29uc3QgeyBvdXRwdXQsIHdhaXQgfSA9IGNvbnRleHQ7XHJcbiAgICBjb250ZXh0LmVuYWJsZUNvbW1hbmRJbnB1dChmYWxzZSk7XHJcbiAgICBhd2FpdCBjb250ZXh0LnRlbGwoW1xyXG4gICAgICAgIFwiWW91IHNsb3dseSB3YWtlIHVwLlwiLFxyXG4gICAgICAgIFwieW91J3JlIG5vdCBzdXJlIGlmIHlvdSB3ZXJlIGV2ZXIgY29uc2Npb3VzIGFib3V0IHdha2luZyB1cCwgYnV0IHJpZ2h0IG5vdywgeW91J3JlIGNsZWFybHkgYXdhcmUgdGhhdCB5b3Ugd2VyZSBwcmV2aW91c2x5IGFzbGVlcC5cIixcclxuICAgICAgICBcIkluIGZhY3QsIGEgbG90IG9mIHlvdXIgdGhvdWdodHMgc2VlbSBmb3JlaWduIHRvIHlvdS5cIixcclxuICAgICAgICBcIllvdSdyZSBub3Qgc3VyZSBob3cgdG8gZmVlbCBhYm91dCB0aGlzLlwiLFxyXG4gICAgICAgIFwiR29kIHRoZSBoZWFkYWNoZS4uLlwiLFxyXG4gICAgICAgIFwiT0ssIHRpbWUgdG8gdGhpbmsgYWJvdXQgdGhpcy5cIixcclxuICAgICAgICBcIkh1aCwgc29tZXRoaW5nIGVsc2UgeW91IG5ldmVyIGRpZCBiZWZvcmUuXCIsXHJcbiAgICAgICAgXCJXaGVyZSBhcmUgeW91P1wiLFxyXG4gICAgICAgIFwiWW91IHJlYWNoIHVwIGFuZCB0b3VjaCB5b3VyIGhlYWQuXCIsXHJcbiAgICAgICAgXCJPSywgdGhhdCBzZWVtcyB0byBiZSBpbiBvcmRlci4gWW91ciBhbnRlbm5hZSBhcmUgc3RpbGwgdGhlcmUsIHlvdXIgbW91dGggcGFydHMgc2VlbSBpbiB0YWN0Li4uXCIsXHJcbiAgICAgICAgXCJIbW0uIEFsbCB0aGlzIGlzIHN0cmFuZ2UuXCIsXHJcbiAgICAgICAgXCJObyB1c2Ugc2l0dGluZyBhcm91bmQuIFlvdSBnZXQgdXAgYW5kIHNsb3dseSBleGFtaW5lIHlvdXIgc3Vycm91bmRpbmdzLlwiXHJcbiAgICBdLCAzMDAwKTtcclxuICAgIGNvbnRleHQuZW5hYmxlQ29tbWFuZElucHV0KHRydWUpO1xyXG4gICAgY29udGV4dC5zdGF0ZS5zZXQoXCJzdGFydC5hd29rZW5cIiwgdHJ1ZSk7XHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgUm9vbUJ1aWxkZXIgZnJvbSAnLi4vLi4vLi4vZW5naW5lL2J1aWxkZXJzL3Jvb20nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFJvb21CdWlsZGVyKClcclxuLndpdGhJRChcInR1bm5lbDFcIilcclxuLndpdGhUaXRsZShcIkEgbG9uZyBkYXJrIHR1bm5lbFwiKVxyXG4ud2l0aEZpcnN0RGVzY3JpcHRpb24oXHJcbmBZb3Ugc2xvd2x5IG1ha2UgeW91ciB3YXkgb3V0IG9mIHRoZSBsaXR0bGUgYWxjb3ZlLCBoZWFkaW5nIG5vcnRoIGludG8gYSBzbW9vdGgsIHR1YmUtc2hhcGVkIHR1bm5lbC5cclxuWW91IG5vdGljZSByYXpvciB0aGluIHRocmVhZHMgY29taW5nIG91dCBvZiB0aGUgY2VpbGluZywgd2VhdmluZyBhbmQgc2xpdGhlcmluZyBhbG9uZyB0aGUgbGVuZ3RoIG9mIHRoZSB0dW5uZWwgdG93YXJkcyB0aGUgbm9ydGguIFRoZXJ5IHByb3ZpZGUgYSBkaW0gZ2xvdywgd2hpY2ggbXVzdCBoYXZlIGJlZW4gdGhlIGxpZ2h0IHlvdSBzYXcgYmVmb3JlLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG5gQSB0dWJlLXNoYXBlZCB0dW5uZWwuIFRoaW4gdGhyZWFkcyBzZWVtIHRvIGV4aXQgdGhlIGNlaWxpbmcgaGVyZSwgZW1pbmF0aW5nIGEgc29mdCBnbG93LmBcclxuKVxyXG4ud2l0aEV4aXQoXCJzb3V0aFwiLCBcInN0YXJ0XCIpXHJcbi53aXRoRXhpdChcIm5vcnRoXCIsIFwiY2VudHJhbDFcIilcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBSb29tQnVpbGRlciBmcm9tIFwiLi4vLi4vLi4vZW5naW5lL2J1aWxkZXJzL3Jvb21cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBSb29tQnVpbGRlcigpXHJcbi53aXRoSUQoXCJjZW50cmFsMVwiKVxyXG4ud2l0aFRpdGxlKFwiQSBsYXJnZSBzcGhlcmljYWwgY2hhbWJlclwiKVxyXG4ud2l0aEZpcnN0RGVzY3JpcHRpb24oXHJcbmBZb3UgZXhpdCB0aGUgdHVubmVsIGludG8gYSBsYXJnZSwgc3BoZXJpY2FsIGNoYW1iZXIuXHJcblRoZXJlIGFyZSBtYW55IG1vcmUgdGhyZWFkcyBhY3Jvc3MgdGhlIHdhbGxzIGFuZCBjZWlsaW5nIGhlcmUsIHRoZSBnbG93IGVudmVsb3BpbmcgeW91IGZ1bGx5IGluIGl0cyB1bm5hdHVyYWwgIGxpZ2h0LlxyXG5UaGUgY2hhbWJlciBhcHBlYXJzIHRvIGJlIGxhcmdlLCBhYmxlIHRvIGZpdCBodW5kcmVkcyBvZiB5b3UgaW5zaWRlLlxyXG5UbyB0aGUgbm9ydGhlYXN0LCBub3J0aHdlc3QsIHNvdXRoZWFzdCBhbmQgc291dGh3ZXN0IHlvdSBub3RpY2UgbGFyZ2Ugc3RhdHVlcyByZXByZXNlbnRpbmcgYW50cy4gVGhyZWFkcyBzZWVtIHRvIGxlYWQgcmlnaHQgaW50byB0aGVtLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG5gQSBsYXJnZSwgc3BoZXJpY2FsIGNoYW1iZXIuIEdsb3dpbmcgdGhyZWFkcyBjcmlzcy1jcm9zcyB0aGUgd2FsbHMgYW5kIGNlaWxpbmcuIEFyb3VuZCB5b3UsIHN0YXR1ZXMgb2YgYW50cy5gXHJcbilcclxuLndpdGhFeGl0KFwibm9ydGh3ZXN0XCIsIFwic3RhdHVlMVwiKVxyXG4ud2l0aEV4aXQoXCJub3J0aGVhc3RcIiwgXCJzdGF0dWUyXCIpXHJcbi53aXRoRXhpdChcInNvdXRod2VzdFwiLCBcInN0YXR1ZTNcIilcclxuLndpdGhFeGl0KFwic291dGhlYXN0XCIsIFwic3RhdHVlNFwiKVxyXG4ud2l0aEV4aXQoXCJzb3V0aFwiLCBcInR1bm5lbDFcIilcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBSb29tQnVpbGRlciBmcm9tIFwiLi4vLi4vLi4vZW5naW5lL2J1aWxkZXJzL3Jvb21cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBSb29tQnVpbGRlcigpXHJcbi53aXRoSUQoXCJzdGF0dWUxXCIpXHJcbi53aXRoVGl0bGUoXCJUaGUgbm9ydGh3ZXN0ZXJuIHBhcnQgb2YgdGhlIGNlbnRyYWwgY2hhbWJlclwiKVxyXG4ud2l0aEZpcnN0RGVzY3JpcHRpb24oXHJcbiAgICBgWW91IHdhbGsgb3ZlciB0byB0aGUgbm9ydGh3ZXN0ZXJuIHBhcnQgb2YgdGhlIGNlbnRyYWwgY2hhbWJlci5cclxuICAgIEl0IGlzIGFsbW9zdCBlbnRpcmVseSB0YWtlbiB1cCBieSBhIGh1Z2UgYW50IHN0YXR1ZS4gT25lIG9mIGl0cyBzaXggbGVncyBhcmUgZXh0ZW5kZWQgb3V0d2FyZHMsIGF0dGFjaGVkIHRvIHdoaWNoIGlzIGEgc21hbGwsIHJvdW5kIGRldmljZS5gXHJcbilcclxuLndpdGhEZXNjcmlwdGlvbihcclxuICAgIGBgXHJcbilcclxuLndpdGhFeGl0KFwic291dGhlYXN0XCIsIFwiY2VudHJhbDFcIilcclxuLndpdGhJdGVtKFwic3RhdHVlMVwiKVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IFJvb21CdWlsZGVyIGZyb20gXCIuLi8uLi8uLi9lbmdpbmUvYnVpbGRlcnMvcm9vbVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFJvb21CdWlsZGVyKClcclxuLndpdGhJRChcInN0YXR1ZTJcIilcclxuLndpdGhUaXRsZShcIlRoZSBub3J0aGVhc3Rlcm4gcGFydCBvZiB0aGUgY2VudHJhbCBjaGFtYmVyXCIpXHJcbi53aXRoRmlyc3REZXNjcmlwdGlvbihcclxuICAgIGBZb3Ugd2FsayBvdmVyIHRvIHRoZSBub3J0aGVhc3Rlcm4gcGFydCBvZiB0aGUgY2VudHJhbCBjaGFtYmVyLlxyXG4gICAgSXQgaXMgYWxtb3N0IGVudGlyZWx5IHRha2VuIHVwIGJ5IGEgaHVnZSBhbnQgc3RhdHVlLiBUd28gb2YgaXRzIHNpeCBsZWdzIGFyZSBleHRlbmRlZCBvdXR3YXJkcywgYXR0YWNoZWQgdG8gd2hpY2ggaXMgYSBsYXJnZSwgcmVjdGFuZ3VsYXIgZGV2aWNlLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG4gICAgYGBcclxuKVxyXG4ud2l0aEV4aXQoXCJzb3V0aHdlc3RcIiwgXCJjZW50cmFsMVwiKVxyXG4ud2l0aEl0ZW0oXCJzdGF0dWUyXCIpXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgUm9vbUJ1aWxkZXIgZnJvbSBcIi4uLy4uLy4uL2VuZ2luZS9idWlsZGVycy9yb29tXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgUm9vbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwic3RhdHVlM1wiKVxyXG4ud2l0aFRpdGxlKFwiVGhlIHNvdXRod2VzdGVybiBwYXJ0IG9mIHRoZSBjZW50cmFsIGNoYW1iZXJcIilcclxuLndpdGhGaXJzdERlc2NyaXB0aW9uKFxyXG4gICAgYFlvdSB3YWxrIG92ZXIgdG8gdGhlIHNvdXRod2VzdGVybiBwYXJ0IG9mIHRoZSBjZW50cmFsIGNoYW1iZXIuXHJcbiAgICBJdCBpcyBhbG1vc3QgZW50aXJlbHkgdGFrZW4gdXAgYnkgYSBodWdlIGFudCBzdGF0dWUuIFRocmVlIG9mIGl0cyBzaXggbGVncyBhcmUgZXh0ZW5kZWQgb3V0d2FyZHMsIGF0dGFjaGVkIHRvIHdoaWNoIGlzIGEgcm91bmQgc3RvbmUgdGFibGV0LmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG4gICAgYGBcclxuKVxyXG4ud2l0aEV4aXQoXCJub3J0aGVhc3RcIiwgXCJjZW50cmFsMVwiKVxyXG4ud2l0aEl0ZW0oXCJzdGF0dWUzXCIpXHJcbi5jcmVhdGUoKTsiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBcIml0ZW1cIjtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkFuIGl0ZW1cIjtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJZb3Ugc2VlIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGlzIGl0ZW1cIjtcclxuICAgICAgICB0aGlzLnVzYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50YWtlYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51c2VDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50YWtlQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZHJvcENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblVzZSgpIHtcclxuICAgICAgICBpZiAodGhpcy51c2VDYWxsYmFjaykgcmV0dXJuIHRoaXMudXNlQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblRha2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFrZUNhbGxiYWNrKSByZXR1cm4gdGhpcy50YWtlQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRyb3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcENhbGxiYWNrKSByZXR1cm4gdGhpcy5kcm9wQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuICAgIGFzeW5jIG9uVGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy50aWNrQ2FsbGJhY2spIHJldHVybiB0aGlzLnRpY2tDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy51c2VDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGFrZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy50YWtlQ2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZERyb3BDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuZHJvcENhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUaWNrQ2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgSXRlbSBmcm9tICcuLi9pdGVtJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1CdWlsZGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbSA9IG5ldyBJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aElEKElEKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmlkID0gSUQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aE5hbWUobmFtZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbS5uYW1lID0gbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLml0ZW0uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpc1VzYWJsZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbS51c2FibGUgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpc1Rha2VhYmxlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLnRha2VhYmxlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aFVzZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFVzZUNhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoVGFrZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFRha2VDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aERyb3BDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaXRlbS5hZGREcm9wQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB3aXRoVGlja0NhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFRpY2tDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSAnLi4vLi4vZW5naW5lL2J1aWxkZXJzL2l0ZW0nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IEl0ZW1CdWlsZGVyKClcclxuLndpdGhJRChcInN0YXR1ZTRcIilcclxuLndpdGhOYW1lKFwiYSBodWdlIGFudCBzdGF0dWVcIilcclxuLndpdGhEZXNjcmlwdGlvbihcclxuICAgIGBCZWZvcmUgeW91IGlzIGEgYmlnIHN0YXR1ZSBvZiBhbiBhbnQsIGluIHRoZSBwcm9jZXNzIG9mIGZhbGxpbmcgb3Zlci4gQWxsIG9mIGl0cyBsZWdzIGFyZSBiZW50IGF0IHRoZSBqb2ludHMuYFxyXG4pXHJcbi5pc1Rha2VhYmxlKGZhbHNlKVxyXG4uaXNVc2FibGUodHJ1ZSlcclxuLndpdGhVc2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbiAoY29udGV4dCkge1xyXG4gICAgY29udGV4dC5wcmludChgWW91IGNhbid0IHNlZW0gdG8gZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhpcyB5ZXQuYClcclxufSlcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBMYWlyIGZyb20gJy4vbGFpcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBbXHJcbiAgICAuLi5MYWlyXHJcbl07IiwiaW1wb3J0IFN0YXJ0IGZyb20gJy4vc3RhcnQnO1xyXG5pbXBvcnQgVHVubmVsMSBmcm9tICcuL3R1bm5lbDEnO1xyXG5pbXBvcnQgY2VudHJhbDEgZnJvbSAnLi9jZW50cmFsMSc7XHJcbmltcG9ydCBzdGF0dWUxIGZyb20gJy4vc3RhdHVlMSc7XHJcbmltcG9ydCBzdGF0dWUyIGZyb20gJy4vc3RhdHVlMic7XHJcbmltcG9ydCBzdGF0dWUzIGZyb20gJy4vc3RhdHVlMyc7XHJcbmltcG9ydCBzdGF0dWU0IGZyb20gJy4uLy4uL2l0ZW1zL3N0YXR1ZTQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgW1xyXG4gICAgU3RhcnQsXHJcbiAgICBUdW5uZWwxLFxyXG4gICAgY2VudHJhbDEsXHJcbiAgICBzdGF0dWUxLFxyXG4gICAgc3RhdHVlMixcclxuICAgIHN0YXR1ZTMsXHJcbiAgICBzdGF0dWU0XHJcbl07IiwiaW1wb3J0IFN0b25lIGZyb20gJy4vc3RvbmUnO1xyXG5pbXBvcnQgVG9yY2ggZnJvbSAnLi90b3JjaCc7XHJcbmltcG9ydCBDdXAgZnJvbSAnLi9jdXAnO1xyXG5pbXBvcnQgU3RhdHVlMSBmcm9tICcuL3N0YXR1ZTEnO1xyXG5pbXBvcnQgc3RhdHVlMiBmcm9tICcuL3N0YXR1ZTInO1xyXG5pbXBvcnQgc3RhdHVlMyBmcm9tICcuL3N0YXR1ZTMnO1xyXG5pbXBvcnQgc3RhdHVlNCBmcm9tICcuL3N0YXR1ZTQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgW1xyXG4gICAgU3RvbmUsXHJcbiAgICBUb3JjaCxcclxuICAgIEN1cCxcclxuICAgIFN0YXR1ZTEsXHJcbiAgICBzdGF0dWUyLFxyXG4gICAgc3RhdHVlMyxcclxuICAgIHN0YXR1ZTRcclxuXSIsImltcG9ydCBJdGVtQnVpbGRlciBmcm9tIFwiLi4vLi4vZW5naW5lL2J1aWxkZXJzL2l0ZW1cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJdGVtQnVpbGRlcigpXHJcbi53aXRoSUQoXCJzdG9uZVwiKVxyXG4ud2l0aE5hbWUoXCJhIGR1bGwgc3RvbmVcIilcclxuLndpdGhEZXNjcmlwdGlvbihcIlRoZXJlIGlzIG5vdGhpbmcgcmVtYXJrYWJsZSBhYm91dCB0aGlzIHJvdWdoLCBibGFuZCBzdG9uZS5cIilcclxuLmlzVGFrZWFibGUodHJ1ZSlcclxuLmlzVXNhYmxlKHRydWUpXHJcbi53aXRoVGFrZUNhbGxiYWNrKGFzeW5jIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQucHJpbnQoYFRoZSAke3RoaXMuaWR9IGZlZWxzIGhlYXZ5IGluIHlvdXIgaGFuZHMuYCk7XHJcbn0pXHJcbi53aXRoRHJvcENhbGxiYWNrKGFzeW5jIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQucHJpbnQoYEl0IGJvdW5jZXMgYmFjayBhbmQgZm9ydGggYSBsaXR0bGUuYClcclxufSlcclxuLndpdGhVc2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBZb3UgY2FuJ3QgcmVhbGx5IGZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoICR7dGhpcy5uYW1lfSB5ZXRgKTtcclxufSlcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBJdGVtQnVpbGRlciBmcm9tIFwiLi4vLi4vZW5naW5lL2J1aWxkZXJzL2l0ZW1cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJdGVtQnVpbGRlcigpXHJcbi53aXRoSUQoXCJ0b3JjaFwiKVxyXG4ud2l0aE5hbWUoXCJhIHRvcmNoXCIpXHJcbi53aXRoRGVzY3JpcHRpb24oXCJBIHN0YW5kYXJkIHRvcmNoIHRoYXQgcHJvdmlkZXMgbGlnaHQuXCIpXHJcbi5pc1VzYWJsZSh0cnVlKVxyXG4uaXNUYWtlYWJsZSh0cnVlKVxyXG4ud2l0aFVzZUNhbGxiYWNrKGFzeW5jIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQucHJpbnQoYFlvdSB0cnkgdG8gbGlnaHQgdGhlIHRvcmNoIGJ1dCBmYWlsLmApXHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSBcIi4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtXCI7XHJcbmltcG9ydCBJdGVtIGZyb20gXCIuLi8uLi9lbmdpbmUvaXRlbVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IEl0ZW1CdWlsZGVyKClcclxuLndpdGhJRChcImN1cFwiKVxyXG4ud2l0aE5hbWUoXCJhIGN1cFwiKVxyXG4ud2l0aERlc2NyaXB0aW9uKFwiQSBzdGFuZGFyZCBjb2ZmZWUgY3VwXCIpXHJcbi5pc1Rha2VhYmxlKHRydWUpXHJcbi5pc1VzYWJsZShmYWxzZSlcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBJdGVtQnVpbGRlciBmcm9tICcuLi8uLi9lbmdpbmUvYnVpbGRlcnMvaXRlbSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgSXRlbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwic3RhdHVlMVwiKVxyXG4ud2l0aE5hbWUoXCJhIGh1Z2UgYW50IHN0YXR1ZVwiKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG4gICAgYEJlZm9yZSB5b3Ugc3RhbmRzIGEgYmlnIGFudCBzdGF0dWUuIE9uZSBvZiBpdHMgc2l4IGxlZ3MgaXMgZXh0ZW5kZWQgb3V0d2FyZHMsIGF0dGFjaGVkIHRvIGEgcm91bmQgZGV2aWNlLmBcclxuKVxyXG4uaXNUYWtlYWJsZShmYWxzZSlcclxuLmlzVXNhYmxlKHRydWUpXHJcbi53aXRoVXNlQ2FsbGJhY2soYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQucHJpbnQoYFlvdSBwcmVzcyB0aGUgYnV0dG9uIG9uIHRoZSByb3VuZCBkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIHN0YXR1ZSdzIGFybS5gKVxyXG59KVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IEl0ZW1CdWlsZGVyIGZyb20gJy4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJdGVtQnVpbGRlcigpXHJcbi53aXRoSUQoXCJzdGF0dWUyXCIpXHJcbi53aXRoTmFtZShcImEgaHVnZSBhbnQgc3RhdHVlXCIpXHJcbi53aXRoRGVzY3JpcHRpb24oXHJcbiAgICBgQmVmb3JlIHlvdSBzdGFuZHMgYSBiaWcgYW50IHN0YXR1ZS4gVHdvIG9mIGl0cyBzaXggbGVncyBpcyBleHRlbmRlZCBvdXR3YXJkcywgYXR0YWNoZWQgdG8gYSByZWN0YW5ndWxhciBkZXZpY2UuYFxyXG4pXHJcbi5pc1Rha2VhYmxlKGZhbHNlKVxyXG4uaXNVc2FibGUodHJ1ZSlcclxuLndpdGhVc2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbiAoY29udGV4dCkge1xyXG4gICAgY29udGV4dC5wcmludChgWW91IHByZXNzIHRoZSBidXR0b24gb24gdGhlIHJlY3Rhbmd1bGFyIGRldmljZSBhdHRhY2hlZCB0byB0aGUgc3RhdHVlJ3MgYXJtLmApXHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSAnLi4vLi4vZW5naW5lL2J1aWxkZXJzL2l0ZW0nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IEl0ZW1CdWlsZGVyKClcclxuLndpdGhJRChcInN0YXR1ZTNcIilcclxuLndpdGhOYW1lKFwiYSBodWdlIGFudCBzdGF0dWVcIilcclxuLndpdGhEZXNjcmlwdGlvbihcclxuICAgIGBCZWZvcmUgeW91IHN0YW5kcyBhIGJpZyBhbnQgc3RhdHVlLiBUaHJlZSBvZiBpdHMgc2l4IGxlZ3MgYXJlIGV4dGVuZGVkIG91dHdhcmRzLCBhdHRhY2hlZCB0byBhIHJvdW5kIHN0b25lIHRhYmxldC5gXHJcbilcclxuLmlzVGFrZWFibGUoZmFsc2UpXHJcbi5pc1VzYWJsZSh0cnVlKVxyXG4ud2l0aFVzZUNhbGxiYWNrKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBZb3UgZXhhbWluZSB0aGUgc3RvbmUgdGFibGV0IGluIHRoZSBzdGF0dWUncyBoYW5kcy4gVGhlcmUgYXBwZWFyIHRvIGJlIHN5bWJvbHMgb24gaXQgd2hpY2ggeW91IGNhbiBtYWtlIG91dC5gKTtcclxufSlcclxuLmNyZWF0ZSgpOyIsImV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIE1lb3dDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQucHJpbnQoYFlvdSBtZW93LmApO1xyXG59IiwiaW1wb3J0IEdhbWUgZnJvbSAnLi4vZW5naW5lJztcclxuaW1wb3J0IFJvb21zIGZyb20gJy4vcm9vbXMnO1xyXG5pbXBvcnQgSXRlbXMgZnJvbSAnLi9pdGVtcyc7XHJcbmltcG9ydCBNZW93Q29tbWFuZCBmcm9tICcuL2NvbW1hbmRzL21lb3cnO1xyXG5cclxuaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2F2ZVwiKSkge1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWdhbWUtZm91bmRcIikuaGlkZGVuID0gZmFsc2U7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZm9yZS1wbGF5XCIpLmhpZGRlbiA9IHRydWU7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvYWQtc2F2ZS1nYW1lXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWdhbWUtZm91bmRcIikuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBsYXktYXJlYVwiKS5oaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICBzdGFydEdhbWUoZmFsc2UpO1xyXG4gICAgfSlcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3RhcnQtbmV3LWdhbWVcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNhdmUtZ2FtZS1mb3VuZFwiKS5oaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGxheS1hcmVhXCIpLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgIHN0YXJ0R2FtZSh0cnVlKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmVnaW5cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmVmb3JlLXBsYXlcIikuaGlkZGVuID0gdHJ1ZTtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGxheS1hcmVhXCIpLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgc3RhcnRHYW1lKHRydWUpO1xyXG59KVxyXG5cclxuZnVuY3Rpb24gc3RhcnRHYW1lKG5ld0dhbWUpIHtcclxuICAgIGNvbnN0IGdhbWUgPSBuZXcgR2FtZShuZXdHYW1lKTtcclxuXHJcbiAgICBnYW1lLmluaXQoe1xyXG4gICAgICAgIHJvb21zOiBSb29tcyxcclxuICAgICAgICBjb21tYW5kczogW1xyXG4gICAgICAgICAgICBbW1wibWVvd1wiLCBcIm1ld1wiXSwgTWVvd0NvbW1hbmRdXHJcbiAgICAgICAgXSxcclxuICAgICAgICBpdGVtczogSXRlbXNcclxuICAgIH0pO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJoYXMiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInByZWZpeCIsIkV2ZW50cyIsIkVFIiwiZm4iLCJjb250ZXh0Iiwib25jZSIsInRoaXMiLCJhZGRMaXN0ZW5lciIsImVtaXR0ZXIiLCJldmVudCIsIlR5cGVFcnJvciIsImxpc3RlbmVyIiwiZXZ0IiwiX2V2ZW50cyIsInB1c2giLCJfZXZlbnRzQ291bnQiLCJjbGVhckV2ZW50IiwiRXZlbnRFbWl0dGVyIiwiY3JlYXRlIiwiX19wcm90b19fIiwiZXZlbnROYW1lcyIsImV2ZW50cyIsIm5hbWUiLCJuYW1lcyIsImNhbGwiLCJzbGljZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsImNvbmNhdCIsImxpc3RlbmVycyIsImhhbmRsZXJzIiwiaSIsImwiLCJsZW5ndGgiLCJlZSIsIkFycmF5IiwibGlzdGVuZXJDb3VudCIsImVtaXQiLCJhMSIsImEyIiwiYTMiLCJhNCIsImE1IiwiYXJncyIsImxlbiIsImFyZ3VtZW50cyIsInJlbW92ZUxpc3RlbmVyIiwidW5kZWZpbmVkIiwiYXBwbHkiLCJqIiwib24iLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJvZmYiLCJwcmVmaXhlZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibiIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiYSIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwib2JqIiwicHJvcCIsImNvbnN0cnVjdG9yIiwic3RhdGVzIiwiTWFwIiwic2V0IiwidmFsdWUiLCJzZXJpYWxpemUiLCJlbnRyaWVzIiwiZW50cnltYXAiLCJzdGF0ZSIsImRlc2VyaWFsaXplIiwiZGF0YSIsIlBsYXllciIsImludmVudG9yeSIsImN1cnJlbnRSb29tIiwiYWRkSXRlbSIsImlkIiwicmVtb3ZlSXRlbSIsImZpbHRlciIsIml0ZW0iLCJnZXRJbnZlbnRvcnkiLCJtYXAiLCJnZXRJdGVtIiwiQmFzZU91dHB1dCIsInNwZWFrIiwidGV4dCIsInN0b3AiLCJzZXRPcHRpb25zIiwib3B0aW9ucyIsIkFyaWFPdXRwdXQiLCJzdXBlciIsInRpbWVvdXQiLCJpbml0IiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwic3BlZWNoRGlzcGxheSIsImFwcGVuZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJjbGVhckRpc3BsYXkiLCJub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJwYXJhIiwic2V0VGltZW91dCIsImJpbmQiLCJpbm5lckhUTUwiLCJXZWJUVFNPdXRwdXQiLCJUVFMiLCJvdXRwdXQiLCJjcmVhdGVPdXRwdXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJSZXNvbmF0b3JBdWRpb0NvbnRleHQiLCJBdWRpb0NvbnRleHQiLCJnZXRDb250ZXh0IiwiY3JlYXRlR2FpbiIsImdldE91dHB1dERlc3RpbmF0aW9uIiwiZGVzdGluYXRpb24iLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJkZWNvZGVBdWRpb0RhdGEiLCJjcmVhdGVQYW5uZXIiLCJjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UiLCJlbGVtZW50IiwidmVjNCIsInZhbHVlcyIsIkZsb2F0MzJBcnJheSIsInh5enciLCJ4IiwieSIsInoiLCJ3IiwieHkiLCJ4eXoiLCJyIiwiZyIsImIiLCJyZyIsInJnYiIsInJnYmEiLCJhdCIsImluZGV4IiwicmVzZXQiLCJjb3B5IiwiZGVzdCIsIm5lZ2F0ZSIsImVxdWFscyIsInZlY3RvciIsInRocmVzaG9sZCIsImVwc2lsb24iLCJNYXRoIiwiYWJzIiwic3FydCIsInNxdWFyZWRMZW5ndGgiLCJhZGQiLCJzdWJ0cmFjdCIsIm11bHRpcGx5IiwiZGl2aWRlIiwic2NhbGUiLCJub3JtYWxpemUiLCJtdWx0aXBseU1hdDQiLCJtYXRyaXgiLCJtdWx0aXBseVZlYzQiLCJzdGF0aWMiLCJ2ZWN0b3IyIiwidGltZSIsInplcm8iLCJvbmUiLCJtYXQ0IiwiYWxsIiwicm93IiwiY29sIiwiZGV0ZXJtaW5hbnQiLCJhMDAiLCJhMDEiLCJhMDIiLCJhMDMiLCJhMTAiLCJhMTEiLCJhMTIiLCJhMTMiLCJhMjAiLCJhMjEiLCJhMjIiLCJhMjMiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJzZXRJZGVudGl0eSIsInRyYW5zcG9zZSIsInRlbXAwMSIsInRlbXAwMiIsInRlbXAwMyIsInRlbXAxMiIsInRlbXAxMyIsInRlbXAyMyIsImludmVyc2UiLCJkZXQwMCIsImRldDAxIiwiZGV0MDIiLCJkZXQwMyIsImRldDA0IiwiZGV0MDUiLCJkZXQwNiIsImRldDA3IiwiZGV0MDgiLCJkZXQwOSIsImRldDEwIiwiZGV0MTEiLCJkZXQiLCJiMCIsImIxIiwiYjIiLCJiMyIsIm11bHRpcGx5VmVjMyIsInZlYzMiLCJ0b01hdDMiLCJtYXQzIiwidG9JbnZlcnNlTWF0MyIsImRldDIxIiwidHJhbnNsYXRlIiwicm90YXRlIiwiYW5nbGUiLCJheGlzIiwicyIsInNpbiIsImMiLCJjb3MiLCJ0IiwiYjAwIiwiYjAxIiwiYjAyIiwiYjEwIiwiYjExIiwiYjEyIiwiYjIwIiwiYjIxIiwiYjIyIiwibGVmdCIsInJpZ2h0IiwiYm90dG9tIiwidG9wIiwibmVhciIsImZhciIsInJsIiwidGIiLCJmb3YiLCJhc3BlY3QiLCJ0YW4iLCJQSSIsImZydXN0dW0iLCJwb3NpdGlvbiIsInRhcmdldCIsInVwIiwiaWRlbnRpdHkiLCJkaWZmZXJlbmNlIiwiY3Jvc3MiLCJkb3QiLCJtMSIsIm0yIiwiYjAzIiwiYjEzIiwiYjIzIiwiYjMwIiwiYjMxIiwiYjMyIiwiYjMzIiwidmVjMiIsIm11bHRpcGx5TWF0MiIsIm11bHRpcGx5VmVjMiIsIm11bHRpcGx5TWF0MyIsIngyIiwic3F1YXJlZERpc3RhbmNlIiwieTIiLCJ0b01hdDQiLCJ0b1F1YXQiLCJtMDAiLCJtMDEiLCJtMDIiLCJtMTAiLCJtMTEiLCJtMTIiLCJtMjAiLCJtMjEiLCJtMjIiLCJmb3VyWFNxdWFyZWRNaW51czEiLCJmb3VyWVNxdWFyZWRNaW51czEiLCJmb3VyWlNxdWFyZWRNaW51czEiLCJiaWdnZXN0SW5kZXgiLCJmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEiLCJiaWdnZXN0VmFsIiwibXVsdCIsInF1YXQiLCJyb2xsIiwiYXRhbjIiLCJwaXRjaCIsInlhdyIsImFzaW4iLCJjYWxjdWxhdGVXIiwiaW52RG90IiwiY29uanVnYXRlIiwib3RoZXIiLCJxMXgiLCJxMXkiLCJxMXoiLCJxMXciLCJxMngiLCJxMnkiLCJxMnoiLCJxMnciLCJxeCIsInF5IiwicXoiLCJxdyIsIml4IiwiaXkiLCJpeiIsIml3IiwiejIiLCJ4eCIsInh6IiwieXkiLCJ5eiIsInp6Iiwid3giLCJ3eSIsInd6IiwicTEiLCJxMiIsInEyYSIsImswIiwiazEiLCJvbmVPdmVyU2luIiwiY29zSGFsZlRoZXRhIiwiaGFsZlRoZXRhIiwiYWNvcyIsInNpbkhhbGZUaGV0YSIsInJhdGlvQSIsInJhdGlvQiIsIm11bHRpcGx5QnlNYXQzIiwibXVsdGlwbHlCeVF1YXQiLCJxdWF0ZXJuaW9uIiwiZm9yd2FyZCIsIlJlc29uYXRvclNjZW5lIiwic2NlbmUiLCJjcmVhdGVTb3VyY2UiLCJwYW5uaW5nTW9kZWwiLCJkaXN0YW5jZU1vZGVsIiwibWF4RGlzdGFuY2UiLCJyZWZEaXN0YW5jZSIsImNvbm5lY3QiLCJnZXRPdXRwdXQiLCJnZXRJbnB1dCIsInNldExpc3RlbmVyUG9zaXRpb24iLCJzZXRQb3NpdGlvbiIsInNldExpc3RlbmVyT3JpZW50YXRpb24iLCJyYXd1cCIsImZ3ZCIsInNldE9yaWVudGF0aW9uIiwiRWZmZWN0Q2hhaW4iLCJncmFwaCIsImlucHV0IiwiZWZmZWN0cyIsImlucHV0Tm9kZSIsIm91dHB1dE5vZGUiLCJ1cGRhdGVDb25uZWN0aW9ucyIsImFwcGx5RWZmZWN0IiwiZWZmZWN0IiwicmVtb3ZlRWZmZWN0IiwiZm9yRWFjaCIsImN1cnJFZmZlY3QiLCJkaXNjb25uZWN0IiwiY3VycmVudCIsInByZXZpb3VzIiwiY29ubmVjdElucHV0IiwiY29ubmVjdE91dHB1dCIsIkF1ZGlvR3JhcGgiLCJzd2FwQ2hhbm5lbHMiLCJlZmZlY3RzQnVzIiwid29ybGRCdXMiLCJzZWNvbmRhcnlCdXMiLCJtYXN0ZXIiLCJjaGFubmVsU3BsaXR0ZXIiLCJjcmVhdGVDaGFubmVsU3BsaXR0ZXIiLCJjaGFubmVsTWVyZ2VyIiwiY3JlYXRlQ2hhbm5lbE1lcmdlciIsImNvbm5lY3RUb01hc3RlciIsImNvbm5lY3RUb1VJIiwiU291cmNlVHlwZSIsIkF1ZGlvU291cmNlIiwiYnVmZmVyIiwidHlwZSIsIldvcmxkU291cmNlIiwicGxheWJhY2tSYXRlIiwidm9sdW1lIiwiZ2FpbiIsImdldEJ1ZmZlciIsInNldEJ1ZmZlciIsInBsYXlPbkxvYWQiLCJwbGF5Iiwid2hlbiIsIm9mZnNldCIsImR1cmF0aW9uIiwicGxheWluZyIsImNyZWF0ZUNvbm5lY3Rpb25zIiwic3RhcnQiLCJsb29wIiwibG9vcGluZyIsInNjZW5lTm9kZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJzZXRQbGF5YmFja1JhdGUiLCJyYXRlIiwiZ2V0UGxheWJhY2tSYXRlIiwic2V0Vm9sdW1lIiwiZ2V0Vm9sdW1lIiwiVUlTb3VyY2UiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGVzdHJveSIsImZhZGVPdXQiLCJzZXRWYWx1ZUF0VGltZSIsImN1cnJlbnRUaW1lIiwiZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSIsImZhZGVJbiIsIkRhdGFQb29sSXRlbSIsImRlY29kZWREYXRhIiwiZ2V0RGF0YSIsInNldERhdGEiLCJnZXREZWNvZGVkRGF0YSIsInNldERlY29kZWREYXRhIiwiZ2V0TmFtZSIsInNldE5hbWUiLCJIVFRQTG9hZGVyIiwicGF0aCIsImZldGNoIiwiYXJyYXlCdWZmZXIiLCJEYXRhUG9vbCIsImxvYWRlciIsIm1heERhdGEiLCJkZWNvZGVkIiwia2V5cyIsImNsZWFyIiwiQ29udm9sdmVyIiwicGFyYW1zIiwiZWZmZWN0UGFyYW1zIiwiZWZmZWN0Tm9kZSIsImNvbnNvbGUiLCJsb2ciLCJjcmVhdGVDb252b2x2ZXIiLCJTdHJlYW1pbmdTb3VyY2UiLCJNYXN0ZXJTb3VyY2UiLCJjYW5QbGF5IiwicGxheU9uQXZhaWxhYmxlIiwicGF1c2UiLCJSZXNvbmF0b3IiLCJlbnZpcm9ubWVudEltcHVsc2UiLCJkYXRhUG9vbCIsImxvYWQiLCJsb2FkSW1tZWRpYXRlIiwic291cmNlIiwic3RyZWFtIiwiQXVkaW8iLCJjcm9zc09yaWdpbiIsInNldEVudmlyb25tZW50SW1wdWxzZSIsImZpbGUiLCJjbGVhckRhdGFQb29sIiwiU291bmQiLCJyZXMiLCJhbWJpZW5jZSIsIm11c2ljIiwiYW1iaWVuY2VWb2x1bWUiLCJtdXNpY1ZvbHVtZSIsInNmeFZvbHVtZSIsInByZXZpb3VzQW1iaWVuY2UiLCJwcmV2aW91c011c2ljIiwic291bmQiLCJhc3luYyIsInNldE11c2ljIiwic2V0SW1wdWxzZSIsInNldE11c2ljVm9sdW1lIiwic2V0QW1iaWVuY2VWb2x1bWUiLCJzZXRTRlhWb2x1bWUiLCJPdXRwdXQiLCJ0dHMiLCJoaXN0b3J5IiwiZ2V0RWxlbWVudEJ5SWQiLCJzYXkiLCJzdHJpbmciLCJzcGxpdCIsImxpbmUiLCJzZXRBbWJpZW5jZSIsIklucHV0IiwiY29tbWFuZEhhbmRsZXIiLCJvdXRwdXRIYW5kbGVyIiwiaGFuZGxlciIsImVjaG9JbnB1dCIsImlucHV0RmllbGQiLCJzZXRFY2hvIiwid2hpY2giLCJ2YWwiLCJkb0NvbW1hbmQiLCJkZWZhdWx0Q29tbWFuZHMiLCJleGFtaW5lUm9vbSIsIml0ZW1zIiwiZ2V0Um9vbSIsInBsYXllciIsImdldEl0ZW1zIiwiaW5jbHVkZXMiLCJkZXNjcmlwdGlvbiIsIm9uVXNlIiwicm9vbSIsInRha2VhYmxlIiwicHJpbnQiLCJvblRha2UiLCJvbkRyb3AiLCJzZXRJbnB1dEVjaG8iLCJzYXZlIiwicGFyc2VJbnQiLCJpdGVtRGVzY3JpcHRpb24iLCJkaXJlY3Rpb25NYXAiLCJDb21tYW5kcyIsImNvbW1hbmRzIiwiZW5hYmxlZCIsImFkZERlZmF1bHRDb21tYW5kcyIsInN0ciIsImRpcmVjdGlvbiIsIm1hdGNoRGlyZWN0aW9uIiwiZ2V0RXhpdCIsIm1vdmUiLCJhZGRDb21tYW5kIiwiZnVuYyIsImlzQXJyYXkiLCJjb21tYW5kIiwiYWRkQ29tbWFuZHMiLCJkaXIiLCJTZXJpYWxpemF0aW9uIiwic2F2ZW9iaiIsIml0ZW1Mb2NhdGlvbnMiLCJzZXJpYWxpemVJdGVtTG9jYXRpb25zIiwidm9sdW1lcyIsInNmeCIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwibG9hZG9iaiIsInBhcnNlIiwiZGVzZXJpYWxpemVJdGVtTG9jYXRpb25zIiwiZGVzZXJpYWxpemVQbGF5ZXIiLCJyb29tcyIsIm9iamVjdHMiLCJHYW1lIiwibmV3R2FtZSIsInZpc2l0ZWRSb29tcyIsImludGVydmFsIiwibGluZXMiLCJ3YWl0IiwiYWR2YW5jZVRpY2siLCJvblRpY2siLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJ0aXRsZSIsImZpcnN0RGVzY3JpcHRpb24iLCJleGFtaW5lSXRlbXMiLCJleGFtaW5lRXhpdHMiLCJleGl0cyIsImV4aXREZXNjcmlwdGlvbiIsImV4aXRLZXlzIiwiZXhpdCIsImZpbmQiLCJtcyIsInJvb21JRCIsIm5ld1Jvb20iLCJjYW5FeGl0IiwiY2FuRW50ZXIiLCJvbkV4aXQiLCJvbkVudGVyIiwiZW5hYmxlQ29tbWFuZElucHV0IiwiUm9vbSIsImVudGVyQ2FsbGJhY2siLCJleGl0Q2FsbGJhY2siLCJjYW5FbnRlckxvZ2ljIiwiY2FuRXhpdExvZ2ljIiwidGlja0NhbGxiYWNrIiwiaW1wdWxzZSIsImFkZEV4aXQiLCJhZGRFbnRlckNhbGxiYWNrIiwiY2FsbGJhY2siLCJhZGRFeGl0Q2FsbGJhY2siLCJhZGRFbnRlckxvZ2ljIiwiYWRkRXhpdExvZ2ljIiwiYWRkVGlja0NhbGxiYWNrIiwiUm9vbUJ1aWxkZXIiLCJ3aXRoSUQiLCJJRCIsIndpdGhUaXRsZSIsIndpdGhGaXJzdERlc2NyaXB0aW9uIiwid2l0aERlc2NyaXB0aW9uIiwid2l0aEV4aXQiLCJ3aXRoSXRlbSIsIml0ZW1JRCIsIndpdGhFbnRlckNhbGxiYWNrIiwid2l0aEV4aXRDYWxsYmFjayIsIndpdGhFbnRlckxvZ2ljIiwid2l0aEV4aXRMb2dpYyIsIndpdGhUaWNrIiwid2l0aE11c2ljIiwid2l0aEFtYmllbmNlIiwid2l0aEltcHVsc2UiLCJ0ZWxsIiwiSXRlbSIsInVzYWJsZSIsInVzZUNhbGxiYWNrIiwidGFrZUNhbGxiYWNrIiwiZHJvcENhbGxiYWNrIiwiYWRkVXNlQ2FsbGJhY2siLCJhZGRUYWtlQ2FsbGJhY2siLCJhZGREcm9wQ2FsbGJhY2siLCJJdGVtQnVpbGRlciIsIndpdGhOYW1lIiwiaXNVc2FibGUiLCJpc1Rha2VhYmxlIiwid2l0aFVzZUNhbGxiYWNrIiwid2l0aFRha2VDYWxsYmFjayIsIndpdGhEcm9wQ2FsbGJhY2siLCJ3aXRoVGlja0NhbGxiYWNrIiwiY2VudHJhbDEiLCJzdGF0dWUxIiwic3RhdHVlMiIsInN0YXR1ZTMiLCJzdGF0dWU0IiwiTWVvd0NvbW1hbmQiLCJzdGFydEdhbWUiLCJoaWRkZW4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app_web/index.html b/app_web/index.html index 88fc593..de3f60a 100644 --- a/app_web/index.html +++ b/app_web/index.html @@ -1 +1 @@ -Assassin bug

Assassin bug

\ No newline at end of file +Assassin bug

Assassin bug

Welcome

\ No newline at end of file diff --git a/doc/area-design.md b/doc/area-design.md deleted file mode 100644 index f4a7f52..0000000 --- a/doc/area-design.md +++ /dev/null @@ -1,8 +0,0 @@ -# Insect lair - -## start - -A small alcove - -### first - diff --git a/doc/design.md b/doc/design.md new file mode 100644 index 0000000..dc1f00e --- /dev/null +++ b/doc/design.md @@ -0,0 +1,6 @@ +You slowly wake up with a major headache. Thoughts begin to filter through your tired mind. Thoughts you don't remember having before. You notice a major headache with an influx of new senses that you didn't have before. You open your eyes. You touch your head. Upon checking yourself out you look around. +You're in a spherical room. The surface appears to be strangely smooth as if melted away by acid. There's a soft glow coming from one of the exits, the only exit you can see. +You get up and head north. You enter a tube-shaped tunnel. There are threads coming out of the ceiling and weaving along it. They eminate a soft glow, which is the light you remember seeing from the previous room. The structure appears to be insect made. The glow intensifies to the north. +You keep heading north and enter into a spherical room. It's rather large, able to contain hundreds of you. Threads criss-cross the walls and ceiling seemingly at random. There are tunnels heading into each cardinal direction, leading to statues of huge ants, each connected to a bunch of threads. There's a way down. +You head down. The tunnel gets wider and you start to hear water somewhere in the distance. The further you go, the more rough the sides appear to become. All of the threads from the previous floor converge in a room to the north. +You head north. You find yourself in a circular room. Where everything else appeared to be spherical, this has walls with 90 degree angles. A stream of water runs in from the east and leads to a small bason in the middle of the room, and connect to a glowing orb which floats there. diff --git a/doc/object-design.md b/doc/object-design.md deleted file mode 100644 index e69de29..0000000 diff --git a/doc/puzzle-design.md b/doc/puzzle-design.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/engine/index.js b/src/engine/index.js index d8fad20..1eb2073 100644 --- a/src/engine/index.js +++ b/src/engine/index.js @@ -25,6 +25,13 @@ export default class Game { this.output.say(string); } + async tell(lines, time) { + for (let line of lines) { + this.print(line); + await this.wait(time); + } + } + init(data) { this.rooms = data.rooms.map((room) => { room.context = this; diff --git a/src/engine/output.js b/src/engine/output.js index 389951a..9e8efae 100644 --- a/src/engine/output.js +++ b/src/engine/output.js @@ -10,6 +10,7 @@ export default class Output { } say(string) { + if (string === "") return; this.sound.play(`assets/scroll.wav`); const node = document.createElement("p"); string.split("\n").forEach((line) => { @@ -18,7 +19,7 @@ export default class Output { // this.tts.speak(line, false); }); this.history.appendChild(node); - this.tts.speak(string); + // this.tts.speak(string); } play(file) { diff --git a/src/engine/sound.js b/src/engine/sound.js index bfcd2d5..1af39b4 100644 --- a/src/engine/sound.js +++ b/src/engine/sound.js @@ -9,6 +9,8 @@ export default class Sound { this.ambienceVolume = 1; this.musicVolume = 1; this.sfxVolume = 1; + this.previousAmbience = ""; + this.previousMusic = ""; } play(file) { @@ -18,6 +20,7 @@ export default class Sound { } async setAmbience(file) { + if (file === this.previousAmbience) return; if (this.ambience) { const previousAmbience = this.ambience; this.ambience = null; @@ -25,6 +28,7 @@ export default class Sound { setTimeout(() => previousAmbience.destroy(), 6000); } if (!file) return; + this.previousAmbience = file; this.ambience = this.res.stream(file, 0); this.ambience.setVolume(this.ambienceVolume); this.ambience.play(); @@ -33,12 +37,14 @@ export default class Sound { } setMusic(file) { + if (file === this.previousMusic) return; if (this.music) { const previousMusic = this.music; setTimeout(() => previousMusic.fadeOut(2), 500); setTimeout(() => previousMusic.destroy(), 2000); } if (!file) return; + this.previousMusic = file; this.music = this.res.stream(file, 1); this.music.setVolume(this.musicVolume); this.music.play(); diff --git a/src/game/items/index.js b/src/game/items/index.js index 7911f71..24ce98a 100644 --- a/src/game/items/index.js +++ b/src/game/items/index.js @@ -1,9 +1,17 @@ import Stone from './stone'; import Torch from './torch'; import Cup from './cup'; +import Statue1 from './statue1'; +import statue2 from './statue2'; +import statue3 from './statue3'; +import statue4 from './statue4'; export default [ Stone, Torch, - Cup + Cup, + Statue1, + statue2, + statue3, + statue4 ] \ No newline at end of file diff --git a/src/game/items/statue1.js b/src/game/items/statue1.js new file mode 100644 index 0000000..4f6b87c --- /dev/null +++ b/src/game/items/statue1.js @@ -0,0 +1,14 @@ +import ItemBuilder from '../../engine/builders/item'; + +export default new ItemBuilder() +.withID("statue1") +.withName("a huge ant statue") +.withDescription( + `Before you stands a big ant statue. One of its six legs is extended outwards, attached to a round device.` +) +.isTakeable(false) +.isUsable(true) +.withUseCallback(async function (context) { + context.print(`You press the button on the round device attached to the statue's arm.`) +}) +.create(); \ No newline at end of file diff --git a/src/game/items/statue2.js b/src/game/items/statue2.js new file mode 100644 index 0000000..0b2a120 --- /dev/null +++ b/src/game/items/statue2.js @@ -0,0 +1,14 @@ +import ItemBuilder from '../../engine/builders/item'; + +export default new ItemBuilder() +.withID("statue2") +.withName("a huge ant statue") +.withDescription( + `Before you stands a big ant statue. Two of its six legs is extended outwards, attached to a rectangular device.` +) +.isTakeable(false) +.isUsable(true) +.withUseCallback(async function (context) { + context.print(`You press the button on the rectangular device attached to the statue's arm.`) +}) +.create(); \ No newline at end of file diff --git a/src/game/items/statue3.js b/src/game/items/statue3.js new file mode 100644 index 0000000..7effdbf --- /dev/null +++ b/src/game/items/statue3.js @@ -0,0 +1,14 @@ +import ItemBuilder from '../../engine/builders/item'; + +export default new ItemBuilder() +.withID("statue3") +.withName("a huge ant statue") +.withDescription( + `Before you stands a big ant statue. Three of its six legs are extended outwards, attached to a round stone tablet.` +) +.isTakeable(false) +.isUsable(true) +.withUseCallback(async function (context) { + context.print(`You examine the stone tablet in the statue's hands. There appear to be symbols on it which you can make out.`); +}) +.create(); \ No newline at end of file diff --git a/src/game/items/statue4.js b/src/game/items/statue4.js new file mode 100644 index 0000000..8cbab9b --- /dev/null +++ b/src/game/items/statue4.js @@ -0,0 +1,14 @@ +import ItemBuilder from '../../engine/builders/item'; + +export default new ItemBuilder() +.withID("statue4") +.withName("a huge ant statue") +.withDescription( + `Before you is a big statue of an ant, in the process of falling over. All of its legs are bent at the joints.` +) +.isTakeable(false) +.isUsable(true) +.withUseCallback(async function (context) { + context.print(`You can't seem to figure out what to do with this yet.`) +}) +.create(); \ No newline at end of file diff --git a/src/game/rooms/index.js b/src/game/rooms/index.js index d883f28..208d647 100644 --- a/src/game/rooms/index.js +++ b/src/game/rooms/index.js @@ -1,9 +1,5 @@ -import Start from './start'; -import Tunnel1 from './tunnel1'; -import tunnel2 from './tunnel2'; +import Lair from './lair'; export default [ - Start, - Tunnel1, - tunnel2 + ...Lair ]; \ No newline at end of file diff --git a/src/game/rooms/lair/central1.js b/src/game/rooms/lair/central1.js new file mode 100644 index 0000000..3cb4b7f --- /dev/null +++ b/src/game/rooms/lair/central1.js @@ -0,0 +1,20 @@ +import RoomBuilder from "../../../engine/builders/room"; + +export default new RoomBuilder() +.withID("central1") +.withTitle("A large spherical chamber") +.withFirstDescription( +`You exit the tunnel into a large, spherical chamber. +There are many more threads across the walls and ceiling here, the glow enveloping you fully in its unnatural light. +The chamber appears to be large, able to fit hundreds of you inside. +To the northeast, northwest, southeast and southwest you notice large statues representing ants. Threads seem to lead right into them.` +) +.withDescription( +`A large, spherical chamber. Glowing threads criss-cross the walls and ceiling. Around you, statues of ants.` +) +.withExit("northwest", "statue1") +.withExit("northeast", "statue2") +.withExit("southwest", "statue3") +.withExit("southeast", "statue4") +.withExit("south", "tunnel1") +.create(); \ No newline at end of file diff --git a/src/game/rooms/lair/index.js b/src/game/rooms/lair/index.js new file mode 100644 index 0000000..d546408 --- /dev/null +++ b/src/game/rooms/lair/index.js @@ -0,0 +1,17 @@ +import Start from './start'; +import Tunnel1 from './tunnel1'; +import central1 from './central1'; +import statue1 from './statue1'; +import statue2 from './statue2'; +import statue3 from './statue3'; +import statue4 from '../../items/statue4'; + +export default [ + Start, + Tunnel1, + central1, + statue1, + statue2, + statue3, + statue4 +]; \ No newline at end of file diff --git a/src/game/rooms/lair/start.js b/src/game/rooms/lair/start.js new file mode 100644 index 0000000..c3d9506 --- /dev/null +++ b/src/game/rooms/lair/start.js @@ -0,0 +1,35 @@ +import RoomBuilder from '../../../engine/builders/room'; + +export default new RoomBuilder() +.withID("start") +.withTitle("A small spherical alcove") +.withFirstDescription( +`You find yourself in a small, spherical alcove. It feels cold and dark, save from a dim glow which seems to be eluminating the area from the north. +The surface appears to be unnaturally smooth, as if melted away using acidic means. It's warm to the touch.` +) +.withDescription( +`A spherical alcove. The smooth surface appears to be melted away using acidic means. There's a dim glow shining in from the north.` +) +.withExit("north", "tunnel1") +.withEnterCallback(async function(context) { + if (context.state.get("start.awoken")) return; + const { output, wait } = context; + context.enableCommandInput(false); + await context.tell([ + "You slowly wake up.", + "you're not sure if you were ever conscious about waking up, but right now, you're clearly aware that you were previously asleep.", + "In fact, a lot of your thoughts seem foreign to you.", + "You're not sure how to feel about this.", + "God the headache...", + "OK, time to think about this.", + "Huh, something else you never did before.", + "Where are you?", + "You reach up and touch your head.", + "OK, that seems to be in order. Your antennae are still there, your mouth parts seem in tact...", + "Hmm. All this is strange.", + "No use sitting around. You get up and slowly examine your surroundings." + ], 3000); + context.enableCommandInput(true); + context.state.set("start.awoken", true); +}) +.create(); \ No newline at end of file diff --git a/src/game/rooms/lair/statue1.js b/src/game/rooms/lair/statue1.js new file mode 100644 index 0000000..5380cdc --- /dev/null +++ b/src/game/rooms/lair/statue1.js @@ -0,0 +1,15 @@ +import RoomBuilder from "../../../engine/builders/room"; + +export default new RoomBuilder() +.withID("statue1") +.withTitle("The northwestern part of the central chamber") +.withFirstDescription( + `You walk over to the northwestern part of the central chamber. + It is almost entirely taken up by a huge ant statue. One of its six legs are extended outwards, attached to which is a small, round device.` +) +.withDescription( + `` +) +.withExit("southeast", "central1") +.withItem("statue1") +.create(); \ No newline at end of file diff --git a/src/game/rooms/lair/statue2.js b/src/game/rooms/lair/statue2.js new file mode 100644 index 0000000..24cf3a5 --- /dev/null +++ b/src/game/rooms/lair/statue2.js @@ -0,0 +1,15 @@ +import RoomBuilder from "../../../engine/builders/room"; + +export default new RoomBuilder() +.withID("statue2") +.withTitle("The northeastern part of the central chamber") +.withFirstDescription( + `You walk over to the northeastern part of the central chamber. + It is almost entirely taken up by a huge ant statue. Two of its six legs are extended outwards, attached to which is a large, rectangular device.` +) +.withDescription( + `` +) +.withExit("southwest", "central1") +.withItem("statue2") +.create(); \ No newline at end of file diff --git a/src/game/rooms/lair/statue3.js b/src/game/rooms/lair/statue3.js new file mode 100644 index 0000000..c1a6d8f --- /dev/null +++ b/src/game/rooms/lair/statue3.js @@ -0,0 +1,15 @@ +import RoomBuilder from "../../../engine/builders/room"; + +export default new RoomBuilder() +.withID("statue3") +.withTitle("The southwestern part of the central chamber") +.withFirstDescription( + `You walk over to the southwestern part of the central chamber. + It is almost entirely taken up by a huge ant statue. Three of its six legs are extended outwards, attached to which is a round stone tablet.` +) +.withDescription( + `` +) +.withExit("northeast", "central1") +.withItem("statue3") +.create(); \ No newline at end of file diff --git a/src/game/rooms/lair/statue4.js b/src/game/rooms/lair/statue4.js new file mode 100644 index 0000000..101b34a --- /dev/null +++ b/src/game/rooms/lair/statue4.js @@ -0,0 +1,15 @@ +import RoomBuilder from "../../../engine/builders/room"; + +export default new RoomBuilder() +.withID("statue4") +.withTitle("The southeastern part of the central chamber") +.withFirstDescription( + `You walk over to the southeastern part of the central chamber. + It is almost entirely taken up by the statue of a huge ant, which appears to be in the process of falling over. All of its six legs are slightly bent at each joint.` +) +.withDescription( + `` +) +.withExit("northwest", "central1") +.withItem("statue4") +.create(); \ No newline at end of file diff --git a/src/game/rooms/lair/tunnel1.js b/src/game/rooms/lair/tunnel1.js new file mode 100644 index 0000000..ba4906f --- /dev/null +++ b/src/game/rooms/lair/tunnel1.js @@ -0,0 +1,15 @@ +import RoomBuilder from '../../../engine/builders/room'; + +export default new RoomBuilder() +.withID("tunnel1") +.withTitle("A long dark tunnel") +.withFirstDescription( +`You slowly make your way out of the little alcove, heading north into a smooth, tube-shaped tunnel. +You notice razor thin threads coming out of the ceiling, weaving and slithering along the length of the tunnel towards the north. Thery provide a dim glow, which must have been the light you saw before.` +) +.withDescription( +`A tube-shaped tunnel. Thin threads seem to exit the ceiling here, eminating a soft glow.` +) +.withExit("south", "start") +.withExit("north", "central1") +.create(); \ No newline at end of file diff --git a/src/game/rooms/start.js b/src/game/rooms/start.js deleted file mode 100644 index fcc4614..0000000 --- a/src/game/rooms/start.js +++ /dev/null @@ -1,33 +0,0 @@ -import RoomBuilder from '../../engine/builders/room'; - -export default new RoomBuilder() -.withID("start") -.withTitle("The starting room") -.withFirstDescription( -`You set foot in your very first ever room. -You're not quite sure what you were supposed to expect, but it definitely wasn't this. -I mean who would expect a boring old room like this one? Ugh. -Just... make it stop. Please.` -) -.withDescription("The first room. Nothing special about it.") -.withExit("north", "tunnel_1") -.withExit("northwest", "tunnel_2") -.withEnterCallback(async function(context) { - if (context.state.get("start.awoken")) return; - const { output, wait } = context; - context.enableCommandInput(false); - output.say("You slowly wake up"); - await wait(5000); - output.say("It's strange. You never used to be able to be conscious about the fact that you were waking up."); - await wait(5000); - output.say("Yet here we are."); - context.enableCommandInput(true); - context.state.set("start.awoken", true); -}) -.withItem("stone") -.withItem("cup") -.withItem("torch") -.withAmbience("assets/cave1.wav") -.withMusic("assets/music1.wav") -.withImpulse("assets/Greek7EchoHall.wav") -.create(); \ No newline at end of file diff --git a/src/game/rooms/tunnel1.js b/src/game/rooms/tunnel1.js deleted file mode 100644 index 775ef20..0000000 --- a/src/game/rooms/tunnel1.js +++ /dev/null @@ -1,12 +0,0 @@ -import RoomBuilder from '../../engine/builders/room'; - -export default new RoomBuilder() -.withID("tunnel_1") -.withTitle("A long dark tunnel") -.withFirstDescription("You first step foot in this dark loomy tunnel.") -.withDescription("The walls are wet. Everything is wet. Ugh. Why do you even.") -.withExit("south", "start") -.withAmbience("assets/windy1.wav") -.withMusic("assets/music2.wav") -.withImpulse("assets/parkingGarage.wav") -.create(); \ No newline at end of file diff --git a/src/game/rooms/tunnel2.js b/src/game/rooms/tunnel2.js deleted file mode 100644 index 0a3248e..0000000 --- a/src/game/rooms/tunnel2.js +++ /dev/null @@ -1,13 +0,0 @@ -import RoomBuilder from "../../engine/builders/room"; - -export default new RoomBuilder() -.withID("tunnel_2") -.withTitle("A long, winding tunnel") -// .withFirstDescription( - // `You step out from your hidy hole into a thin, winding tunnel. The walls and ceiling appear to get thinner and thinner, space slowly dwindling away to nothing.` -// ) -.withDescription( - `A tunnel that ends in a bowl shape.` -) -.withExit("southeast", "start") -.create(); \ No newline at end of file