(()=>{"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