2 lines
322 KiB
JavaScript
2 lines
322 KiB
JavaScript
var Engine;(()=>{"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 h(t,e,i,h,a){if("function"!=typeof i)throw new TypeError("The listener must be a function");var u=new n(i,h||t,a),r=s?s+e:e;return t._events[r]?t._events[r].fn?t._events[r]=[t._events[r],u]:t._events[r].push(u):(t._events[r]=u,t._eventsCount++),t}function a(t,e){0==--t._eventsCount?t._events=new i:delete t._events[e]}function u(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),(new i).__proto__||(s=!1)),u.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},u.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,h=i.length,a=new Array(h);n<h;n++)a[n]=i[n].fn;return a},u.prototype.listenerCount=function(t){var e=s?s+t:t,i=this._events[e];return i?i.fn?1:i.length:0},u.prototype.emit=function(t,e,i,n,h,a){var u=s?s+t:t;if(!this._events[u])return!1;var r,l,o=this._events[u],c=arguments.length;if(o.fn){switch(o.once&&this.removeListener(t,o.fn,void 0,!0),c){case 1:return o.fn.call(o.context),!0;case 2:return o.fn.call(o.context,e),!0;case 3:return o.fn.call(o.context,e,i),!0;case 4:return o.fn.call(o.context,e,i,n),!0;case 5:return o.fn.call(o.context,e,i,n,h),!0;case 6:return o.fn.call(o.context,e,i,n,h,a),!0}for(l=1,r=new Array(c-1);l<c;l++)r[l-1]=arguments[l];o.fn.apply(o.context,r)}else{var d,v=o.length;for(l=0;l<v;l++)switch(o[l].once&&this.removeListener(t,o[l].fn,void 0,!0),c){case 1:o[l].fn.call(o[l].context);break;case 2:o[l].fn.call(o[l].context,e);break;case 3:o[l].fn.call(o[l].context,e,i);break;case 4:o[l].fn.call(o[l].context,e,i,n);break;default:if(!r)for(d=1,r=new Array(c-1);d<c;d++)r[d-1]=arguments[d];o[l].fn.apply(o[l].context,r)}}return!0},u.prototype.on=function(t,e,s){return h(this,t,e,s,!1)},u.prototype.once=function(t,e,s){return h(this,t,e,s,!0)},u.prototype.removeListener=function(t,e,i,n){var h=s?s+t:t;if(!this._events[h])return this;if(!e)return a(this,h),this;var u=this._events[h];if(u.fn)u.fn!==e||n&&!u.once||i&&u.context!==i||a(this,h);else{for(var r=0,l=[],o=u.length;r<o;r++)(u[r].fn!==e||n&&!u[r].once||i&&u[r].context!==i)&&l.push(u[r]);l.length?this._events[h]=1===l.length?l[0]:l:a(this,h)}return this},u.prototype.removeAllListeners=function(t){var e;return t?(e=s?s+t:t,this._events[e]&&a(this,e)):(this._events=new i,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=s,u.EventEmitter=u,t.exports=u}},e={};function s(i){var n=e[i];if(void 0!==n)return n.exports;var h=e[i]={exports:{}};return t[i](h,h.exports,s),h.exports}s.n=t=>{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),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var i={};(()=>{s.r(i),s.d(i,{AssetManager:()=>v,BaseItem:()=>T,CheckboxItem:()=>R,EditItem:()=>B,EventBus:()=>m,EventItem:()=>p,Input:()=>I,Menu:()=>Q,MenuItem:()=>$,SelectorItem:()=>V,SliderItem:()=>U,TTS:()=>F,World:()=>f});var t=s(729),e=s.n(t);function n(t,e){return t?`${t}/${e}`:e}var h=function(t,e,s,i){return new(s||(s=Promise))((function(n,h){function a(t){try{r(i.next(t))}catch(t){h(t)}}function u(t){try{r(i.throw(t))}catch(t){h(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(a,u)}r((i=i.apply(t,e||[])).next())}))};class a extends(e()){constructor(t,e,s=""){super(),this.storage=t,this.queue=e,this.basePath=s}setBasePath(t){this.basePath=this.basePath}download(){return h(this,void 0,void 0,(function*(){const t=new Map;let e=0;for(;this.queue.length()>0;){const s=this.queue.pop(),i=yield this.downloadItem(n(this.basePath,s));t.set(s,i),e++,this.emit("download.progress",{downloaded:e,remaining:this.queue.length()})}return t}))}downloadItem(t){return h(this,void 0,void 0,(function*(){const e=yield this.storage.get(t);if(e)return e;const s=yield fetch(t);return this.storage.add(t,s),s}))}}class u{constructor(){this.items=[]}add(t){return this.items.push(t),this.items}remove(t){return this.items=this.items.filter((e=>e!==t)),this.items}pop(){return this.items.pop()}length(){return this.items.length}}var r=function(t,e,s,i){return new(s||(s=Promise))((function(n,h){function a(t){try{r(i.next(t))}catch(t){h(t)}}function u(t){try{r(i.throw(t))}catch(t){h(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(a,u)}r((i=i.apply(t,e||[])).next())}))};class l{constructor(t){this.id=t}init(){return r(this,void 0,void 0,(function*(){this.cache=yield caches.open(this.id)}))}add(t,e){return r(this,void 0,void 0,(function*(){return yield this.cache.put(t,e),!0}))}get(t){return r(this,void 0,void 0,(function*(){return yield this.cache.match(t)}))}setManifest(t){return r(this,void 0,void 0,(function*(){this.manifest=t,function(t){const e=localStorage.getItem("manifest");return e?JSON.parse(e).version===t.version||(localStorage.setItem("manifest",t),!1):(localStorage.setItem("manifest",JSON.stringify(t)),!1)}(this.manifest)||(yield this.clear())}))}clear(){return r(this,void 0,void 0,(function*(){(yield this.cache.keys()).forEach((t=>r(this,void 0,void 0,(function*(){yield this.cache.delete(t)}))))}))}}var o,c,d=function(t,e,s,i){return new(s||(s=Promise))((function(n,h){function a(t){try{r(i.next(t))}catch(t){h(t)}}function u(t){try{r(i.throw(t))}catch(t){h(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(a,u)}r((i=i.apply(t,e||[])).next())}))};class v extends(e()){constructor(t,e){super(),this.name=t,this.basePath=e,this.queue=new u,this.storage=new l(t),this.downloader=new a(this.storage,this.queue,this.basePath),console.log("Asset manager initialized")}init(){return d(this,void 0,void 0,(function*(){return yield this.storage.init(),!0}))}setManifest(t){return d(this,void 0,void 0,(function*(){return this.manifest=yield function(t){return e=this,s=void 0,n=function*(){try{const e=yield fetch(t);console.log(e);const s=yield e.text();return console.log("Parsing: ",s),(void 0).parse(s)}catch(t){alert(`Error occured: ${t.toString()}`)}},new((i=void 0)||(i=Promise))((function(t,h){function a(t){try{r(n.next(t))}catch(t){h(t)}}function u(t){try{r(n.throw(t))}catch(t){h(t)}}function r(e){var s;e.done?t(e.value):(s=e.value,s instanceof i?s:new i((function(t){t(s)}))).then(a,u)}r((n=n.apply(e,s||[])).next())}));var e,s,i,n}(`${this.basePath}/${t}`),this.storage.setManifest(this.manifest),this.manifest}))}enqueue(t){this.queue.add(t)}download(){return d(this,void 0,void 0,(function*(){return yield this.downloader.download()}))}downloadFromManifest(t){return d(this,void 0,void 0,(function*(){this.manifest[t].forEach((t=>this.enqueue(t))),this.downloader.on("download.progress",(t=>this.emit("progress",t)));const e=yield this.downloader.download();return this.downloader.off("download.progress"),e}))}downloadFile(t){return d(this,void 0,void 0,(function*(){return yield this.downloader.downloadItem(n(this.basePath,t))}))}setBasePath(t){this.basePath=this.basePath,this.downloader.setBasePath(this.basePath)}clearCache(){this.storage.clear()}}class y{constructor(){this.components=new Map,this.id=0}addComponent(t){let e=new t;e.id=t.id,this.components.set(t.id,e)}removeComponent(t){this.components.delete(t.id)}getComponentIDs(){return[...this.components.keys()]}getComponent(t){return this.components.get(t.id)}getComponentByID(t){return this.components.get(t)}}class m{constructor(){this.events=new Map}emit(t,e={}){let s=this.events.get(t);if(s)s.subscribers.forEach((t=>{t(e)}));else{let e=new p(t);this.events.set(t,e)}}subscribe(t,e){let s=this.events.get(t);s||(s=new p(t),this.events.set(t,s)),s.subscribers.push(e)}unsubscribe(t,e){if(this.events.has(t)){let s=this.events.get(t);s.subscribers=s.subscribers.filter((t=>t!==e)),s.subscribers.length<1&&this.events.delete(t)}}unsubscribeAll(t){this.events.has(t)&&this.events.delete(t)}}class p{constructor(t){this.id=t,this.subscribers=[]}}class x{constructor(t,e,s){this.include=t,this.exclude=e,this.world=s,this.isDirty=!0,this.results=new Array,this.includeComponentIds=t.map((t=>t.id)),this.excludeComponentIds=e.map((t=>t.id)),this.id=0}execute(){if(!this.isDirty&&this.results)return this.results;this.includeComponentIds=this.include.map((t=>this.world.componentNamesToIDs.get(t.name))),this.excludeComponentIds=this.exclude.map((t=>this.world.componentNamesToIDs.get(t.name)));const t=this.world.entities.filter((t=>{let e=t.getComponentIDs(),s=e.map((t=>this.excludeComponentIds.includes(t))).includes(!0);return e.filter((t=>this.includeComponentIds.includes(t))).length===this.includeComponentIds.length&&!s}));return t.length>0&&(this.isDirty=!1,this.results=t),t}}class w{constructor(t){this.executor=t}execute(t){this.executor&&this.executor(t)}}class f{constructor(){this.nextEntityID=0,this.nextComponentID=0,this.nextQueryID=0,this.entities=new Array,this.systems=new Set,this.components=new Map,this.componentNamesToIDs=new Map,this.queryCache=new Array,this.eventBus=new m}run(){this.systems.forEach((t=>{t.execute(this)}))}createSystem(t){const e=new w(t);this.systems.add(e)}addSystem(t){this.systems.add(t)}addEntity(t){this.entities.push(t),this.markQueriesDirty()}removeEntity(t){this.entities=this.entities.filter((e=>e!==t)),this.markQueriesDirty()}createEntity(t){const e=new y;return e.id=this.nextEntityID,this.nextEntityID++,t.forEach((t=>{this.componentNamesToIDs.has(t.name)?t.id=this.componentNamesToIDs.get(t.name):(this.componentNamesToIDs.set(t.name,this.nextComponentID),t.id=this.nextComponentID,this.nextComponentID++),e.addComponent(t)})),this.entities.push(e),this.markQueriesDirty(),e}extendEntity(t,e){const s=this.entities.find((e=>t.name===e.constructor.name)),i=new y;return i.id=this.nextEntityID,this.nextEntityID++,s.components.forEach((t=>{i.addComponent(this.components.get(t.id))})),e.forEach((t=>{this.componentNamesToIDs.has(t.name)?t.id=this.componentNamesToIDs.get(t.name):(this.componentNamesToIDs.set(t.name,this.nextComponentID),t.id=this.nextComponentID,this.nextComponentID++),i.addComponent(t)})),this.entities.push(i),i}createComponent(t){const e=t;return e.id=this.nextComponentID,this.nextComponentID++,this.components.set(e.id,e),this.componentNamesToIDs.set(t.name,t.id),e}query(t,e){const s=new x(t,e,this),i=this.queryCache.find((s=>s.include==t&&s.exclude==e));return i?i.execute():(this.queryCache.push(s),s.execute())}createQuery(t,e){const s=new x(t,e,this);return s.id=this.nextQueryID,this.nextQueryID++,this.queryCache.push(s),s}markQueriesDirty(){this.queryCache.forEach((t=>t.isDirty=!0))}}class g{constructor(t){this.element=t}getState(){}capture(t){}release(){}}class z extends g{constructor(t){super(t),this.keysDown=new Map,this.keysJustPressed=new Map,this.keysJustReleased=new Map,this.handleKeyDown=this.handleKeyDown.bind(this),this.handleKeyUp=this.handleKeyUp.bind(this)}capture(t){this.active=!0,this.preventDefault=t,this.element.addEventListener("keydown",this.handleKeyDown),this.element.addEventListener("keyup",this.handleKeyUp)}release(){this.active=!1,this.element.removeEventListener("keydown",this.handleKeyDown),this.element.removeEventListener("keyup",this.handleKeyUp)}getState(){const t={keysDown:new Map(this.keysDown),keysJustPressed:new Map(this.keysJustPressed),keysJustReleased:new Map(this.keysJustReleased)};return this.keysJustPressed.clear(),this.keysJustReleased.clear(),t}handleKeyDown(t){this.active&&this.preventDefault&&t.preventDefault(),this.keysDown.get(t.keyCode)||(this.keysDown.set(t.keyCode,!0),this.keysJustPressed.set(t.keyCode,!0),this.keysJustReleased.set(t.keyCode,!1))}handleKeyUp(t){this.active&&this.preventDefault&&t.preventDefault(),this.keysDown.get(t.keyCode)&&(this.keysDown.set(t.keyCode,!1),this.keysJustPressed.set(t.keyCode,!1),this.keysJustReleased.set(t.keyCode,!0))}}class b extends g{constructor(t){super(t),this.mousePosition=new M,this.mouseDelta=new C,this.mouseWheel=new C,this.mouseButtons=new k}capture(){this.handleMouseDown=this.handleMouseDown.bind(this),this.handleMouseMove=this.handleMouseMove.bind(this),this.handleMouseUp=this.handleMouseUp.bind(this),this.handlePointerChange=this.handlePointerChange.bind(this),this.active=!0,this.element.addEventListener("mousedown",this.handleMouseDown),this.element.addEventListener("mousemove",this.handleMouseMove),this.element.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("pointerlockchange",this.handlePointerChange)}release(){this.active=!1,this.element.removeEventListener("mousedown",this.handleMouseDown),this.element.removeEventListener("mousemove",this.handleMouseMove),this.element.removeEventListener("mouseup",this.handleMouseUp)}getState(){const{mouseButtons:t,mouseDelta:e,mousePosition:s,mouseWheel:i}=this,n={mouseButtons:{keysDown:new Map(this.mouseButtons.keysDown),keysJustPressed:new Map(this.mouseButtons.keysJustPressed),keysJustReleased:new Map(this.mouseButtons.keysJustReleased)},mouseDelta:e,mousePosition:s,mouseWheel:i};return this.mouseButtons.keysJustPressed.clear(),this.mouseButtons.keysJustReleased.clear(),this.mouseDelta.x=0,this.mouseDelta.y=0,n}handleMouseDown(t){this.active&&t.preventDefault(),this.mouseButtons.keysDown.set(t.button,!0),this.mouseButtons.keysJustPressed.set(t.button,!0),this.mouseButtons.keysJustReleased.set(t.button,!1)}handleMouseMove(t){this.active&&t.preventDefault(),this.mousePosition.x=t.clientX,this.mousePosition.y=t.clientY,this.mouseDelta.x=t.movementX,this.mouseDelta.y=t.movementY}handleMouseUp(t){this.active&&t.preventDefault(),this.mouseButtons.keysJustReleased.set(t.button,!0),this.mouseButtons.keysDown.set(t.button,!1),this.mouseButtons.keysJustPressed.set(t.button,!1)}handlePointerChange(){document.pointerLockElement!==this.element&&this.element.addEventListener("click",(()=>{this.element.requestPointerLock()}),{once:!0})}}class M{}class k{constructor(){this.keysDown=new Map,this.keysJustPressed=new Map,this.keysJustReleased=new Map}}class C{}class I{constructor(t,e){this.InputIDs=t,this.element=e,this.inputs=new Map,this.init()}init(){this.InputIDs.forEach((t=>{const e=new(function(t){switch(t){case"keyboard":return z;case"mouse":return b}}(t))(this.element);this.inputs.set(t,e)}))}addInput(t,e){return this.inputs.set(t,e),this}capture(t=!0){this.inputs.forEach((e=>e.capture(t)))}release(){this.inputs.forEach((t=>t.release()))}getState(){const t={};return this.inputs.forEach(((e,s)=>{e&&(t[s]=e.getState())})),t}}class D{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 D),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 D),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 D),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 D),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 D),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 D),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}}D.zero=new D([0,0,0,1]),D.one=new D([1,1,1,1]);class S{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 S);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],h=this.values[5],a=this.values[6],u=this.values[7],r=this.values[8],l=this.values[9],o=this.values[10],c=this.values[11],d=this.values[12],v=this.values[13],y=this.values[14],m=this.values[15];return(t*h-e*n)*(o*m-c*y)-(t*a-s*n)*(l*m-c*v)+(t*u-i*n)*(l*y-o*v)+(e*a-s*h)*(r*m-c*d)-(e*u-i*h)*(r*y-o*d)+(s*u-i*a)*(r*v-l*d)}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],h=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]=h,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],h=this.values[5],a=this.values[6],u=this.values[7],r=this.values[8],l=this.values[9],o=this.values[10],c=this.values[11],d=this.values[12],v=this.values[13],y=this.values[14],m=this.values[15],p=t*h-e*n,x=t*a-s*n,w=t*u-i*n,f=e*a-s*h,g=e*u-i*h,z=s*u-i*a,b=r*v-l*d,M=r*y-o*d,k=r*m-c*d,C=l*y-o*v,I=l*m-c*v,D=o*m-c*y;let S=p*D-x*I+w*C+f*k-g*M+z*b;return S?(S=1/S,this.values[0]=(h*D-a*I+u*C)*S,this.values[1]=(-e*D+s*I-i*C)*S,this.values[2]=(v*z-y*g+m*f)*S,this.values[3]=(-l*z+o*g-c*f)*S,this.values[4]=(-n*D+a*k-u*M)*S,this.values[5]=(t*D-s*k+i*M)*S,this.values[6]=(-d*z+y*w-m*x)*S,this.values[7]=(r*z-o*w+c*x)*S,this.values[8]=(n*I-h*k+u*b)*S,this.values[9]=(-t*I+e*k-i*b)*S,this.values[10]=(d*g-v*w+m*p)*S,this.values[11]=(-r*g+l*w-c*p)*S,this.values[12]=(-n*C+h*M-a*b)*S,this.values[13]=(t*C-e*M+s*b)*S,this.values[14]=(-d*f+v*x-y*p)*S,this.values[15]=(r*f-l*x+o*p)*S,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],h=this.values[4],a=this.values[5],u=this.values[6],r=this.values[7],l=this.values[8],o=this.values[9],c=this.values[10],d=this.values[11],v=this.values[12],y=this.values[13],m=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*h+f*l+g*v,this.values[1]=x*s+w*a+f*o+g*y,this.values[2]=x*i+w*u+f*c+g*m,this.values[3]=x*n+w*r+f*d+g*p,x=t.at(4),w=t.at(5),f=t.at(6),g=t.at(7),this.values[4]=x*e+w*h+f*l+g*v,this.values[5]=x*s+w*a+f*o+g*y,this.values[6]=x*i+w*u+f*c+g*m,this.values[7]=x*n+w*r+f*d+g*p,x=t.at(8),w=t.at(9),f=t.at(10),g=t.at(11),this.values[8]=x*e+w*h+f*l+g*v,this.values[9]=x*s+w*a+f*o+g*y,this.values[10]=x*i+w*u+f*c+g*m,this.values[11]=x*n+w*r+f*d+g*p,x=t.at(12),w=t.at(13),f=t.at(14),g=t.at(15),this.values[12]=x*e+w*h+f*l+g*v,this.values[13]=x*s+w*a+f*o+g*y,this.values[14]=x*i+w*u+f*c+g*m,this.values[15]=x*n+w*r+f*d+g*p,this}multiplyVec3(t){const e=t.x,s=t.y,i=t.z;return new A([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 D);const s=t.x,i=t.y,n=t.z,h=t.w;return e.x=this.values[0]*s+this.values[4]*i+this.values[8]*n+this.values[12]*h,e.y=this.values[1]*s+this.values[5]*i+this.values[9]*n+this.values[13]*h,e.z=this.values[2]*s+this.values[6]*i+this.values[10]*n+this.values[14]*h,e.w=this.values[3]*s+this.values[7]*i+this.values[11]*n+this.values[15]*h,e}toMat3(){return new P([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],h=this.values[6],a=this.values[8],u=this.values[9],r=this.values[10],l=r*n-h*u,o=-r*i+h*a,c=u*i-n*a;let d=t*l+e*o+s*c;return d?(d=1/d,new P([l*d,(-r*e+s*u)*d,(h*e-s*n)*d,o*d,(r*t-s*a)*d,(-h*t+s*i)*d,c*d,(-u*t+e*a)*d,(n*t-e*i)*d])):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,h=Math.sqrt(s*s+i*i+n*n);if(!h)return null;1!==h&&(h=1/h,s*=h,i*=h,n*=h);const a=Math.sin(t),u=Math.cos(t),r=1-u,l=this.values[0],o=this.values[1],c=this.values[2],d=this.values[3],v=this.values[4],y=this.values[5],m=this.values[6],p=this.values[7],x=this.values[8],w=this.values[9],f=this.values[10],g=this.values[11],z=s*s*r+u,b=i*s*r+n*a,M=n*s*r-i*a,k=s*i*r-n*a,C=i*i*r+u,I=n*i*r+s*a,D=s*n*r+i*a,S=i*n*r-s*a,E=n*n*r+u;return this.values[0]=l*z+v*b+x*M,this.values[1]=o*z+y*b+w*M,this.values[2]=c*z+m*b+f*M,this.values[3]=d*z+p*b+g*M,this.values[4]=l*k+v*C+x*I,this.values[5]=o*k+y*C+w*I,this.values[6]=c*k+m*C+f*I,this.values[7]=d*k+p*C+g*I,this.values[8]=l*D+v*S+x*E,this.values[9]=o*D+y*S+w*E,this.values[10]=c*D+m*S+f*E,this.values[11]=d*D+p*S+g*E,this}static frustum(t,e,s,i,n,h){const a=e-t,u=i-s,r=h-n;return new S([2*n/a,0,0,0,0,2*n/u,0,0,(e+t)/a,(i+s)/u,-(h+n)/r,-1,0,0,-h*n*2/r,0])}static perspective(t,e,s,i){const n=s*Math.tan(t*Math.PI/360),h=n*e;return S.frustum(-h,h,-n,n,s,i)}static orthographic(t,e,s,i,n,h){const a=e-t,u=i-s,r=h-n;return new S([2/a,0,0,0,0,2/u,0,0,0,0,-2/r,0,-(t+e)/a,-(i+s)/u,-(h+n)/r,1])}static lookAt(t,e,s=A.up){if(t.equals(e))return this.identity;const i=A.difference(t,e).normalize(),n=A.cross(s,i).normalize(),h=A.cross(i,n).normalize();return new S([n.x,h.x,i.x,0,n.y,h.y,i.y,0,n.z,h.z,i.z,0,-A.dot(n,t),-A.dot(h,t),-A.dot(i,t),1])}static product(t,e,s){const i=t.at(0),n=t.at(1),h=t.at(2),a=t.at(3),u=t.at(4),r=t.at(5),l=t.at(6),o=t.at(7),c=t.at(8),d=t.at(9),v=t.at(10),y=t.at(11),m=t.at(12),p=t.at(13),x=t.at(14),w=t.at(15),f=e.at(0),g=e.at(1),z=e.at(2),b=e.at(3),M=e.at(4),k=e.at(5),C=e.at(6),I=e.at(7),D=e.at(8),E=e.at(9),P=e.at(10),q=e.at(11),A=e.at(12),L=e.at(13),_=e.at(14),O=e.at(15);return s?(s.init([f*i+g*u+z*c+b*m,f*n+g*r+z*d+b*p,f*h+g*l+z*v+b*x,f*a+g*o+z*y+b*w,M*i+k*u+C*c+I*m,M*n+k*r+C*d+I*p,M*h+k*l+C*v+I*x,M*a+k*o+C*y+I*w,D*i+E*u+P*c+q*m,D*n+E*r+P*d+q*p,D*h+E*l+P*v+q*x,D*a+E*o+P*y+q*w,A*i+L*u+_*c+O*m,A*n+L*r+_*d+O*p,A*h+L*l+_*v+O*x,A*a+L*o+_*y+O*w]),s):new S([f*i+g*u+z*c+b*m,f*n+g*r+z*d+b*p,f*h+g*l+z*v+b*x,f*a+g*o+z*y+b*w,M*i+k*u+C*c+I*m,M*n+k*r+C*d+I*p,M*h+k*l+C*v+I*x,M*a+k*o+C*y+I*w,D*i+E*u+P*c+q*m,D*n+E*r+P*d+q*p,D*h+E*l+P*v+q*x,D*a+E*o+P*y+q*w,A*i+L*u+_*c+O*m,A*n+L*r+_*d+O*p,A*h+L*l+_*v+O*x,A*a+L*o+_*y+O*w])}}S.identity=(new S).setIdentity();class E{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 E),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 A);const i=t.x,n=t.y,h=e.x,a=i*e.y-n*h;return s.x=0,s.y=0,s.z=a,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 E);const i=t.x-e.x,n=t.y-e.y;let h=Math.sqrt(i*i+n*n);return 0===h?(s.x=0,s.y=0,s):(h=1/h,s.x=i*h,s.y=n*h,s)}static mix(t,e,s,i){i||(i=new E);const n=t.x,h=t.y,a=e.x,u=e.y;return i.x=n+s*(a-n),i.y=h+s*(u-h),i}static sum(t,e,s){return s||(s=new E),s.x=t.x+e.x,s.y=t.y+e.y,s}static difference(t,e,s){return s||(s=new E),s.x=t.x-e.x,s.y=t.y-e.y,s}static product(t,e,s){return s||(s=new E),s.x=t.x*e.x,s.y=t.y*e.y,s}static quotient(t,e,s){return s||(s=new E),s.x=t.x/e.x,s.y=t.y/e.y,s}}E.zero=new E([0,0]),E.one=new E([1,1]);class P{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 P);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],h=this.values[5],a=this.values[6],u=this.values[7],r=this.values[8];return t*(r*n-h*u)+e*(-r*i+h*a)+s*(u*i-n*a)}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],h=this.values[5],a=this.values[6],u=this.values[7],r=this.values[8],l=r*n-h*u,o=-r*i+h*a,c=u*i-n*a;let d=t*l+e*o+s*c;return d?(d=1/d,this.values[0]=l*d,this.values[1]=(-r*e+s*u)*d,this.values[2]=(h*e-s*n)*d,this.values[3]=o*d,this.values[4]=(r*t-s*a)*d,this.values[5]=(-h*t+s*i)*d,this.values[6]=c*d,this.values[7]=(-u*t+e*a)*d,this.values[8]=(n*t-e*i)*d,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],h=this.values[4],a=this.values[5],u=this.values[6],r=this.values[7],l=this.values[8],o=t.at(0),c=t.at(1),d=t.at(2),v=t.at(3),y=t.at(4),m=t.at(5),p=t.at(6),x=t.at(7),w=t.at(8);return this.values[0]=o*e+c*n+d*u,this.values[1]=o*s+c*h+d*r,this.values[2]=o*i+c*a+d*l,this.values[3]=v*e+y*n+m*u,this.values[4]=v*s+y*h+m*r,this.values[5]=v*i+y*a+m*l,this.values[6]=p*e+x*n+w*u,this.values[7]=p*s+x*h+w*r,this.values[8]=p*i+x*a+w*l,this}multiplyVec2(t,e){const s=t.x,i=t.y;return e?(e.xy=[s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]],e):new E([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 A([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 S([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],h=this.values[5],a=this.values[6],u=this.values[7],r=this.values[8],l=t-n-r,o=n-t-r,c=r-t-n;let d=0,v=t+n+r;l>v&&(v=l,d=1),o>v&&(v=o,d=2),c>v&&(v=c,d=3);const y=.5*Math.sqrt(v+1),m=.25/y,p=new q;switch(d){case 0:p.w=y,p.x=(h-u)*m,p.y=(a-s)*m,p.z=(e-i)*m;break;case 1:p.w=(h-u)*m,p.x=y,p.y=(e+i)*m,p.z=(a+s)*m;break;case 2:p.w=(a-s)*m,p.x=(e+i)*m,p.y=y,p.z=(h+u)*m;break;case 3:p.w=(e-i)*m,p.x=(a+s)*m,p.y=(h+u)*m,p.z=y}return p}rotate(t,e){let s=e.x,i=e.y,n=e.z,h=Math.sqrt(s*s+i*i+n*n);if(!h)return null;1!==h&&(h=1/h,s*=h,i*=h,n*=h);const a=Math.sin(t),u=Math.cos(t),r=1-u,l=this.values[0],o=this.values[1],c=this.values[2],d=this.values[4],v=this.values[5],y=this.values[6],m=this.values[8],p=this.values[9],x=this.values[10],w=s*s*r+u,f=i*s*r+n*a,g=n*s*r-i*a,z=s*i*r-n*a,b=i*i*r+u,M=n*i*r+s*a,k=s*n*r+i*a,C=i*n*r-s*a,I=n*n*r+u;return this.values[0]=l*w+d*f+m*g,this.values[1]=o*w+v*f+p*g,this.values[2]=c*w+y*f+x*g,this.values[3]=l*z+d*b+m*M,this.values[4]=o*z+v*b+p*M,this.values[5]=c*z+y*b+x*M,this.values[6]=l*k+d*C+m*I,this.values[7]=o*k+v*C+p*I,this.values[8]=c*k+y*C+x*I,this}static product(t,e,s){const i=t.at(0),n=t.at(1),h=t.at(2),a=t.at(3),u=t.at(4),r=t.at(5),l=t.at(6),o=t.at(7),c=t.at(8),d=e.at(0),v=e.at(1),y=e.at(2),m=e.at(3),p=e.at(4),x=e.at(5),w=e.at(6),f=e.at(7),g=e.at(8);return s?(s.init([d*i+v*a+y*l,d*n+v*u+y*o,d*h+v*r+y*c,m*i+p*a+x*l,m*n+p*u+x*o,m*h+p*r+x*c,w*i+f*a+g*l,w*n+f*u+g*o,w*h+f*r+g*c]),s):new P([d*i+v*a+y*l,d*n+v*u+y*o,d*h+v*r+y*c,m*i+p*a+x*l,m*n+p*u+x*o,m*h+p*r+x*c,w*i+f*a+g*l,w*n+f*u+g*o,w*h+f*r+g*c])}}P.identity=(new P).setIdentity();class q{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 q);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=q.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 h=Math.sqrt(e*e+s*s+i*i+n*n);return h?(h=1/h,t.x=e*h,t.y=s*h,t.z=i*h,t.w=n*h,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],h=t.x,a=t.y,u=t.z,r=t.w;return this.x=e*r+n*h+s*u-i*a,this.y=s*r+n*a+i*h-e*u,this.z=i*r+n*u+e*a-s*h,this.w=n*r-e*h-s*a-i*u,this}multiplyVec3(t,e){e||(e=new A);const s=t.x,i=t.y,n=t.z,h=this.x,a=this.y,u=this.z,r=this.w,l=r*s+a*n-u*i,o=r*i+u*s-h*n,c=r*n+h*i-a*s,d=-h*s-a*i-u*n;return e.x=l*r+d*-h+o*-u-c*-a,e.y=o*r+d*-a+c*-h-l*-u,e.z=c*r+d*-u+l*-a-o*-h,e}toMat3(t){t||(t=new P);const e=this.x,s=this.y,i=this.z,n=this.w,h=e+e,a=s+s,u=i+i,r=e*h,l=e*a,o=e*u,c=s*a,d=s*u,v=i*u,y=n*h,m=n*a,p=n*u;return t.init([1-(c+v),l+p,o-m,l-p,1-(r+v),d+y,o+m,d-y,1-(r+c)]),t}toMat4(t){t||(t=new S);const e=this.x,s=this.y,i=this.z,n=this.w,h=e+e,a=s+s,u=i+i,r=e*h,l=e*a,o=e*u,c=s*a,d=s*u,v=i*u,y=n*h,m=n*a,p=n*u;return t.init([1-(c+v),l+p,o-m,0,l-p,1-(r+v),d+y,0,o+m,d-y,1-(r+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 q),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 q);const i=t.x,n=t.y,h=t.z,a=t.w,u=e.x,r=e.y,l=e.z,o=e.w;return s.x=i*o+a*u+n*l-h*r,s.y=n*o+a*r+h*u-i*l,s.z=h*o+a*l+i*r-n*u,s.w=a*o-i*u-n*r-h*l,s}static cross(t,e,s){s||(s=new q);const i=t.x,n=t.y,h=t.z,a=t.w,u=e.x,r=e.y,l=e.z,o=e.w;return s.x=a*l+h*o+i*r-n*u,s.y=a*o-i*u-n*r-h*l,s.z=a*u+i*o+n*l-h*r,s.w=a*r+n*o+h*u-i*l,s}static shortMix(t,e,s,i){if(i||(i=new q),s<=0)return i.xyzw=t.xyzw,i;if(s>=1)return i.xyzw=e.xyzw,i;let n=q.dot(t,e);const h=e.copy();let a,u;if(n<0&&(h.inverse(),n=-n),n>.9999)a=1-s,u=0+s;else{const t=Math.sqrt(1-n*n),e=Math.atan2(t,n),i=1/t;a=Math.sin((1-s)*e)*i,u=Math.sin((0+s)*e)*i}return i.x=a*t.x+u*h.x,i.y=a*t.y+u*h.y,i.z=a*t.z+u*h.z,i.w=a*t.w+u*h.w,i}static mix(t,e,s,i){i||(i=new q);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 h=Math.acos(n),a=Math.sqrt(1-n*n);if(Math.abs(a)<.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 u=Math.sin((1-s)*h)/a,r=Math.sin(s*h)/a;return i.x=t.x*u+e.x*r,i.y=t.y*u+e.y*r,i.z=t.z*u+e.z*r,i.w=t.w*u+e.w*r,i}static fromAxisAngle(t,e,s){s||(s=new q),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}}q.identity=(new q).setIdentity();class A{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 A),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 q);const e=new A,s=new A;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 A);const i=t.x,n=t.y,h=t.z,a=e.x,u=e.y,r=e.z;return s.x=n*r-h*u,s.y=h*a-i*r,s.z=i*u-n*a,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){return e.x,t.x,e.y,t.y,e.z,t.z,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 A);const i=t.x-e.x,n=t.y-e.y,h=t.z-e.z;let a=Math.sqrt(i*i+n*n+h*h);return 0===a?(s.x=0,s.y=0,s.z=0,s):(a=1/a,s.x=i*a,s.y=n*a,s.z=h*a,s)}static mix(t,e,s,i){return i||(i=new A),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 A),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 A),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 A),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 A),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s}}A.zero=new A([0,0,0]),A.one=new A([1,1,1]),A.up=new A([0,1,0]),A.right=new A([1,0,0]),A.forward=new A([0,0,1]),(c=o||(o={}))[c.WorldSource=0]="WorldSource",c[c.UISource=1]="UISource",c[c.MasterSource=2]="MasterSource";class L{speak(t){}stop(){}setOptions(t){}}class _ extends L{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 O extends L{}class F{constructor(t=function(t="aria"){return"webtts"===t?O:_}()){this.output=t}speak(t){this.output.speak(t)}stop(){this.output.stop()}}class N{constructor(t=null){this.soundSet=null,this.data=new Map,this.soundSet=t}setSoundSet(t){this.soundSet=t}handleSound(t,e=null){switch(t){case"edit":this.handleEditSound(e);break;case"slider":this.handleSliderSound(e);break;case"selector":this.handleSelectorSound(e);break;case"checkbox":this.handleCheckboxSound(e);break;case"focus":this.handleFocusSound();break;case"choose":this.handleChooseSound();break;case"open":this.handleOpenSound();break;case"close":this.handleCloseSound();break;default:return}}handleEditSound(t){const e=this.data.get("edit")||"";t.length<=e.length?this.soundSet.delete&&this.soundSet.delete.play():this.soundSet.char&&this.soundSet.char.play(),this.data.set("edit",t)}handleSelectorSound(t){this.soundSet.scroller&&this.soundSet.scroller.play()}handleSliderSound(t){t<this.data.get("slider")?this.soundSet.sliderLeft&&this.soundSet.sliderLeft.play():this.soundSet.sliderRight&&this.soundSet.sliderRight.play(),this.data.set("slider",t)}handleFocusSound(){this.soundSet.move&&this.soundSet.move.play()}handleOpenSound(){this.soundSet.open&&this.soundSet.open.play()}handleCloseSound(){this.soundSet.close&&this.soundSet.close.play()}handleChooseSound(){this.soundSet.choose&&this.soundSet.choose.play()}handleCheckboxSound(t){!0===t?this.soundSet.checked&&this.soundSet.checked.play():this.soundSet.unchecked&&this.soundSet.unchecked.play()}}class J{constructor(t){this.menu=t}init(){this.menu.getContainer().addEventListener("keydown",this.handler.bind(this)),window.onpopstate=()=>this.menu.clickCancelAction()}handler(t){switch(t.key){case"ArrowDown":t.preventDefault(),this.menu.focusNext();break;case"ArrowUp":t.preventDefault(),this.menu.focusPrevious();break;case"Enter":t.preventDefault(),this.menu.clickDefaultAction();break;case"Escape":t.preventDefault(),this.menu.clickCancelAction()}}release(){this.menu.getContainer().removeEventListener("keydown",this.handler.bind(this)),window.onpopstate=null}}class T extends t{constructor(t,e){super(),this.id=t,this.title=e}getDOMNode(){let t=document.createTextNode(this.title),e=document.createElement("div");return e.appendChild(t),e}getContents(){}onFocus(t){this.emit("focus",this.id)}focus(){this.container&&this.container.focus()}click(){}getID(){return this.id}}class B extends T{constructor(t,e,s,i=!1){super(t,e),this.initialText=s,this.isPassword=i,this.contents=s}getDOMNode(){const t=document.createElement("div"),e=document.createElement("label");e.setAttribute("for",`edit_${this.id}`),e.textContent=this.title;const s=document.createElement("input");return s.id=`edit_${this.id}`,s.value=this.contents,s.addEventListener("keydown",this.onChange.bind(this)),s.addEventListener("focus",this.onFocus.bind(this)),this.isPassword&&(s.type="password"),t.appendChild(e),t.appendChild(s),t.addEventListener("focus",this.onFocus.bind(this)),this.editField=s,this.label=e,this.container=t,t}getContents(){return this.editField.value}onChange(t){this.emit("update",{type:"edit",value:this.editField.value})}focus(){this.editField&&this.editField.focus()}}class $ extends T{constructor(t,e){super(t,e)}getDOMNode(){const t=document.createElement("div"),e=document.createElement("button");return e.textContent=this.title,e.addEventListener("click",this.handleClick.bind(this)),e.addEventListener("focus",this.onFocus.bind(this)),t.appendChild(e),this.container=t,this.button=e,t}getContents(){return this.id}handleClick(t){this.emit("choose",this.id)}focus(){this.button&&this.button.focus()}click(){this.button.click()}}class V extends T{constructor(t,e,s){super(t,e),this.items=s,this.entries=[]}getDOMNode(){this.container=document.createElement("div"),this.listContainer=document.createElement("ul"),this.label=document.createElement("legend"),this.fieldSet=document.createElement("fieldset"),this.fieldSet.setAttribute("class","radiogroup"),this.fieldSet.id=`fs_selector_${this.id}`;const t=document.createTextNode(this.title);return this.label.appendChild(t),this.fieldSet.appendChild(this.label),this.buildEntries(),this.container.appendChild(this.fieldSet),this.container.addEventListener("focus",this.onFocus.bind(this)),this.container}buildEntries(){this.items.forEach(((t,e)=>{const s=document.createElement("input");s.type="radio",s.id=`${this.id}_${t.id}`,s.name=this.id,s.value=t.id||`${e}`,s.addEventListener("focus",this.onItemFocus.bind(this)),s.addEventListener("select",this.onSelectItem.bind(this)),s.addEventListener("change",this.onChangeItem.bind(this)),this.entries.push(s);const i=document.createElement("label");i.setAttribute("for",`${this.id}_${t.id}`),i.textContent=t.title,this.fieldSet.append(s),this.fieldSet.append(i)}))}onItemFocus(t){console.log("Item focused: ",t),this.emit("focus",this.id)}getContents(){return this.currentValue}onSelectItem(t){}onChangeItem(t){const e=document.querySelector(`input[name = "${this.id}"]:checked`);this.currentValue=this.items.find((t=>`${this.id}_${t.id}`===e.id)),this.emit("update",{type:"selector",value:this.currentValue})}focus(){(document.querySelector(`input[name = "${this.id}"]:checked`)||this.entries[0]).focus()}}class U extends T{constructor(t,e,s,i,n,h=null){super(t,e),this.min=s,this.max=i,this.step=n,this.defaultValue=h}getDOMNode(){return this.container=document.createElement("div"),this.label=document.createElement("label"),this.label.textContent=this.title,this.label.setAttribute("for",`slider_${this.id}`),this.slider=document.createElement("input"),this.slider.id=`slider_${this.id}`,this.slider.type="range",this.slider.setAttribute("min",this.min.toString()),this.slider.setAttribute("max",this.max.toString()),this.slider.setAttribute("step",this.step.toString()),this.defaultValue&&(this.slider.value=this.defaultValue.toString()),this.slider.addEventListener("change",this.onChange.bind(this)),this.slider.addEventListener("focus",this.onFocus.bind(this)),this.container.appendChild(this.label),this.container.appendChild(this.slider),this.container.addEventListener("focus",this.onFocus.bind(this)),this.container}getContents(){return this.slider.value}onChange(t){this.emit("update",{type:"slider",value:this.slider.value})}focus(){this.slider&&this.slider.focus()}}class R extends T{constructor(t,e){super(t,e)}getDOMNode(){return this.container=document.createElement("div"),this.label=document.createElement("label"),this.label.setAttribute("for",`chkbx_${this.id}`),this.label.textContent=this.title,this.checkboxElement=document.createElement("input"),this.checkboxElement.setAttribute("type","checkbox"),this.checkboxElement.setAttribute("id",`chkbx_${this.id}`),this.checkboxElement.addEventListener("focus",this.onFocus.bind(this)),this.checkboxElement.addEventListener("change",this.onChange.bind(this)),this.container.appendChild(this.label),this.container.appendChild(this.checkboxElement),this.container}getContents(){return this.checkboxElement.checked}onChange(t){this.emit("update",{type:"checkbox",value:this.checkboxElement.checked})}focus(){this.checkboxElement.focus()}}class Q extends t{constructor(t="Menu",e=[],s=null,i=null,n=null){super(),this.title=t,this.menuItems=e,this.soundSet=s,this.defaultAction=i,this.cancelAction=n,this.currentIndex=0,this.DOMNodes=[],this.currentIndex=0,this.currentItem=null,this.soundManager=new N(s),this.keyboardManager=new J(this),this.init()}init(){this.menuItems[this.currentIndex]&&this.menuItems[this.currentIndex].focus(),this.emit("init")}addItem(t){return this.menuItems.push(t),this.emit("item.add",t),this}setTitle(t){return this.title=t,this}setSoundSet(t){return this.soundSet=t,this.soundManager.setSoundSet(this.soundSet),this}setDefaultAction(t){return this.defaultAction=t,this}setCancelAction(t){return this.cancelAction=t,this}run(t){return e=this,s=void 0,n=function*(){return new Promise(((e,s)=>{this.element=t,this.container=document.createElement("div"),this.titleContainer=document.createElement("h1"),this.titleContainer.textContent=this.title,this.container.appendChild(this.titleContainer),this.menuItems.forEach((t=>{this.appendToContainer(t.getDOMNode()),t.on("update",this.handleItemUpdate.bind(this)),t.on("focus",this.onItemFocus.bind(this)),t.on("choose",(t=>{const s=this.compile();this.soundManager.handleSound("choose"),this.emit("choose",s),e(s)}))})),t.appendChild(this.container),this.soundManager.handleSound("open"),this.keyboardManager.init(),history.pushState({menu:!0},null,null)}))},new((i=void 0)||(i=Promise))((function(t,h){function a(t){try{r(n.next(t))}catch(t){h(t)}}function u(t){try{r(n.throw(t))}catch(t){h(t)}}function r(e){var s;e.done?t(e.value):(s=e.value,s instanceof i?s:new i((function(t){t(s)}))).then(a,u)}r((n=n.apply(e,s||[])).next())}));var e,s,i,n}close(){this.container.remove(),this.soundManager.handleSound("close"),this.keyboardManager.release(),this.DOMNodes.forEach((t=>{this.container.removeChild(t)})),this.emit("close")}appendToContainer(t){this.container.appendChild(t),this.DOMNodes.push(t)}handleItemUpdate(t){this.soundManager.handleSound(t.type,t.value),this.emit("update",this.compile())}onItemFocus(t){this.soundManager.handleSound("focus"),this.currentIndex=this.menuItems.indexOf(this.menuItems.find((e=>e.getID()==t))),this.emit("focus",this.menuItems[this.currentIndex])}focusNext(){this.currentIndex<this.menuItems.length-1&&this.currentIndex++,this.focusCurrentIndex()}focusPrevious(){this.currentIndex>0&&this.currentIndex--,this.focusCurrentIndex()}focusCurrentIndex(){this.menuItems[this.currentIndex].focus()}getCurrentFocus(){return this.menuItems[this.currentIndex]}getContainer(){return this.container}clickDefaultAction(){this.defaultAction&&this.menuItems.find((t=>t.getID()===this.defaultAction)).click()}clickCancelAction(){this.cancelAction&&this.menuItems.find((t=>t.getID()===this.cancelAction)).click()}compile(){const t=new Map;return this.menuItems.forEach((e=>t.set(e.getID(),e.getContents()))),t.set("selected",this.menuItems[this.currentIndex].getID()),t}}})(),Engine=i})();
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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aEMsU0FDbkQ0QyxLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vRW5naW5lLy4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW5naW5lL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0VuZ2luZS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9FbmdpbmUvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0VuZ2luZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0VuZ2luZS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvYXNzZXQtbWFuYWdlci91dGlscy5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L2Fzc2V0LW1hbmFnZXIvZG93bmxvYWRlci5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L2Fzc2V0LW1hbmFnZXIvcXVldWUuanMiLCJ3ZWJwYWNrOi8vRW5naW5lLy4vZGlzdC9hc3NldC1tYW5hZ2VyL21hbmlmZXN0LmpzIiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvYXNzZXQtbWFuYWdlci9zdG9yYWdlLmpzIiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvYXNzZXQtbWFuYWdlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3Jlc29uYXRvci9zb3VyY2VzL3NvdXJjZS10eXBlLmpzIiwid2VicGFjazovL0VuZ2luZS9leHRlcm5hbCB2YXIge1wiY29tbW9uanNcIjpcInlhbWxcIixcImNvbW1vbmpzMlwiOlwieWFtbFwiLFwiYW1kXCI6XCJ5YW1sXCIsXCJyb290XCI6XCJfXCJ9Iiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvZWNzL2VudGl0eS5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L2V2ZW50LWJ1cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L2Vjcy9xdWVyeS5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L2Vjcy9zeXN0ZW0uanMiLCJ3ZWJwYWNrOi8vRW5naW5lLy4vZGlzdC9lY3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW5naW5lLy4vZGlzdC9pbnB1dC9pbnB1dHMvYmFzZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L2lucHV0L2lucHV0cy9rZXlib2FyZC5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L2lucHV0L2lucHV0cy9tb3VzZS5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L2lucHV0L2luZGV4LmpzIiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvaW5wdXQvaW5wdXQtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3RzbS92ZWM0LmpzIiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvdHNtL21hdDQuanMiLCJ3ZWJwYWNrOi8vRW5naW5lLy4vZGlzdC90c20vdmVjMi5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3RzbS9tYXQzLmpzIiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvdHNtL3F1YXQuanMiLCJ3ZWJwYWNrOi8vRW5naW5lLy4vZGlzdC90c20vdmVjMy5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3R0cy9vdXRwdXRzL2Jhc2Utb3V0cHV0LmpzIiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvdHRzL291dHB1dHMvYXJpYS5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3R0cy9vdXRwdXRzL3dlYnR0cy5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3R0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3R0cy9vdXRwdXQtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3VpL21lbnUvc291bmQtbWFuYWdlci5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3VpL21lbnUva2V5Ym9hcmQtbWFuYWdlci5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3VpL21lbnUvaXRlbXMvYmFzZS1pdGVtLmpzIiwid2VicGFjazovL0VuZ2luZS8uL2Rpc3QvdWkvbWVudS9pdGVtcy9lZGl0LWl0ZW0uanMiLCJ3ZWJwYWNrOi8vRW5naW5lLy4vZGlzdC91aS9tZW51L2l0ZW1zL21lbnUtaXRlbS5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3VpL21lbnUvaXRlbXMvc2VsZWN0b3ItaXRlbS5qcyIsIndlYnBhY2s6Ly9FbmdpbmUvLi9kaXN0L3VpL21lbnUvaXRlbXMvc2xpZGVyLWl0ZW0uanMiLCJ3ZWJwYWNrOi8vRW5naW5lLy4vZGlzdC91aS9tZW51L2l0ZW1zL2NoZWNrYm94LWl0ZW0uanMiLCJ3ZWJwYWNrOi8vRW5naW5lLy4vZGlzdC91aS9tZW51L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBwcmVmaXggPSAnfic7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgdG8gY3JlYXRlIGEgc3RvcmFnZSBmb3Igb3VyIGBFRWAgb2JqZWN0cy5cbiAqIEFuIGBFdmVudHNgIGluc3RhbmNlIGlzIGEgcGxhaW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRXZlbnRzKCkge31cblxuLy9cbi8vIFdlIHRyeSB0byBub3QgaW5oZXJpdCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC4gSW4gc29tZSBlbmdpbmVzIGNyZWF0aW5nIGFuXG4vLyBpbnN0YW5jZSBpbiB0aGlzIHdheSBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGBPYmplY3QuY3JlYXRlKG51bGwpYCBkaXJlY3RseS5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBjaGFyYWN0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Rcbi8vIG92ZXJyaWRkZW4gb3IgdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy9cbmlmIChPYmplY3QuY3JlYXRlKSB7XG4gIEV2ZW50cy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vXG4gIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgYF9fcHJvdG9fX2AgcHJvcGVydHkgaXMgc3RpbGwgaW5oZXJpdGVkIGluXG4gIC8vIHNvbWUgb2xkIGJyb3dzZXJzIGxpa2UgQW5kcm9pZCA0LCBpUGhvbmUgNS4xLCBPcGVyYSAxMSBhbmQgU2FmYXJpIDUuXG4gIC8vXG4gIGlmICghbmV3IEV2ZW50cygpLl9fcHJvdG9fXykgcHJlZml4ID0gZmFsc2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29uY2U9ZmFsc2VdIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEVFKGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5vbmNlID0gb25jZSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IGVtaXR0ZXIsIG9uY2UpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0pIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gbGlzdGVuZXIsIGVtaXR0ZXIuX2V2ZW50c0NvdW50Kys7XG4gIGVsc2UgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XS5mbikgZW1pdHRlci5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBbZW1pdHRlci5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXTtcblxuICByZXR1cm4gZW1pdHRlcjtcbn1cblxuLyoqXG4gKiBDbGVhciBldmVudCBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZ0IFRoZSBFdmVudCBuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJFdmVudChlbWl0dGVyLCBldnQpIHtcbiAgaWYgKC0tZW1pdHRlci5fZXZlbnRzQ291bnQgPT09IDApIGVtaXR0ZXIuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgZWxzZSBkZWxldGUgZW1pdHRlci5fZXZlbnRzW2V2dF07XG59XG5cbi8qKlxuICogTWluaW1hbCBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UgdGhhdCBpcyBtb2xkZWQgYWdhaW5zdCB0aGUgTm9kZS5qc1xuICogYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkXG4gKiBsaXN0ZW5lcnMuXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICB2YXIgbmFtZXMgPSBbXVxuICAgICwgZXZlbnRzXG4gICAgLCBuYW1lO1xuXG4gIGlmICh0aGlzLl9ldmVudHNDb3VudCA9PT0gMCkgcmV0dXJuIG5hbWVzO1xuXG4gIGZvciAobmFtZSBpbiAoZXZlbnRzID0gdGhpcy5fZXZlbnRzKSkge1xuICAgIGlmIChoYXMuY2FsbChldmVudHMsIG5hbWUpKSBuYW1lcy5wdXNoKHByZWZpeCA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lKTtcbiAgfVxuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgcmV0dXJuIG5hbWVzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV2ZW50cykpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgaGFuZGxlcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWhhbmRsZXJzKSByZXR1cm4gW107XG4gIGlmIChoYW5kbGVycy5mbikgcmV0dXJuIFtoYW5kbGVycy5mbl07XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBoYW5kbGVyc1tpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIDA7XG4gIGlmIChsaXN0ZW5lcnMuZm4pIHJldHVybiAxO1xuICByZXR1cm4gbGlzdGVuZXJzLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQ2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBjYXNlIDQ6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIsIGEzKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFhcmdzKSBmb3IgKGogPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcbiAgaWYgKCFmbikge1xuICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKFxuICAgICAgbGlzdGVuZXJzLmZuID09PSBmbiAmJlxuICAgICAgKCFvbmNlIHx8IGxpc3RlbmVycy5vbmNlKSAmJlxuICAgICAgKCFjb250ZXh0IHx8IGxpc3RlbmVycy5jb250ZXh0ID09PSBjb250ZXh0KVxuICAgICkge1xuICAgICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZXZlbnRzID0gW10sIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuIHx8XG4gICAgICAgIChvbmNlICYmICFsaXN0ZW5lcnNbaV0ub25jZSkgfHxcbiAgICAgICAgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnRzLnB1c2gobGlzdGVuZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJlc2V0IHRoZSBhcnJheSwgb3IgcmVtb3ZlIGl0IGNvbXBsZXRlbHkgaWYgd2UgaGF2ZSBubyBtb3JlIGxpc3RlbmVycy5cbiAgICAvL1xuICAgIGlmIChldmVudHMubGVuZ3RoKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGV2ZW50cy5sZW5ndGggPT09IDEgPyBldmVudHNbMF0gOiBldmVudHM7XG4gICAgZWxzZSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IFtldmVudF0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQ7XG5cbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRzW2V2dF0pIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gQWxpYXMgbWV0aG9kcyBuYW1lcyBiZWNhdXNlIHBlb3BsZSByb2xsIGxpa2UgdGhhdC5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEFsbG93IGBFdmVudEVtaXR0ZXJgIHRvIGJlIGltcG9ydGVkIGFzIG1vZHVsZSBuYW1lc3BhY2UuXG4vL1xuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRQYXRoKGJhc2VQYXRoLCBwYXRoKSB7XHJcbiAgICBpZiAoIWJhc2VQYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZVBhdGh9LyR7cGF0aH1gO1xyXG4gICAgfVxyXG59XHJcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcclxuaW1wb3J0IHsgYnVpbGRQYXRoIH0gZnJvbSAnLi91dGlscyc7XHJcbmV4cG9ydCBjbGFzcyBEb3dubG9hZGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHN0b3JhZ2UsIHF1ZXVlLCBiYXNlUGF0aCA9ICcnKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlO1xyXG4gICAgICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcclxuICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XHJcbiAgICB9XHJcbiAgICBzZXRCYXNlUGF0aChwYXRoKSB7XHJcbiAgICAgICAgdGhpcy5iYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XHJcbiAgICB9XHJcbiAgICBkb3dubG9hZCgpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBjb25zdCBkb3dubG9hZGVkID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICBsZXQgbnVtRG93bmxvYWRlZCA9IDA7XHJcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnF1ZXVlLmxlbmd0aCgpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucXVldWUucG9wKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0geWllbGQgdGhpcy5kb3dubG9hZEl0ZW0oYnVpbGRQYXRoKHRoaXMuYmFzZVBhdGgsIHBhdGgpKTtcclxuICAgICAgICAgICAgICAgIGRvd25sb2FkZWQuc2V0KHBhdGgsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgbnVtRG93bmxvYWRlZCsrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkb3dubG9hZC5wcm9ncmVzcycsIHtcclxuICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGVkOiBudW1Eb3dubG9hZGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZzogdGhpcy5xdWV1ZS5sZW5ndGgoKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGRvd25sb2FkZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBkb3dubG9hZEl0ZW0ocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluQ2FjaGUgPSB5aWVsZCB0aGlzLnN0b3JhZ2UuZ2V0KHBhdGgpO1xyXG4gICAgICAgICAgICBpZiAoaW5DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluQ2FjaGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaChwYXRoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmFkZChwYXRoLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgUXVldWUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgYWRkKGZpbGUpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goZmlsZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXM7XHJcbiAgICB9XHJcbiAgICByZW1vdmUoZmlsZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gZmlsZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXM7XHJcbiAgICB9XHJcbiAgICBwb3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICB9XHJcbiAgICBsZW5ndGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgfVxyXG59XHJcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0ICogYXMgeWFtbCBmcm9tICd5YW1sJztcclxuZXhwb3J0IGZ1bmN0aW9uIE1hbmlmZXN0KG1hbmlmZXN0UGF0aCkge1xyXG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGZldGNoKG1hbmlmZXN0UGF0aCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJlc3BvbnNlLnRleHQoKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFBhcnNpbmc6IGAsIGRhdGEpO1xyXG4gICAgICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHlhbWwucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYW5pZmVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KGBFcnJvciBvY2N1cmVkOiAke2Vycm9yLnRvU3RyaW5nKCl9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrTWFuaWZlc3QobWFuaWZlc3QpIHtcclxuICAgIGNvbnN0IHByZXZNYW5pZmVzdFN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtYW5pZmVzdCcpO1xyXG4gICAgaWYgKCFwcmV2TWFuaWZlc3RTdHIpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWFuaWZlc3QnLCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCkpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByZXZNYW5pZmVzdCA9IEpTT04ucGFyc2UocHJldk1hbmlmZXN0U3RyKTtcclxuICAgIGlmIChwcmV2TWFuaWZlc3QudmVyc2lvbiA9PT0gbWFuaWZlc3QudmVyc2lvbikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21hbmlmZXN0JywgbWFuaWZlc3QpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmltcG9ydCB7IENoZWNrTWFuaWZlc3QgfSBmcm9tICcuL21hbmlmZXN0JztcclxuZXhwb3J0IGNsYXNzIEFzc2V0U3RvcmFnZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihpZCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBpZDtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZSA9IHlpZWxkIGNhY2hlcy5vcGVuKHRoaXMuaWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYWRkKHJlcXVlc3QsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgdGhpcy5jYWNoZS5wdXQocmVxdWVzdCwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGdldChyZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgdGhpcy5jYWNoZS5tYXRjaChyZXF1ZXN0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNldE1hbmlmZXN0KG1hbmlmZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdGhpcy5tYW5pZmVzdCA9IG1hbmlmZXN0O1xyXG4gICAgICAgICAgICBpZiAoIUNoZWNrTWFuaWZlc3QodGhpcy5tYW5pZmVzdCkpIHtcclxuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IHlpZWxkIHRoaXMuY2FjaGUua2V5cygpO1xyXG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IHsgRG93bmxvYWRlciB9IGZyb20gJy4vZG93bmxvYWRlcic7XHJcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZSc7XHJcbmltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnLi9tYW5pZmVzdCc7XHJcbmltcG9ydCB7IEFzc2V0U3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZSc7XHJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMyc7XHJcbmltcG9ydCB7IGJ1aWxkUGF0aCB9IGZyb20gJy4vdXRpbHMnO1xyXG5leHBvcnQgY2xhc3MgQXNzZXRNYW5hZ2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGJhc2VQYXRoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcclxuICAgICAgICB0aGlzLnF1ZXVlID0gbmV3IFF1ZXVlKCk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gbmV3IEFzc2V0U3RvcmFnZShuYW1lKTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkZXIgPSBuZXcgRG93bmxvYWRlcih0aGlzLnN0b3JhZ2UsIHRoaXMucXVldWUsIHRoaXMuYmFzZVBhdGgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBBc3NldCBtYW5hZ2VyIGluaXRpYWxpemVkYCk7XHJcbiAgICB9XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuc3RvcmFnZS5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2V0TWFuaWZlc3QocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFuaWZlc3QgPSB5aWVsZCBNYW5pZmVzdChgJHt0aGlzLmJhc2VQYXRofS8ke3BhdGh9YCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXRNYW5pZmVzdCh0aGlzLm1hbmlmZXN0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuaWZlc3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbnF1ZXVlKHBhdGgpIHtcclxuICAgICAgICB0aGlzLnF1ZXVlLmFkZChwYXRoKTtcclxuICAgIH1cclxuICAgIGRvd25sb2FkKCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIHRoaXMuZG93bmxvYWRlci5kb3dubG9hZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZG93bmxvYWRGcm9tTWFuaWZlc3Qoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgY29uc3QgcGF0aHMgPSB0aGlzLm1hbmlmZXN0W2tleV07XHJcbiAgICAgICAgICAgIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHRoaXMuZW5xdWV1ZShwYXRoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWRlci5vbignZG93bmxvYWQucHJvZ3Jlc3MnLCAoaW5mbykgPT4gdGhpcy5lbWl0KCdwcm9ncmVzcycsIGluZm8pKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB5aWVsZCB0aGlzLmRvd25sb2FkZXIuZG93bmxvYWQoKTtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZGVyLm9mZignZG93bmxvYWQucHJvZ3Jlc3MnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZG93bmxvYWRGaWxlKHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB0aGlzLmRvd25sb2FkZXIuZG93bmxvYWRJdGVtKGJ1aWxkUGF0aCh0aGlzLmJhc2VQYXRoLCBwYXRoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzZXRCYXNlUGF0aChwYXRoKSB7XHJcbiAgICAgICAgdGhpcy5iYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZGVyLnNldEJhc2VQYXRoKHRoaXMuYmFzZVBhdGgpO1xyXG4gICAgfVxyXG4gICAgY2xlYXJDYWNoZSgpIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgdmFyIFNvdXJjZVR5cGU7XHJcbihmdW5jdGlvbiAoU291cmNlVHlwZSkge1xyXG4gICAgU291cmNlVHlwZVtTb3VyY2VUeXBlW1wiV29ybGRTb3VyY2VcIl0gPSAwXSA9IFwiV29ybGRTb3VyY2VcIjtcclxuICAgIFNvdXJjZVR5cGVbU291cmNlVHlwZVtcIlVJU291cmNlXCJdID0gMV0gPSBcIlVJU291cmNlXCI7XHJcbiAgICBTb3VyY2VUeXBlW1NvdXJjZVR5cGVbXCJNYXN0ZXJTb3VyY2VcIl0gPSAyXSA9IFwiTWFzdGVyU291cmNlXCI7XHJcbn0pKFNvdXJjZVR5cGUgfHwgKFNvdXJjZVR5cGUgPSB7fSkpO1xyXG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gdW5kZWZpbmVkOyIsImV4cG9ydCBjbGFzcyBCYXNlRW50aXR5IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmlkID0gMDtcclxuICAgIH1cclxuICAgIGFkZENvbXBvbmVudChjb21wb25lbnQpIHtcclxuICAgICAgICBsZXQgY29tcCA9IG5ldyBjb21wb25lbnQoKTtcclxuICAgICAgICBjb21wLmlkID0gY29tcG9uZW50LmlkO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50cy5zZXQoY29tcG9uZW50LmlkLCBjb21wKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUNvbXBvbmVudChjb21wb25lbnQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudHMuZGVsZXRlKGNvbXBvbmVudC5pZCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb21wb25lbnRJRHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmNvbXBvbmVudHMua2V5cygpXTtcclxuICAgIH1cclxuICAgIGdldENvbXBvbmVudChjb21wb25lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRzLmdldChjb21wb25lbnQuaWQpO1xyXG4gICAgfVxyXG4gICAgZ2V0Q29tcG9uZW50QnlJRChpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudHMuZ2V0KGlkKTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgRXZlbnRCdXMge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudHMgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICBlbWl0KGlkLCBkYXRhID0ge30pIHtcclxuICAgICAgICBsZXQgZXYgPSB0aGlzLmV2ZW50cy5nZXQoaWQpO1xyXG4gICAgICAgIGlmICghZXYpIHtcclxuICAgICAgICAgICAgbGV0IGV2ID0gbmV3IEV2ZW50SXRlbShpZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLnNldChpZCwgZXYpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2LnN1YnNjcmliZXJzLmZvckVhY2goKHN1YnNjcmliZXIpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlcihkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHN1YnNjcmliZShpZCwgc3Vic2NyaWJlcikge1xyXG4gICAgICAgIGxldCBldiA9IHRoaXMuZXZlbnRzLmdldChpZCk7XHJcbiAgICAgICAgaWYgKCFldikge1xyXG4gICAgICAgICAgICBldiA9IG5ldyBFdmVudEl0ZW0oaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5zZXQoaWQsIGV2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZXYuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcclxuICAgIH1cclxuICAgIHVuc3Vic2NyaWJlKGlkLCBzdWJzY3JpYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgbGV0IGV2ID0gdGhpcy5ldmVudHMuZ2V0KGlkKTtcclxuICAgICAgICAgICAgZXYuc3Vic2NyaWJlcnMgPSBldi5zdWJzY3JpYmVycy5maWx0ZXIoKGZuKSA9PiBmbiAhPT0gc3Vic2NyaWJlcik7XHJcbiAgICAgICAgICAgIGlmIChldi5zdWJzY3JpYmVycy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5kZWxldGUoaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdW5zdWJzY3JpYmVBbGwoaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5ldmVudHMuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5kZWxldGUoaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgRXZlbnRJdGVtIHtcclxuICAgIGNvbnN0cnVjdG9yKGlkKSB7XHJcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMgPSBbXTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgUXVlcnkge1xyXG4gICAgY29uc3RydWN0b3IoaW5jbHVkZSwgZXhjbHVkZSwgd29ybGQpIHtcclxuICAgICAgICB0aGlzLmluY2x1ZGUgPSBpbmNsdWRlO1xyXG4gICAgICAgIHRoaXMuZXhjbHVkZSA9IGV4Y2x1ZGU7XHJcbiAgICAgICAgdGhpcy53b3JsZCA9IHdvcmxkO1xyXG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5pbmNsdWRlQ29tcG9uZW50SWRzID0gaW5jbHVkZS5tYXAoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50LmlkKTtcclxuICAgICAgICB0aGlzLmV4Y2x1ZGVDb21wb25lbnRJZHMgPSBleGNsdWRlLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQuaWQpO1xyXG4gICAgICAgIHRoaXMuaWQgPSAwO1xyXG4gICAgfVxyXG4gICAgZXhlY3V0ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNEaXJ0eSAmJiB0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkO1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUNvbXBvbmVudElkcyA9IHRoaXMuaW5jbHVkZS5tYXAoKGNvbXBvbmVudCkgPT4gdGhpcy53b3JsZC5jb21wb25lbnROYW1lc1RvSURzLmdldChjb21wb25lbnQubmFtZSkpO1xyXG4gICAgICAgIHRoaXMuZXhjbHVkZUNvbXBvbmVudElkcyA9IHRoaXMuZXhjbHVkZS5tYXAoKGNvbXBvbmVudCkgPT4gdGhpcy53b3JsZC5jb21wb25lbnROYW1lc1RvSURzLmdldChjb21wb25lbnQubmFtZSkpO1xyXG4gICAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy53b3JsZC5lbnRpdGllcy5maWx0ZXIoKGVudGl0eSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaWRzID0gZW50aXR5LmdldENvbXBvbmVudElEcygpO1xyXG4gICAgICAgICAgICAvLyBsZXQgaW5jbHVkZXMgPSBpZHMubWFwKGlkID0+IHRoaXMuaW5jbHVkZUNvbXBvbmVudElkcy5pbmNsdWRlcyhpZCkpLmluY2x1ZGVzKHRydWUpO1xyXG4gICAgICAgICAgICBsZXQgZXhjbHVkZXMgPSBpZHNcclxuICAgICAgICAgICAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLmV4Y2x1ZGVDb21wb25lbnRJZHMuaW5jbHVkZXMoaWQpKVxyXG4gICAgICAgICAgICAgICAgLmluY2x1ZGVzKHRydWUpO1xyXG4gICAgICAgICAgICBsZXQgaW5jbHVkZXMgPSBpZHMuZmlsdGVyKChpZCkgPT4gdGhpcy5pbmNsdWRlQ29tcG9uZW50SWRzLmluY2x1ZGVzKGlkKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcy5sZW5ndGggPT09IHRoaXMuaW5jbHVkZUNvbXBvbmVudElkcy5sZW5ndGggJiYgIWV4Y2x1ZGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlbnRpdGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBlbnRpdGllcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVudGl0aWVzO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBTeXN0ZW0ge1xyXG4gICAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcclxuICAgICAgICB0aGlzLmV4ZWN1dG9yID0gZXhlY3V0b3I7XHJcbiAgICB9XHJcbiAgICBleGVjdXRlKHdvcmxkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5leGVjdXRvcih3b3JsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJhc2VFbnRpdHkgfSBmcm9tICcuL2VudGl0eSc7XHJcbmltcG9ydCB7IEV2ZW50QnVzIH0gZnJvbSAnLi4vZXZlbnQtYnVzJztcclxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tICcuL3F1ZXJ5JztcclxuaW1wb3J0IHsgU3lzdGVtIH0gZnJvbSAnLi9zeXN0ZW0nO1xyXG5leHBvcnQgY2xhc3MgV29ybGQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0RW50aXR5SUQgPSAwO1xyXG4gICAgICAgIHRoaXMubmV4dENvbXBvbmVudElEID0gMDtcclxuICAgICAgICB0aGlzLm5leHRRdWVyeUlEID0gMDtcclxuICAgICAgICB0aGlzLmVudGl0aWVzID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gbmV3IFNldCgpO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWVzVG9JRHMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNhY2hlID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5ldmVudEJ1cyA9IG5ldyBFdmVudEJ1cygpO1xyXG4gICAgfVxyXG4gICAgcnVuKCkge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5mb3JFYWNoKChzeXN0ZW0pID0+IHtcclxuICAgICAgICAgICAgc3lzdGVtLmV4ZWN1dGUodGhpcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVTeXN0ZW0oc3lzdGVtRXhlY3V0b3IpIHtcclxuICAgICAgICBjb25zdCBuZXdTeXN0ZW0gPSBuZXcgU3lzdGVtKHN5c3RlbUV4ZWN1dG9yKTtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuYWRkKG5ld1N5c3RlbSk7XHJcbiAgICB9XHJcbiAgICBhZGRTeXN0ZW0oc3lzdGVtKSB7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmFkZChzeXN0ZW0pO1xyXG4gICAgfVxyXG4gICAgYWRkRW50aXR5KGVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuZW50aXRpZXMucHVzaChlbnRpdHkpO1xyXG4gICAgICAgIHRoaXMubWFya1F1ZXJpZXNEaXJ0eSgpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlRW50aXR5KGVudGl0eVRvUmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdGllcyA9IHRoaXMuZW50aXRpZXMuZmlsdGVyKChlbnRpdHkpID0+IGVudGl0eSAhPT0gZW50aXR5VG9SZW1vdmUpO1xyXG4gICAgICAgIHRoaXMubWFya1F1ZXJpZXNEaXJ0eSgpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlRW50aXR5KGNvbXBvbmVudHMpIHtcclxuICAgICAgICBjb25zdCBuZXdFbnRpdHkgPSBuZXcgQmFzZUVudGl0eSgpO1xyXG4gICAgICAgIG5ld0VudGl0eS5pZCA9IHRoaXMubmV4dEVudGl0eUlEO1xyXG4gICAgICAgIHRoaXMubmV4dEVudGl0eUlEKys7XHJcbiAgICAgICAgY29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50TmFtZXNUb0lEcy5oYXMoY29tcG9uZW50Lm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaWQgPSB0aGlzLmNvbXBvbmVudE5hbWVzVG9JRHMuZ2V0KGNvbXBvbmVudC5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50TmFtZXNUb0lEcy5zZXQoY29tcG9uZW50Lm5hbWUsIHRoaXMubmV4dENvbXBvbmVudElEKTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pZCA9IHRoaXMubmV4dENvbXBvbmVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0Q29tcG9uZW50SUQrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdFbnRpdHkuYWRkQ29tcG9uZW50KGNvbXBvbmVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lbnRpdGllcy5wdXNoKG5ld0VudGl0eSk7XHJcbiAgICAgICAgdGhpcy5tYXJrUXVlcmllc0RpcnR5KCk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0VudGl0eTtcclxuICAgIH1cclxuICAgIGV4dGVuZEVudGl0eShlbnRpdHksIGNvbXBvbmVudHMpIHtcclxuICAgICAgICBjb25zdCB0b0Nsb25lID0gdGhpcy5lbnRpdGllcy5maW5kKChmb3VuZCkgPT4gZW50aXR5Lm5hbWUgPT09IGZvdW5kLmNvbnN0cnVjdG9yLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBCYXNlRW50aXR5KCk7XHJcbiAgICAgICAgY2xvbmVkLmlkID0gdGhpcy5uZXh0RW50aXR5SUQ7XHJcbiAgICAgICAgdGhpcy5uZXh0RW50aXR5SUQrKztcclxuICAgICAgICB0b0Nsb25lLmNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGNsb25lZC5hZGRDb21wb25lbnQodGhpcy5jb21wb25lbnRzLmdldChjb21wb25lbnQuaWQpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb21wb25lbnRzLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21wb25lbnROYW1lc1RvSURzLmhhcyhjb21wb25lbnQubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pZCA9IHRoaXMuY29tcG9uZW50TmFtZXNUb0lEcy5nZXQoY29tcG9uZW50Lm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnROYW1lc1RvSURzLnNldChjb21wb25lbnQubmFtZSwgdGhpcy5uZXh0Q29tcG9uZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmlkID0gdGhpcy5uZXh0Q29tcG9uZW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRDb21wb25lbnRJRCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsb25lZC5hZGRDb21wb25lbnQoY29tcG9uZW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVudGl0aWVzLnB1c2goY2xvbmVkKTtcclxuICAgICAgICByZXR1cm4gY2xvbmVkO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0NvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgICAgICBuZXdDb21wb25lbnQuaWQgPSB0aGlzLm5leHRDb21wb25lbnRJRDtcclxuICAgICAgICB0aGlzLm5leHRDb21wb25lbnRJRCsrO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50cy5zZXQobmV3Q29tcG9uZW50LmlkLCBuZXdDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50TmFtZXNUb0lEcy5zZXQoY29tcG9uZW50Lm5hbWUsIGNvbXBvbmVudC5pZCk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbXBvbmVudDtcclxuICAgIH1cclxuICAgIHF1ZXJ5KGluY2x1ZGUsIGV4Y2x1ZGUpIHtcclxuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBRdWVyeShpbmNsdWRlLCBleGNsdWRlLCB0aGlzKTtcclxuICAgICAgICBjb25zdCBjYWNoZSA9IHRoaXMucXVlcnlDYWNoZS5maW5kKChpdGVtKSA9PiBpdGVtLmluY2x1ZGUgPT0gaW5jbHVkZSAmJiBpdGVtLmV4Y2x1ZGUgPT0gZXhjbHVkZSk7XHJcbiAgICAgICAgaWYgKGNhY2hlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5leGVjdXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucXVlcnlDYWNoZS5wdXNoKHF1ZXJ5KTtcclxuICAgICAgICByZXR1cm4gcXVlcnkuZXhlY3V0ZSgpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlUXVlcnkoaW5jbHVkZSwgZXhjbHVkZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3IFF1ZXJ5KGluY2x1ZGUsIGV4Y2x1ZGUsIHRoaXMpO1xyXG4gICAgICAgIG5ld1F1ZXJ5LmlkID0gdGhpcy5uZXh0UXVlcnlJRDtcclxuICAgICAgICB0aGlzLm5leHRRdWVyeUlEKys7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNhY2hlLnB1c2gobmV3UXVlcnkpO1xyXG4gICAgICAgIHJldHVybiBuZXdRdWVyeTtcclxuICAgIH1cclxuICAgIG1hcmtRdWVyaWVzRGlydHkoKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNhY2hlLmZvckVhY2goKHF1ZXJ5KSA9PiAocXVlcnkuaXNEaXJ0eSA9IHRydWUpKTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQmFzZUlucHV0IHtcclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgfVxyXG4gICAgZ2V0U3RhdGUoKSB7IH1cclxuICAgIGNhcHR1cmUocHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZWxlYXNlKCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlSW5wdXQgfSBmcm9tICcuL2Jhc2UtaW5wdXQnO1xyXG5leHBvcnQgY2xhc3MgS2V5Ym9hcmQgZXh0ZW5kcyBCYXNlSW5wdXQge1xyXG4gICAgY29uc3RydWN0b3IoZWxlbWVudCkge1xyXG4gICAgICAgIHN1cGVyKGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMua2V5c0Rvd24gPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5rZXlzSnVzdFByZXNzZWQgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5rZXlzSnVzdFJlbGVhc2VkID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5VXAgPSB0aGlzLmhhbmRsZUtleVVwLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBjYXB0dXJlKHByZXZlbnREZWZhdWx0KSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVLZXlVcCk7XHJcbiAgICB9XHJcbiAgICByZWxlYXNlKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuaGFuZGxlS2V5VXApO1xyXG4gICAgfVxyXG4gICAgZ2V0U3RhdGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGtleXNEb3duOiBuZXcgTWFwKHRoaXMua2V5c0Rvd24pLFxyXG4gICAgICAgICAgICBrZXlzSnVzdFByZXNzZWQ6IG5ldyBNYXAodGhpcy5rZXlzSnVzdFByZXNzZWQpLFxyXG4gICAgICAgICAgICBrZXlzSnVzdFJlbGVhc2VkOiBuZXcgTWFwKHRoaXMua2V5c0p1c3RSZWxlYXNlZClcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMua2V5c0p1c3RQcmVzc2VkLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5rZXlzSnVzdFJlbGVhc2VkLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlS2V5RG93bihldmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSAmJiB0aGlzLnByZXZlbnREZWZhdWx0KVxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmtleXNEb3duLmdldChldmVudC5rZXlDb2RlKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMua2V5c0Rvd24uc2V0KGV2ZW50LmtleUNvZGUsIHRydWUpO1xyXG4gICAgICAgIHRoaXMua2V5c0p1c3RQcmVzc2VkLnNldChldmVudC5rZXlDb2RlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLmtleXNKdXN0UmVsZWFzZWQuc2V0KGV2ZW50LmtleUNvZGUsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIGhhbmRsZUtleVVwKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlICYmIHRoaXMucHJldmVudERlZmF1bHQpXHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmtleXNEb3duLmdldChldmVudC5rZXlDb2RlKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMua2V5c0Rvd24uc2V0KGV2ZW50LmtleUNvZGUsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmtleXNKdXN0UHJlc3NlZC5zZXQoZXZlbnQua2V5Q29kZSwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMua2V5c0p1c3RSZWxlYXNlZC5zZXQoZXZlbnQua2V5Q29kZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmFzZUlucHV0IH0gZnJvbSAnLi9iYXNlLWlucHV0JztcclxuZXhwb3J0IGNsYXNzIE1vdXNlIGV4dGVuZHMgQmFzZUlucHV0IHtcclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBzdXBlcihlbGVtZW50KTtcclxuICAgICAgICB0aGlzLm1vdXNlUG9zaXRpb24gPSBuZXcgUG9zaXRpb24oKTtcclxuICAgICAgICB0aGlzLm1vdXNlRGVsdGEgPSBuZXcgRGVsdGEoKTtcclxuICAgICAgICB0aGlzLm1vdXNlV2hlZWwgPSBuZXcgRGVsdGEoKTtcclxuICAgICAgICB0aGlzLm1vdXNlQnV0dG9ucyA9IG5ldyBNb3VzZUJ1dHRvbnMoKTtcclxuICAgIH1cclxuICAgIGNhcHR1cmUoKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24gPSB0aGlzLmhhbmRsZU1vdXNlRG93bi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlTW91c2VNb3ZlID0gdGhpcy5oYW5kbGVNb3VzZU1vdmUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZU1vdXNlVXAgPSB0aGlzLmhhbmRsZU1vdXNlVXAuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJDaGFuZ2UgPSB0aGlzLmhhbmRsZVBvaW50ZXJDaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlTW91c2VEb3duKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVNb3VzZU1vdmUpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5oYW5kbGVNb3VzZVVwKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuaGFuZGxlUG9pbnRlckNoYW5nZSk7XHJcbiAgICB9XHJcbiAgICByZWxlYXNlKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlTW91c2VEb3duKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVNb3VzZU1vdmUpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5oYW5kbGVNb3VzZVVwKTtcclxuICAgIH1cclxuICAgIGdldFN0YXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHsgbW91c2VCdXR0b25zLCBtb3VzZURlbHRhLCBtb3VzZVBvc2l0aW9uLCBtb3VzZVdoZWVsIH0gPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0ge1xyXG4gICAgICAgICAgICBtb3VzZUJ1dHRvbnM6IHtcclxuICAgICAgICAgICAgICAgIGtleXNEb3duOiBuZXcgTWFwKHRoaXMubW91c2VCdXR0b25zLmtleXNEb3duKSxcclxuICAgICAgICAgICAgICAgIGtleXNKdXN0UHJlc3NlZDogbmV3IE1hcCh0aGlzLm1vdXNlQnV0dG9ucy5rZXlzSnVzdFByZXNzZWQpLFxyXG4gICAgICAgICAgICAgICAga2V5c0p1c3RSZWxlYXNlZDogbmV3IE1hcCh0aGlzLm1vdXNlQnV0dG9ucy5rZXlzSnVzdFJlbGVhc2VkKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtb3VzZURlbHRhLFxyXG4gICAgICAgICAgICBtb3VzZVBvc2l0aW9uLFxyXG4gICAgICAgICAgICBtb3VzZVdoZWVsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm1vdXNlQnV0dG9ucy5rZXlzSnVzdFByZXNzZWQuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLm1vdXNlQnV0dG9ucy5rZXlzSnVzdFJlbGVhc2VkLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5tb3VzZURlbHRhLnggPSAwO1xyXG4gICAgICAgIHRoaXMubW91c2VEZWx0YS55ID0gMDtcclxuICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVNb3VzZURvd24oZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmUpXHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5tb3VzZUJ1dHRvbnMua2V5c0Rvd24uc2V0KGV2ZW50LmJ1dHRvbiwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5tb3VzZUJ1dHRvbnMua2V5c0p1c3RQcmVzc2VkLnNldChldmVudC5idXR0b24sIHRydWUpO1xyXG4gICAgICAgIHRoaXMubW91c2VCdXR0b25zLmtleXNKdXN0UmVsZWFzZWQuc2V0KGV2ZW50LmJ1dHRvbiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlTW91c2VNb3ZlKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKVxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMubW91c2VQb3NpdGlvbi54ID0gZXZlbnQuY2xpZW50WDtcclxuICAgICAgICB0aGlzLm1vdXNlUG9zaXRpb24ueSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgdGhpcy5tb3VzZURlbHRhLnggPSBldmVudC5tb3ZlbWVudFg7XHJcbiAgICAgICAgdGhpcy5tb3VzZURlbHRhLnkgPSBldmVudC5tb3ZlbWVudFk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVNb3VzZVVwKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKVxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMubW91c2VCdXR0b25zLmtleXNKdXN0UmVsZWFzZWQuc2V0KGV2ZW50LmJ1dHRvbiwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5tb3VzZUJ1dHRvbnMua2V5c0Rvd24uc2V0KGV2ZW50LmJ1dHRvbiwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMubW91c2VCdXR0b25zLmtleXNKdXN0UHJlc3NlZC5zZXQoZXZlbnQuYnV0dG9uLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVQb2ludGVyQ2hhbmdlKCkge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5wb2ludGVyTG9ja0VsZW1lbnQgIT09IHRoaXMuZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVxdWVzdFBvaW50ZXJMb2NrKCk7XHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIG9uY2U6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBQb3NpdGlvbiB7XHJcbn1cclxuZXhwb3J0IGNsYXNzIE1vdXNlQnV0dG9ucyB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmtleXNEb3duID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMua2V5c0p1c3RQcmVzc2VkID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMua2V5c0p1c3RSZWxlYXNlZCA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgRGVsdGEge1xyXG59XHJcbiIsImltcG9ydCB7IGNyZWF0ZUlucHV0IH0gZnJvbSAnLi9pbnB1dC1mYWN0b3J5JztcclxuZXhwb3J0IGNsYXNzIElucHV0IHtcclxuICAgIGNvbnN0cnVjdG9yKElucHV0SURzLCBlbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5JbnB1dElEcyA9IElucHV0SURzO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuSW5wdXRJRHMuZm9yRWFjaCgoaW5wdXRJRCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0aGluZyA9IGNyZWF0ZUlucHV0KGlucHV0SUQpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB0aGluZyh0aGlzLmVsZW1lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0cy5zZXQoaW5wdXRJRCwgaW5zdGFuY2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYWRkSW5wdXQoaWQsIGlucHV0KSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc2V0KGlkLCBpbnB1dCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBjYXB0dXJlKHByZXZlbnREZWZhdWx0ID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiBpbnB1dC5jYXB0dXJlKHByZXZlbnREZWZhdWx0KSk7XHJcbiAgICB9XHJcbiAgICByZWxlYXNlKCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiBpbnB1dC5yZWxlYXNlKCkpO1xyXG4gICAgfVxyXG4gICAgZ2V0U3RhdGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7fTtcclxuICAgICAgICB0aGlzLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5wdXRJRCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQpXHJcbiAgICAgICAgICAgICAgICBzdGF0ZVtpbnB1dElEXSA9IGlucHV0LmdldFN0YXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEtleWJvYXJkIH0gZnJvbSAnLi9pbnB1dHMva2V5Ym9hcmQnO1xyXG5pbXBvcnQgeyBNb3VzZSB9IGZyb20gJy4vaW5wdXRzL21vdXNlJztcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlucHV0KGtleSkge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICBjYXNlICdrZXlib2FyZCc6XHJcbiAgICAgICAgICAgIHJldHVybiBLZXlib2FyZDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbW91c2UnOlxyXG4gICAgICAgICAgICByZXR1cm4gTW91c2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHZlYzQge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDQpO1xyXG4gICAgICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnh5encgPSB2YWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHooKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXooKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXp3KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXSwgdGhpcy52YWx1ZXNbM11dO1xyXG4gICAgfVxyXG4gICAgc2V0IHgodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHkodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHoodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHcodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5eih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIHNldCB4eXp3KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZ2V0IGcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgZ2V0IGIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgZ2V0IGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJnKCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdXTtcclxuICAgIH1cclxuICAgIGdldCByZ2IoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdXTtcclxuICAgIH1cclxuICAgIGdldCByZ2JhKCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXSwgdGhpcy52YWx1ZXNbM11dO1xyXG4gICAgfVxyXG4gICAgc2V0IHIodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IGcodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IGIodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IGEodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHJnKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgc2V0IHJnYih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIHNldCByZ2JhKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgICAgIHRoaXMueiA9IDA7XHJcbiAgICAgICAgdGhpcy53ID0gMDtcclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdGhpcy54O1xyXG4gICAgICAgIGRlc3QueSA9IHRoaXMueTtcclxuICAgICAgICBkZXN0LnogPSB0aGlzLno7XHJcbiAgICAgICAgZGVzdC53ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbmVnYXRlKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcclxuICAgICAgICBkZXN0LnogPSAtdGhpcy56O1xyXG4gICAgICAgIGRlc3QudyA9IC10aGlzLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBlcXVhbHModmVjdG9yLCB0aHJlc2hvbGQgPSBlcHNpbG9uKSB7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueCAtIHZlY3Rvci54KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnkgLSB2ZWN0b3IueSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy56IC0gdmVjdG9yLnopID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMudyAtIHZlY3Rvci53KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG4gICAgc3F1YXJlZExlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcclxuICAgIH1cclxuICAgIGFkZCh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKz0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICs9IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiArPSB2ZWN0b3IuejtcclxuICAgICAgICB0aGlzLncgKz0gdmVjdG9yLnc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzdWJ0cmFjdCh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLT0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC09IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAtPSB2ZWN0b3IuejtcclxuICAgICAgICB0aGlzLncgLT0gdmVjdG9yLnc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAqPSB2ZWN0b3IuejtcclxuICAgICAgICB0aGlzLncgKj0gdmVjdG9yLnc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBkaXZpZGUodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC89IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAvPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogLz0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53IC89IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2NhbGUodmFsdWUsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCAqPSB2YWx1ZTtcclxuICAgICAgICBkZXN0LnkgKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC56ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QudyAqPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCAqPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnkgKj0gMDtcclxuICAgICAgICAgICAgZGVzdC56ICo9IDA7XHJcbiAgICAgICAgICAgIGRlc3QudyAqPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gMS4wIC8gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueCAqPSBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC55ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnogKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QudyAqPSBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseU1hdDQobWF0cml4LCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0cml4Lm11bHRpcGx5VmVjNCh0aGlzLCBkZXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBtaXgodmVjdG9yLCB2ZWN0b3IyLCB0aW1lLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHRpbWUgKiAodmVjdG9yMi54IC0gdmVjdG9yLngpO1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICsgdGltZSAqICh2ZWN0b3IyLnkgLSB2ZWN0b3IueSk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKyB0aW1lICogKHZlY3RvcjIueiAtIHZlY3Rvci56KTtcclxuICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyArIHRpbWUgKiAodmVjdG9yMi53IC0gdmVjdG9yLncpO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHN1bSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICsgdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICsgdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QudyA9IHZlY3Rvci53ICsgdmVjdG9yMi53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRpZmZlcmVuY2UodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAtIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAtIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAtIHZlY3RvcjIuejtcclxuICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyAtIHZlY3RvcjIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKiB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKiB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKiB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgKiB2ZWN0b3IyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcXVvdGllbnQodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAvIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAvIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAvIHZlY3RvcjIuejtcclxuICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyAvIHZlY3RvcjIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxufVxyXG52ZWM0Lnplcm8gPSBuZXcgdmVjNChbMCwgMCwgMCwgMV0pO1xyXG52ZWM0Lm9uZSA9IG5ldyB2ZWM0KFsxLCAxLCAxLCAxXSk7XHJcbiIsImltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIG1hdDQge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0KHZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgaW5pdCh2YWx1ZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBtYXQ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICBkZXN0LnZhbHVlc1tpXSA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGFsbCgpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRhdGFbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgICByb3coaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDQgKyAwXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgMV0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogNCArIDJdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDQgKyAzXVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgICBjb2woaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICsgNF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICsgOF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICsgMTJdXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIGVxdWFscyhtYXRyaXgsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMudmFsdWVzW2ldIC0gbWF0cml4LmF0KGkpKSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZGV0ZXJtaW5hbnQoKSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTAzID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTEzID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IHRoaXMudmFsdWVzWzExXTtcclxuICAgICAgICBjb25zdCBhMzAgPSB0aGlzLnZhbHVlc1sxMl07XHJcbiAgICAgICAgY29uc3QgYTMxID0gdGhpcy52YWx1ZXNbMTNdO1xyXG4gICAgICAgIGNvbnN0IGEzMiA9IHRoaXMudmFsdWVzWzE0XTtcclxuICAgICAgICBjb25zdCBhMzMgPSB0aGlzLnZhbHVlc1sxNV07XHJcbiAgICAgICAgY29uc3QgZGV0MDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XHJcbiAgICAgICAgY29uc3QgZGV0MDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XHJcbiAgICAgICAgY29uc3QgZGV0MDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XHJcbiAgICAgICAgY29uc3QgZGV0MDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XHJcbiAgICAgICAgY29uc3QgZGV0MDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XHJcbiAgICAgICAgY29uc3QgZGV0MDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XHJcbiAgICAgICAgY29uc3QgZGV0MDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XHJcbiAgICAgICAgY29uc3QgZGV0MDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XHJcbiAgICAgICAgY29uc3QgZGV0MDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XHJcbiAgICAgICAgY29uc3QgZGV0MDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XHJcbiAgICAgICAgY29uc3QgZGV0MTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XHJcbiAgICAgICAgY29uc3QgZGV0MTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7XHJcbiAgICAgICAgcmV0dXJuIChkZXQwMCAqIGRldDExIC1cclxuICAgICAgICAgICAgZGV0MDEgKiBkZXQxMCArXHJcbiAgICAgICAgICAgIGRldDAyICogZGV0MDkgK1xyXG4gICAgICAgICAgICBkZXQwMyAqIGRldDA4IC1cclxuICAgICAgICAgICAgZGV0MDQgKiBkZXQwNyArXHJcbiAgICAgICAgICAgIGRldDA1ICogZGV0MDYpO1xyXG4gICAgfVxyXG4gICAgc2V0SWRlbnRpdHkoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSA9IDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEzXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNV0gPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgdHJhbnNwb3NlKCkge1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAxMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAxMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IHRlbXAyMyA9IHRoaXMudmFsdWVzWzExXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB0aGlzLnZhbHVlc1sxMl07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSB0ZW1wMDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IHRoaXMudmFsdWVzWzEzXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IHRlbXAwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s5XSA9IHRlbXAxMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSB0aGlzLnZhbHVlc1sxNF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gdGVtcDAzO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEzXSA9IHRlbXAxMztcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNF0gPSB0ZW1wMjM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBpbnZlcnNlKCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBhMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgY29uc3QgYTMwID0gdGhpcy52YWx1ZXNbMTJdO1xyXG4gICAgICAgIGNvbnN0IGEzMSA9IHRoaXMudmFsdWVzWzEzXTtcclxuICAgICAgICBjb25zdCBhMzIgPSB0aGlzLnZhbHVlc1sxNF07XHJcbiAgICAgICAgY29uc3QgYTMzID0gdGhpcy52YWx1ZXNbMTVdO1xyXG4gICAgICAgIGNvbnN0IGRldDAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xyXG4gICAgICAgIGNvbnN0IGRldDA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xyXG4gICAgICAgIGNvbnN0IGRldDA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xyXG4gICAgICAgIGNvbnN0IGRldDA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xyXG4gICAgICAgIGNvbnN0IGRldDEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG4gICAgICAgIGxldCBkZXQgPSBkZXQwMCAqIGRldDExIC1cclxuICAgICAgICAgICAgZGV0MDEgKiBkZXQxMCArXHJcbiAgICAgICAgICAgIGRldDAyICogZGV0MDkgK1xyXG4gICAgICAgICAgICBkZXQwMyAqIGRldDA4IC1cclxuICAgICAgICAgICAgZGV0MDQgKiBkZXQwNyArXHJcbiAgICAgICAgICAgIGRldDA1ICogZGV0MDY7XHJcbiAgICAgICAgaWYgKCFkZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRldCA9IDEuMCAvIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IChhMTEgKiBkZXQxMSAtIGExMiAqIGRldDEwICsgYTEzICogZGV0MDkpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gKC1hMDEgKiBkZXQxMSArIGEwMiAqIGRldDEwIC0gYTAzICogZGV0MDkpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gKGEzMSAqIGRldDA1IC0gYTMyICogZGV0MDQgKyBhMzMgKiBkZXQwMykgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSAoLWEyMSAqIGRldDA1ICsgYTIyICogZGV0MDQgLSBhMjMgKiBkZXQwMykgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSAoLWExMCAqIGRldDExICsgYTEyICogZGV0MDggLSBhMTMgKiBkZXQwNykgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAoYTAwICogZGV0MTEgLSBhMDIgKiBkZXQwOCArIGEwMyAqIGRldDA3KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9ICgtYTMwICogZGV0MDUgKyBhMzIgKiBkZXQwMiAtIGEzMyAqIGRldDAxKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IChhMjAgKiBkZXQwNSAtIGEyMiAqIGRldDAyICsgYTIzICogZGV0MDEpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gKGExMCAqIGRldDEwIC0gYTExICogZGV0MDggKyBhMTMgKiBkZXQwNikgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSAoLWEwMCAqIGRldDEwICsgYTAxICogZGV0MDggLSBhMDMgKiBkZXQwNikgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdID0gKGEzMCAqIGRldDA0IC0gYTMxICogZGV0MDIgKyBhMzMgKiBkZXQwMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gKC1hMjAgKiBkZXQwNCArIGEyMSAqIGRldDAyIC0gYTIzICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9ICgtYTEwICogZGV0MDkgKyBhMTEgKiBkZXQwNyAtIGExMiAqIGRldDA2KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSAoYTAwICogZGV0MDkgLSBhMDEgKiBkZXQwNyArIGEwMiAqIGRldDA2KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNF0gPSAoLWEzMCAqIGRldDAzICsgYTMxICogZGV0MDEgLSBhMzIgKiBkZXQwMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gKGEyMCAqIGRldDAzIC0gYTIxICogZGV0MDEgKyBhMjIgKiBkZXQwMCkgKiBkZXQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseShtYXRyaXgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XHJcbiAgICAgICAgY29uc3QgYTIzID0gdGhpcy52YWx1ZXNbMTFdO1xyXG4gICAgICAgIGNvbnN0IGEzMCA9IHRoaXMudmFsdWVzWzEyXTtcclxuICAgICAgICBjb25zdCBhMzEgPSB0aGlzLnZhbHVlc1sxM107XHJcbiAgICAgICAgY29uc3QgYTMyID0gdGhpcy52YWx1ZXNbMTRdO1xyXG4gICAgICAgIGNvbnN0IGEzMyA9IHRoaXMudmFsdWVzWzE1XTtcclxuICAgICAgICBsZXQgYjAgPSBtYXRyaXguYXQoMCk7XHJcbiAgICAgICAgbGV0IGIxID0gbWF0cml4LmF0KDEpO1xyXG4gICAgICAgIGxldCBiMiA9IG1hdHJpeC5hdCgyKTtcclxuICAgICAgICBsZXQgYjMgPSBtYXRyaXguYXQoMyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcclxuICAgICAgICBiMCA9IG1hdHJpeC5hdCg0KTtcclxuICAgICAgICBiMSA9IG1hdHJpeC5hdCg1KTtcclxuICAgICAgICBiMiA9IG1hdHJpeC5hdCg2KTtcclxuICAgICAgICBiMyA9IG1hdHJpeC5hdCg3KTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xyXG4gICAgICAgIGIwID0gbWF0cml4LmF0KDgpO1xyXG4gICAgICAgIGIxID0gbWF0cml4LmF0KDkpO1xyXG4gICAgICAgIGIyID0gbWF0cml4LmF0KDEwKTtcclxuICAgICAgICBiMyA9IG1hdHJpeC5hdCgxMSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s5XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xyXG4gICAgICAgIGIwID0gbWF0cml4LmF0KDEyKTtcclxuICAgICAgICBiMSA9IG1hdHJpeC5hdCgxMyk7XHJcbiAgICAgICAgYjIgPSBtYXRyaXguYXQoMTQpO1xyXG4gICAgICAgIGIzID0gbWF0cml4LmF0KDE1KTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMl0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5VmVjMyh2ZWN0b3IpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gbmV3IHZlYzMoW1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMl0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOV0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzEzXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzZdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMF0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzE0XVxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlWZWM0KHZlY3RvciwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHZlY3Rvci53O1xyXG4gICAgICAgIGRlc3QueCA9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s0XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzEyXSAqIHc7XHJcbiAgICAgICAgZGVzdC55ID1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s5XSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTNdICogdztcclxuICAgICAgICBkZXN0LnogPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzEwXSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTRdICogdztcclxuICAgICAgICBkZXN0LncgPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1szXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbN10gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzExXSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTVdICogdztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHRvTWF0MygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IG1hdDMoW1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s0XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbOV0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzEwXVxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgdG9JbnZlcnNlTWF0MygpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XHJcbiAgICAgICAgY29uc3QgZGV0MDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7XHJcbiAgICAgICAgY29uc3QgZGV0MTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwO1xyXG4gICAgICAgIGNvbnN0IGRldDIxID0gYTIxICogYTEwIC0gYTExICogYTIwO1xyXG4gICAgICAgIGxldCBkZXQgPSBhMDAgKiBkZXQwMSArIGEwMSAqIGRldDExICsgYTAyICogZGV0MjE7XHJcbiAgICAgICAgaWYgKCFkZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRldCA9IDEuMCAvIGRldDtcclxuICAgICAgICByZXR1cm4gbmV3IG1hdDMoW1xyXG4gICAgICAgICAgICBkZXQwMSAqIGRldCxcclxuICAgICAgICAgICAgKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpICogZGV0LFxyXG4gICAgICAgICAgICAoYTEyICogYTAxIC0gYTAyICogYTExKSAqIGRldCxcclxuICAgICAgICAgICAgZGV0MTEgKiBkZXQsXHJcbiAgICAgICAgICAgIChhMjIgKiBhMDAgLSBhMDIgKiBhMjApICogZGV0LFxyXG4gICAgICAgICAgICAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQsXHJcbiAgICAgICAgICAgIGRldDIxICogZGV0LFxyXG4gICAgICAgICAgICAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQsXHJcbiAgICAgICAgICAgIChhMTEgKiBhMDAgLSBhMDEgKiBhMTApICogZGV0XHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICB0cmFuc2xhdGUodmVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdICs9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdICogeCArIHRoaXMudmFsdWVzWzRdICogeSArIHRoaXMudmFsdWVzWzhdICogejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gKz1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0gKiB4ICsgdGhpcy52YWx1ZXNbNV0gKiB5ICsgdGhpcy52YWx1ZXNbOV0gKiB6O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE0XSArPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXSAqIHggKyB0aGlzLnZhbHVlc1s2XSAqIHkgKyB0aGlzLnZhbHVlc1sxMF0gKiB6O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE1XSArPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1szXSAqIHggKyB0aGlzLnZhbHVlc1s3XSAqIHkgKyB0aGlzLnZhbHVlc1sxMV0gKiB6O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2NhbGUodmVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gKj0geDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSAqPSB4O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdICo9IHg7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gKj0geDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSAqPSB5O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdICo9IHk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gKj0geTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSAqPSB5O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdICo9IHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gKj0gejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gKj0gejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gKj0gejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJvdGF0ZShhbmdsZSwgYXhpcykge1xyXG4gICAgICAgIGxldCB4ID0gYXhpcy54O1xyXG4gICAgICAgIGxldCB5ID0gYXhpcy55O1xyXG4gICAgICAgIGxldCB6ID0gYXhpcy56O1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcclxuICAgICAgICBpZiAoIWxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSAxIC8gbGVuZ3RoO1xyXG4gICAgICAgICAgICB4ICo9IGxlbmd0aDtcclxuICAgICAgICAgICAgeSAqPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIHogKj0gbGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IGMgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgY29uc3QgdCA9IDEuMCAtIGM7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTAzID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTEzID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IHRoaXMudmFsdWVzWzExXTtcclxuICAgICAgICBjb25zdCBiMDAgPSB4ICogeCAqIHQgKyBjO1xyXG4gICAgICAgIGNvbnN0IGIwMSA9IHkgKiB4ICogdCArIHogKiBzO1xyXG4gICAgICAgIGNvbnN0IGIwMiA9IHogKiB4ICogdCAtIHkgKiBzO1xyXG4gICAgICAgIGNvbnN0IGIxMCA9IHggKiB5ICogdCAtIHogKiBzO1xyXG4gICAgICAgIGNvbnN0IGIxMSA9IHkgKiB5ICogdCArIGM7XHJcbiAgICAgICAgY29uc3QgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XHJcbiAgICAgICAgY29uc3QgYjIwID0geCAqIHogKiB0ICsgeSAqIHM7XHJcbiAgICAgICAgY29uc3QgYjIxID0geSAqIHogKiB0IC0geCAqIHM7XHJcbiAgICAgICAgY29uc3QgYjIyID0geiAqIHogKiB0ICsgYztcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGEwMyAqIGIwMCArIGExMyAqIGIwMSArIGEyMyAqIGIwMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IGEwMiAqIGIxMCArIGExMiAqIGIxMSArIGEyMiAqIGIxMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s5XSA9IGEwMSAqIGIyMCArIGExMSAqIGIyMSArIGEyMSAqIGIyMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZydXN0dW0obGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBjb25zdCBybCA9IHJpZ2h0IC0gbGVmdDtcclxuICAgICAgICBjb25zdCB0YiA9IHRvcCAtIGJvdHRvbTtcclxuICAgICAgICBjb25zdCBmbiA9IGZhciAtIG5lYXI7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQ0KFtcclxuICAgICAgICAgICAgKG5lYXIgKiAyKSAvIHJsLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAobmVhciAqIDIpIC8gdGIsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIChyaWdodCArIGxlZnQpIC8gcmwsXHJcbiAgICAgICAgICAgICh0b3AgKyBib3R0b20pIC8gdGIsXHJcbiAgICAgICAgICAgIC0oZmFyICsgbmVhcikgLyBmbixcclxuICAgICAgICAgICAgLTEsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIC0oZmFyICogbmVhciAqIDIpIC8gZm4sXHJcbiAgICAgICAgICAgIDBcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwZXJzcGVjdGl2ZShmb3YsIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgY29uc3QgdG9wID0gbmVhciAqIE1hdGgudGFuKChmb3YgKiBNYXRoLlBJKSAvIDM2MC4wKTtcclxuICAgICAgICBjb25zdCByaWdodCA9IHRvcCAqIGFzcGVjdDtcclxuICAgICAgICByZXR1cm4gbWF0NC5mcnVzdHVtKC1yaWdodCwgcmlnaHQsIC10b3AsIHRvcCwgbmVhciwgZmFyKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBvcnRob2dyYXBoaWMobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBjb25zdCBybCA9IHJpZ2h0IC0gbGVmdDtcclxuICAgICAgICBjb25zdCB0YiA9IHRvcCAtIGJvdHRvbTtcclxuICAgICAgICBjb25zdCBmbiA9IGZhciAtIG5lYXI7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQ0KFtcclxuICAgICAgICAgICAgMiAvIHJsLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAyIC8gdGIsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIC0yIC8gZm4sXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIC0obGVmdCArIHJpZ2h0KSAvIHJsLFxyXG4gICAgICAgICAgICAtKHRvcCArIGJvdHRvbSkgLyB0YixcclxuICAgICAgICAgICAgLShmYXIgKyBuZWFyKSAvIGZuLFxyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbG9va0F0KHBvc2l0aW9uLCB0YXJnZXQsIHVwID0gdmVjMy51cCkge1xyXG4gICAgICAgIGlmIChwb3NpdGlvbi5lcXVhbHModGFyZ2V0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZGVudGl0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeiA9IHZlYzMuZGlmZmVyZW5jZShwb3NpdGlvbiwgdGFyZ2V0KS5ub3JtYWxpemUoKTtcclxuICAgICAgICBjb25zdCB4ID0gdmVjMy5jcm9zcyh1cCwgeikubm9ybWFsaXplKCk7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlYzMuY3Jvc3MoeiwgeCkubm9ybWFsaXplKCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQ0KFtcclxuICAgICAgICAgICAgeC54LFxyXG4gICAgICAgICAgICB5LngsXHJcbiAgICAgICAgICAgIHoueCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgeC55LFxyXG4gICAgICAgICAgICB5LnksXHJcbiAgICAgICAgICAgIHoueSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgeC56LFxyXG4gICAgICAgICAgICB5LnosXHJcbiAgICAgICAgICAgIHoueixcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgLXZlYzMuZG90KHgsIHBvc2l0aW9uKSxcclxuICAgICAgICAgICAgLXZlYzMuZG90KHksIHBvc2l0aW9uKSxcclxuICAgICAgICAgICAgLXZlYzMuZG90KHosIHBvc2l0aW9uKSxcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QobTEsIG0yLCByZXN1bHQpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSBtMS5hdCgwKTtcclxuICAgICAgICBjb25zdCBhMDEgPSBtMS5hdCgxKTtcclxuICAgICAgICBjb25zdCBhMDIgPSBtMS5hdCgyKTtcclxuICAgICAgICBjb25zdCBhMDMgPSBtMS5hdCgzKTtcclxuICAgICAgICBjb25zdCBhMTAgPSBtMS5hdCg0KTtcclxuICAgICAgICBjb25zdCBhMTEgPSBtMS5hdCg1KTtcclxuICAgICAgICBjb25zdCBhMTIgPSBtMS5hdCg2KTtcclxuICAgICAgICBjb25zdCBhMTMgPSBtMS5hdCg3KTtcclxuICAgICAgICBjb25zdCBhMjAgPSBtMS5hdCg4KTtcclxuICAgICAgICBjb25zdCBhMjEgPSBtMS5hdCg5KTtcclxuICAgICAgICBjb25zdCBhMjIgPSBtMS5hdCgxMCk7XHJcbiAgICAgICAgY29uc3QgYTIzID0gbTEuYXQoMTEpO1xyXG4gICAgICAgIGNvbnN0IGEzMCA9IG0xLmF0KDEyKTtcclxuICAgICAgICBjb25zdCBhMzEgPSBtMS5hdCgxMyk7XHJcbiAgICAgICAgY29uc3QgYTMyID0gbTEuYXQoMTQpO1xyXG4gICAgICAgIGNvbnN0IGEzMyA9IG0xLmF0KDE1KTtcclxuICAgICAgICBjb25zdCBiMDAgPSBtMi5hdCgwKTtcclxuICAgICAgICBjb25zdCBiMDEgPSBtMi5hdCgxKTtcclxuICAgICAgICBjb25zdCBiMDIgPSBtMi5hdCgyKTtcclxuICAgICAgICBjb25zdCBiMDMgPSBtMi5hdCgzKTtcclxuICAgICAgICBjb25zdCBiMTAgPSBtMi5hdCg0KTtcclxuICAgICAgICBjb25zdCBiMTEgPSBtMi5hdCg1KTtcclxuICAgICAgICBjb25zdCBiMTIgPSBtMi5hdCg2KTtcclxuICAgICAgICBjb25zdCBiMTMgPSBtMi5hdCg3KTtcclxuICAgICAgICBjb25zdCBiMjAgPSBtMi5hdCg4KTtcclxuICAgICAgICBjb25zdCBiMjEgPSBtMi5hdCg5KTtcclxuICAgICAgICBjb25zdCBiMjIgPSBtMi5hdCgxMCk7XHJcbiAgICAgICAgY29uc3QgYjIzID0gbTIuYXQoMTEpO1xyXG4gICAgICAgIGNvbnN0IGIzMCA9IG0yLmF0KDEyKTtcclxuICAgICAgICBjb25zdCBiMzEgPSBtMi5hdCgxMyk7XHJcbiAgICAgICAgY29uc3QgYjMyID0gbTIuYXQoMTQpO1xyXG4gICAgICAgIGNvbnN0IGIzMyA9IG0yLmF0KDE1KTtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbml0KFtcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMCArIGIwMyAqIGEzMCxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSArIGIwMyAqIGEzMSxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMiArIGIwMyAqIGEzMixcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMyArIGIwMSAqIGExMyArIGIwMiAqIGEyMyArIGIwMyAqIGEzMyxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMCArIGIxMyAqIGEzMCxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMSArIGIxMyAqIGEzMSxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMiArIGIxMyAqIGEzMixcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMyArIGIxMSAqIGExMyArIGIxMiAqIGEyMyArIGIxMyAqIGEzMyxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMCArIGIyMyAqIGEzMCxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMSArIGIyMyAqIGEzMSxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMiArIGIyMyAqIGEzMixcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMyArIGIyMSAqIGExMyArIGIyMiAqIGEyMyArIGIyMyAqIGEzMyxcclxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMCArIGIzMSAqIGExMCArIGIzMiAqIGEyMCArIGIzMyAqIGEzMCxcclxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMSArIGIzMSAqIGExMSArIGIzMiAqIGEyMSArIGIzMyAqIGEzMSxcclxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMiArIGIzMSAqIGExMiArIGIzMiAqIGEyMiArIGIzMyAqIGEzMixcclxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMyArIGIzMSAqIGExMyArIGIzMiAqIGEyMyArIGIzMyAqIGEzM1xyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjAgKyBiMDMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjEgKyBiMDMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIgKyBiMDMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDMgKyBiMDEgKiBhMTMgKyBiMDIgKiBhMjMgKyBiMDMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAgKyBiMTMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjEgKyBiMTMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIgKyBiMTMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDMgKyBiMTEgKiBhMTMgKyBiMTIgKiBhMjMgKyBiMTMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjAgKyBiMjMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEgKyBiMjMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjIgKyBiMjMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDMgKyBiMjEgKiBhMTMgKyBiMjIgKiBhMjMgKyBiMjMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDAgKyBiMzEgKiBhMTAgKyBiMzIgKiBhMjAgKyBiMzMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDEgKyBiMzEgKiBhMTEgKyBiMzIgKiBhMjEgKyBiMzMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDIgKyBiMzEgKiBhMTIgKyBiMzIgKiBhMjIgKyBiMzMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDMgKyBiMzEgKiBhMTMgKyBiMzIgKiBhMjMgKyBiMzMgKiBhMzNcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbm1hdDQuaWRlbnRpdHkgPSBuZXcgbWF0NCgpLnNldElkZW50aXR5KCk7XHJcbiIsImltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHZlYzIge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDIpO1xyXG4gICAgICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnh5ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBzZXQgeCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeHkodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBhdChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICB0aGlzLnggPSAwO1xyXG4gICAgICAgIHRoaXMueSA9IDA7XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBuZWdhdGUoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gLXRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSAtdGhpcy55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBsZW5ndGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWRMZW5ndGgoKSk7XHJcbiAgICB9XHJcbiAgICBzcXVhcmVkTGVuZ3RoKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeTtcclxuICAgIH1cclxuICAgIGFkZCh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKz0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICs9IHZlY3Rvci55O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3VidHJhY3QodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5KHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAqPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKj0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBkaXZpZGUodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC89IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAvPSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZhbHVlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEuMCAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSAqPSBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseU1hdDIobWF0cml4LCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0cml4Lm11bHRpcGx5VmVjMih0aGlzLCBkZXN0KTtcclxuICAgIH1cclxuICAgIG11bHRpcGx5TWF0MyhtYXRyaXgsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXRyaXgubXVsdGlwbHlWZWMyKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNyb3NzKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5MiA9IHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6ID0geCAqIHkyIC0geSAqIHgyO1xyXG4gICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICBkZXN0LnogPSB6O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRvdCh2ZWN0b3IsIHZlY3RvcjIpIHtcclxuICAgICAgICByZXR1cm4gdmVjdG9yLnggKiB2ZWN0b3IyLnggKyB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaXN0YW5jZSh2ZWN0b3IsIHZlY3RvcjIpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuc3F1YXJlZERpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHNxdWFyZWREaXN0YW5jZSh2ZWN0b3IsIHZlY3RvcjIpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yMi54IC0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3RvcjIueSAtIHZlY3Rvci55O1xyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRpcmVjdGlvbih2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueCAtIHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnkgLSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxIC8gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueCA9IHggKiBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC55ID0geSAqIGxlbmd0aDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBtaXgodmVjdG9yLCB2ZWN0b3IyLCB0aW1lLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHgyID0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkyID0gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueCA9IHggKyB0aW1lICogKHgyIC0geCk7XHJcbiAgICAgICAgZGVzdC55ID0geSArIHRpbWUgKiAoeTIgLSB5KTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzdW0odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHZlY3RvcjIueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcHJvZHVjdCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICogdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICogdmVjdG9yMi55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHF1b3RpZW50KHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbn1cclxudmVjMi56ZXJvID0gbmV3IHZlYzIoWzAsIDBdKTtcclxudmVjMi5vbmUgPSBuZXcgdmVjMihbMSwgMV0pO1xyXG4iLCJpbXBvcnQgbWF0NCBmcm9tICcuL21hdDQnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuL3F1YXQnO1xyXG5pbXBvcnQgdmVjMiBmcm9tICcuL3ZlYzInO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBtYXQzIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0KHZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgaW5pdCh2YWx1ZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IHZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgbWF0MygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgICAgICBkZXN0LnZhbHVlc1tpXSA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGFsbCgpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgZGF0YVtpXSA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuICAgIHJvdyhpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogMyArIDBdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDMgKyAxXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiAzICsgMl1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgY29sKGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1tpbmRleF0sIHRoaXMudmFsdWVzW2luZGV4ICsgM10sIHRoaXMudmFsdWVzW2luZGV4ICsgNl1dO1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKG1hdHJpeCwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnZhbHVlc1tpXSAtIG1hdHJpeC5hdChpKSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGRldGVybWluYW50KCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDtcclxuICAgICAgICBjb25zdCBkZXQyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcclxuICAgICAgICByZXR1cm4gYTAwICogZGV0MDEgKyBhMDEgKiBkZXQxMSArIGEwMiAqIGRldDIxO1xyXG4gICAgfVxyXG4gICAgc2V0SWRlbnRpdHkoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0cmFuc3Bvc2UoKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcDAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgdGVtcDAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgdGVtcDEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdGVtcDAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSB0ZW1wMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSB0ZW1wMTI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBpbnZlcnNlKCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDtcclxuICAgICAgICBjb25zdCBkZXQyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcclxuICAgICAgICBsZXQgZGV0ID0gYTAwICogZGV0MDEgKyBhMDEgKiBkZXQxMSArIGEwMiAqIGRldDIxO1xyXG4gICAgICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBkZXQwMSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gZGV0MTEgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9ICgtYTEyICogYTAwICsgYTAyICogYTEwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IGRldDIxICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gKGExMSAqIGEwMCAtIGEwMSAqIGExMCkgKiBkZXQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseShtYXRyaXgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBiMDAgPSBtYXRyaXguYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYjAxID0gbWF0cml4LmF0KDEpO1xyXG4gICAgICAgIGNvbnN0IGIwMiA9IG1hdHJpeC5hdCgyKTtcclxuICAgICAgICBjb25zdCBiMTAgPSBtYXRyaXguYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYjExID0gbWF0cml4LmF0KDQpO1xyXG4gICAgICAgIGNvbnN0IGIxMiA9IG1hdHJpeC5hdCg1KTtcclxuICAgICAgICBjb25zdCBiMjAgPSBtYXRyaXguYXQoNik7XHJcbiAgICAgICAgY29uc3QgYjIxID0gbWF0cml4LmF0KDcpO1xyXG4gICAgICAgIGNvbnN0IGIyMiA9IG1hdHJpeC5hdCg4KTtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5VmVjMih2ZWN0b3IsIHJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQueHkgPSBbXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMF0gKyB5ICogdGhpcy52YWx1ZXNbM10gKyB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1sxXSArIHkgKiB0aGlzLnZhbHVlc1s0XSArIHRoaXMudmFsdWVzWzddXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IHZlYzIoW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMV0gKyB5ICogdGhpcy52YWx1ZXNbNF0gKyB0aGlzLnZhbHVlc1s3XVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzModmVjdG9yLCByZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC54eXogPSBbXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMF0gKyB5ICogdGhpcy52YWx1ZXNbM10gKyB6ICogdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMV0gKyB5ICogdGhpcy52YWx1ZXNbNF0gKyB6ICogdGhpcy52YWx1ZXNbN10sXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMl0gKyB5ICogdGhpcy52YWx1ZXNbNV0gKyB6ICogdGhpcy52YWx1ZXNbOF1cclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgdmVjMyhbXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMF0gKyB5ICogdGhpcy52YWx1ZXNbM10gKyB6ICogdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMV0gKyB5ICogdGhpcy52YWx1ZXNbNF0gKyB6ICogdGhpcy52YWx1ZXNbN10sXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMl0gKyB5ICogdGhpcy52YWx1ZXNbNV0gKyB6ICogdGhpcy52YWx1ZXNbOF1cclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9NYXQ0KHJlc3VsdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmluaXQoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzNdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1swXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbM10sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s0XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbN10sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvUXVhdCgpIHtcclxuICAgICAgICBjb25zdCBtMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBtMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBtMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBtMTAgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBtMTEgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBtMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBtMjAgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBtMjEgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBtMjIgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBmb3VyWFNxdWFyZWRNaW51czEgPSBtMDAgLSBtMTEgLSBtMjI7XHJcbiAgICAgICAgY29uc3QgZm91cllTcXVhcmVkTWludXMxID0gbTExIC0gbTAwIC0gbTIyO1xyXG4gICAgICAgIGNvbnN0IGZvdXJaU3F1YXJlZE1pbnVzMSA9IG0yMiAtIG0wMCAtIG0xMTtcclxuICAgICAgICBjb25zdCBmb3VyV1NxdWFyZWRNaW51czEgPSBtMDAgKyBtMTEgKyBtMjI7XHJcbiAgICAgICAgbGV0IGJpZ2dlc3RJbmRleCA9IDA7XHJcbiAgICAgICAgbGV0IGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSA9IGZvdXJXU3F1YXJlZE1pbnVzMTtcclxuICAgICAgICBpZiAoZm91clhTcXVhcmVkTWludXMxID4gZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxKSB7XHJcbiAgICAgICAgICAgIGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSA9IGZvdXJYU3F1YXJlZE1pbnVzMTtcclxuICAgICAgICAgICAgYmlnZ2VzdEluZGV4ID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvdXJZU3F1YXJlZE1pbnVzMSA+IGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSkge1xyXG4gICAgICAgICAgICBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyWVNxdWFyZWRNaW51czE7XHJcbiAgICAgICAgICAgIGJpZ2dlc3RJbmRleCA9IDI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3VyWlNxdWFyZWRNaW51czEgPiBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEpIHtcclxuICAgICAgICAgICAgZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxID0gZm91clpTcXVhcmVkTWludXMxO1xyXG4gICAgICAgICAgICBiaWdnZXN0SW5kZXggPSAzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBiaWdnZXN0VmFsID0gTWF0aC5zcXJ0KGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSArIDEpICogMC41O1xyXG4gICAgICAgIGNvbnN0IG11bHQgPSAwLjI1IC8gYmlnZ2VzdFZhbDtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIHN3aXRjaCAoYmlnZ2VzdEluZGV4KSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIHJlc3VsdC53ID0gYmlnZ2VzdFZhbDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC54ID0gKG0xMiAtIG0yMSkgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnkgPSAobTIwIC0gbTAyKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IChtMDEgLSBtMTApICogbXVsdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IChtMTIgLSBtMjEpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC54ID0gYmlnZ2VzdFZhbDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC55ID0gKG0wMSArIG0xMCkgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnogPSAobTIwICsgbTAyKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LncgPSAobTIwIC0gbTAyKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IChtMDEgKyBtMTApICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC55ID0gYmlnZ2VzdFZhbDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC56ID0gKG0xMiArIG0yMSkgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdC53ID0gKG0wMSAtIG0xMCkgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnggPSAobTIwICsgbTAyKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IChtMTIgKyBtMjEpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC56ID0gYmlnZ2VzdFZhbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcm90YXRlKGFuZ2xlLCBheGlzKSB7XHJcbiAgICAgICAgbGV0IHggPSBheGlzLng7XHJcbiAgICAgICAgbGV0IHkgPSBheGlzLnk7XHJcbiAgICAgICAgbGV0IHogPSBheGlzLno7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgICAgIGlmICghbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgICAgIHggKj0gbGVuZ3RoO1xyXG4gICAgICAgICAgICB5ICo9IGxlbmd0aDtcclxuICAgICAgICAgICAgeiAqPSBsZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHMgPSBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAgICAgY29uc3QgYyA9IE1hdGguY29zKGFuZ2xlKTtcclxuICAgICAgICBjb25zdCB0ID0gMS4wIC0gYztcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XHJcbiAgICAgICAgY29uc3QgYjAwID0geCAqIHggKiB0ICsgYztcclxuICAgICAgICBjb25zdCBiMDEgPSB5ICogeCAqIHQgKyB6ICogcztcclxuICAgICAgICBjb25zdCBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcclxuICAgICAgICBjb25zdCBiMTAgPSB4ICogeSAqIHQgLSB6ICogcztcclxuICAgICAgICBjb25zdCBiMTEgPSB5ICogeSAqIHQgKyBjO1xyXG4gICAgICAgIGNvbnN0IGIxMiA9IHogKiB5ICogdCArIHggKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMCA9IHggKiB6ICogdCArIHkgKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IHkgKiB6ICogdCAtIHggKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMiA9IHogKiB6ICogdCArIGM7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBhMDEgKiBiMDAgKyBhMTEgKiBiMDEgKyBhMjEgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBhMDIgKiBiMDAgKyBhMTIgKiBiMDEgKyBhMjIgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBhMDAgKiBiMTAgKyBhMTAgKiBiMTEgKyBhMjAgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBhMDEgKiBiMTAgKyBhMTEgKiBiMTEgKyBhMjEgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBhMDAgKiBiMjAgKyBhMTAgKiBiMjEgKyBhMjAgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcHJvZHVjdChtMSwgbTIsIHJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IG0xLmF0KDApO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IG0xLmF0KDEpO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IG0xLmF0KDIpO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IG0xLmF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IG0xLmF0KDQpO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IG0xLmF0KDUpO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IG0xLmF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IG0xLmF0KDcpO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IG0xLmF0KDgpO1xyXG4gICAgICAgIGNvbnN0IGIwMCA9IG0yLmF0KDApO1xyXG4gICAgICAgIGNvbnN0IGIwMSA9IG0yLmF0KDEpO1xyXG4gICAgICAgIGNvbnN0IGIwMiA9IG0yLmF0KDIpO1xyXG4gICAgICAgIGNvbnN0IGIxMCA9IG0yLmF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGIxMSA9IG0yLmF0KDQpO1xyXG4gICAgICAgIGNvbnN0IGIxMiA9IG0yLmF0KDUpO1xyXG4gICAgICAgIGNvbnN0IGIyMCA9IG0yLmF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IG0yLmF0KDcpO1xyXG4gICAgICAgIGNvbnN0IGIyMiA9IG0yLmF0KDgpO1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmluaXQoW1xyXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBtYXQzKFtcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMixcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMixcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMlxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxubWF0My5pZGVudGl0eSA9IG5ldyBtYXQzKCkuc2V0SWRlbnRpdHkoKTtcclxuIiwiaW1wb3J0IG1hdDMgZnJvbSAnLi9tYXQzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi92ZWMzJztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgcXVhdCB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6dyA9IHZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgeCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBnZXQgeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBnZXQgeigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBnZXQgdygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbM107XHJcbiAgICB9XHJcbiAgICBnZXQgeHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV1dO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5eigpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl1dO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5encoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdLCB0aGlzLnZhbHVlc1szXV07XHJcbiAgICB9XHJcbiAgICBzZXQgeCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgdyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeHkodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5encodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZXNbM107XHJcbiAgICB9XHJcbiAgICBhdChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICBkZXN0LnZhbHVlc1tpXSA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHJvbGwoKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMigyLjAgKiAoeCAqIHkgKyB3ICogeiksIHcgKiB3ICsgeCAqIHggLSB5ICogeSAtIHogKiB6KTtcclxuICAgIH1cclxuICAgIHBpdGNoKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoMi4wICogKHkgKiB6ICsgdyAqIHgpLCB3ICogdyAtIHggKiB4IC0geSAqIHkgKyB6ICogeik7XHJcbiAgICB9XHJcbiAgICB5YXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYXNpbigyLjAgKiAodGhpcy54ICogdGhpcy56IC0gdGhpcy53ICogdGhpcy55KSk7XHJcbiAgICB9XHJcbiAgICBlcXVhbHModmVjdG9yLCB0aHJlc2hvbGQgPSBlcHNpbG9uKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMudmFsdWVzW2ldIC0gdmVjdG9yLmF0KGkpKSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgc2V0SWRlbnRpdHkoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgICAgIHRoaXMueiA9IDA7XHJcbiAgICAgICAgdGhpcy53ID0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGNhbGN1bGF0ZVcoKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgdGhpcy53ID0gLU1hdGguc3FydChNYXRoLmFicygxLjAgLSB4ICogeCAtIHkgKiB5IC0geiAqIHopKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGludmVyc2UoKSB7XHJcbiAgICAgICAgY29uc3QgZG90ID0gcXVhdC5kb3QodGhpcywgdGhpcyk7XHJcbiAgICAgICAgaWYgKCFkb3QpIHtcclxuICAgICAgICAgICAgdGhpcy54eXp3ID0gWzAsIDAsIDAsIDBdO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW52RG90ID0gZG90ID8gMS4wIC8gZG90IDogMDtcclxuICAgICAgICB0aGlzLnggKj0gLWludkRvdDtcclxuICAgICAgICB0aGlzLnkgKj0gLWludkRvdDtcclxuICAgICAgICB0aGlzLnogKj0gLWludkRvdDtcclxuICAgICAgICB0aGlzLncgKj0gaW52RG90O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgY29uanVnYXRlKCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdICo9IC0xO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdICo9IC0xO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdICo9IC0xO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdyk7XHJcbiAgICB9XHJcbiAgICBub3JtYWxpemUoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICBsZXQgbGVuZ3RoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3KTtcclxuICAgICAgICBpZiAoIWxlbmd0aCkge1xyXG4gICAgICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnkgPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnogPSAwO1xyXG4gICAgICAgICAgICBkZXN0LncgPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggPSB4ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSA9IHkgKiBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC56ID0geiAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LncgPSB3ICogbGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgYWRkKG90aGVyKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gKz0gb3RoZXIuYXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkob3RoZXIpIHtcclxuICAgICAgICBjb25zdCBxMXggPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBxMXkgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBxMXogPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBxMXcgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBxMnggPSBvdGhlci54O1xyXG4gICAgICAgIGNvbnN0IHEyeSA9IG90aGVyLnk7XHJcbiAgICAgICAgY29uc3QgcTJ6ID0gb3RoZXIuejtcclxuICAgICAgICBjb25zdCBxMncgPSBvdGhlci53O1xyXG4gICAgICAgIHRoaXMueCA9IHExeCAqIHEydyArIHExdyAqIHEyeCArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcclxuICAgICAgICB0aGlzLnkgPSBxMXkgKiBxMncgKyBxMXcgKiBxMnkgKyBxMXogKiBxMnggLSBxMXggKiBxMno7XHJcbiAgICAgICAgdGhpcy56ID0gcTF6ICogcTJ3ICsgcTF3ICogcTJ6ICsgcTF4ICogcTJ5IC0gcTF5ICogcTJ4O1xyXG4gICAgICAgIHRoaXMudyA9IHExdyAqIHEydyAtIHExeCAqIHEyeCAtIHExeSAqIHEyeSAtIHExeiAqIHEyejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5VmVjMyh2ZWN0b3IsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHF4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHF5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHF6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHF3ID0gdGhpcy53O1xyXG4gICAgICAgIGNvbnN0IGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xyXG4gICAgICAgIGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xyXG4gICAgICAgIGNvbnN0IGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4O1xyXG4gICAgICAgIGNvbnN0IGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuICAgICAgICBkZXN0LnggPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgICAgIGRlc3QueSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICAgICAgZGVzdC56ID0gaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHRvTWF0MyhkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgbWF0MygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIGNvbnN0IHgyID0geCArIHg7XHJcbiAgICAgICAgY29uc3QgeTIgPSB5ICsgeTtcclxuICAgICAgICBjb25zdCB6MiA9IHogKyB6O1xyXG4gICAgICAgIGNvbnN0IHh4ID0geCAqIHgyO1xyXG4gICAgICAgIGNvbnN0IHh5ID0geCAqIHkyO1xyXG4gICAgICAgIGNvbnN0IHh6ID0geCAqIHoyO1xyXG4gICAgICAgIGNvbnN0IHl5ID0geSAqIHkyO1xyXG4gICAgICAgIGNvbnN0IHl6ID0geSAqIHoyO1xyXG4gICAgICAgIGNvbnN0IHp6ID0geiAqIHoyO1xyXG4gICAgICAgIGNvbnN0IHd4ID0gdyAqIHgyO1xyXG4gICAgICAgIGNvbnN0IHd5ID0gdyAqIHkyO1xyXG4gICAgICAgIGNvbnN0IHd6ID0gdyAqIHoyO1xyXG4gICAgICAgIGRlc3QuaW5pdChbXHJcbiAgICAgICAgICAgIDEgLSAoeXkgKyB6eiksXHJcbiAgICAgICAgICAgIHh5ICsgd3osXHJcbiAgICAgICAgICAgIHh6IC0gd3ksXHJcbiAgICAgICAgICAgIHh5IC0gd3osXHJcbiAgICAgICAgICAgIDEgLSAoeHggKyB6eiksXHJcbiAgICAgICAgICAgIHl6ICsgd3gsXHJcbiAgICAgICAgICAgIHh6ICsgd3ksXHJcbiAgICAgICAgICAgIHl6IC0gd3gsXHJcbiAgICAgICAgICAgIDEgLSAoeHggKyB5eSlcclxuICAgICAgICBdKTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHRvTWF0NChkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgbWF0NCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIGNvbnN0IHgyID0geCArIHg7XHJcbiAgICAgICAgY29uc3QgeTIgPSB5ICsgeTtcclxuICAgICAgICBjb25zdCB6MiA9IHogKyB6O1xyXG4gICAgICAgIGNvbnN0IHh4ID0geCAqIHgyO1xyXG4gICAgICAgIGNvbnN0IHh5ID0geCAqIHkyO1xyXG4gICAgICAgIGNvbnN0IHh6ID0geCAqIHoyO1xyXG4gICAgICAgIGNvbnN0IHl5ID0geSAqIHkyO1xyXG4gICAgICAgIGNvbnN0IHl6ID0geSAqIHoyO1xyXG4gICAgICAgIGNvbnN0IHp6ID0geiAqIHoyO1xyXG4gICAgICAgIGNvbnN0IHd4ID0gdyAqIHgyO1xyXG4gICAgICAgIGNvbnN0IHd5ID0gdyAqIHkyO1xyXG4gICAgICAgIGNvbnN0IHd6ID0gdyAqIHoyO1xyXG4gICAgICAgIGRlc3QuaW5pdChbXHJcbiAgICAgICAgICAgIDEgLSAoeXkgKyB6eiksXHJcbiAgICAgICAgICAgIHh5ICsgd3osXHJcbiAgICAgICAgICAgIHh6IC0gd3ksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHh5IC0gd3osXHJcbiAgICAgICAgICAgIDEgLSAoeHggKyB6eiksXHJcbiAgICAgICAgICAgIHl6ICsgd3gsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHh6ICsgd3ksXHJcbiAgICAgICAgICAgIHl6IC0gd3gsXHJcbiAgICAgICAgICAgIDEgLSAoeHggKyB5eSksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIDFcclxuICAgICAgICBdKTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkb3QocTEsIHEyKSB7XHJcbiAgICAgICAgcmV0dXJuIHExLnggKiBxMi54ICsgcTEueSAqIHEyLnkgKyBxMS56ICogcTIueiArIHExLncgKiBxMi53O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHN1bShxMSwgcTIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHExLnggKyBxMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHExLnkgKyBxMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHExLnogKyBxMi56O1xyXG4gICAgICAgIGRlc3QudyA9IHExLncgKyBxMi53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QocTEsIHEyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBxMXggPSBxMS54O1xyXG4gICAgICAgIGNvbnN0IHExeSA9IHExLnk7XHJcbiAgICAgICAgY29uc3QgcTF6ID0gcTEuejtcclxuICAgICAgICBjb25zdCBxMXcgPSBxMS53O1xyXG4gICAgICAgIGNvbnN0IHEyeCA9IHEyLng7XHJcbiAgICAgICAgY29uc3QgcTJ5ID0gcTIueTtcclxuICAgICAgICBjb25zdCBxMnogPSBxMi56O1xyXG4gICAgICAgIGNvbnN0IHEydyA9IHEyLnc7XHJcbiAgICAgICAgZGVzdC54ID0gcTF4ICogcTJ3ICsgcTF3ICogcTJ4ICsgcTF5ICogcTJ6IC0gcTF6ICogcTJ5O1xyXG4gICAgICAgIGRlc3QueSA9IHExeSAqIHEydyArIHExdyAqIHEyeSArIHExeiAqIHEyeCAtIHExeCAqIHEyejtcclxuICAgICAgICBkZXN0LnogPSBxMXogKiBxMncgKyBxMXcgKiBxMnogKyBxMXggKiBxMnkgLSBxMXkgKiBxMng7XHJcbiAgICAgICAgZGVzdC53ID0gcTF3ICogcTJ3IC0gcTF4ICogcTJ4IC0gcTF5ICogcTJ5IC0gcTF6ICogcTJ6O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNyb3NzKHExLCBxMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcTF4ID0gcTEueDtcclxuICAgICAgICBjb25zdCBxMXkgPSBxMS55O1xyXG4gICAgICAgIGNvbnN0IHExeiA9IHExLno7XHJcbiAgICAgICAgY29uc3QgcTF3ID0gcTEudztcclxuICAgICAgICBjb25zdCBxMnggPSBxMi54O1xyXG4gICAgICAgIGNvbnN0IHEyeSA9IHEyLnk7XHJcbiAgICAgICAgY29uc3QgcTJ6ID0gcTIuejtcclxuICAgICAgICBjb25zdCBxMncgPSBxMi53O1xyXG4gICAgICAgIGRlc3QueCA9IHExdyAqIHEyeiArIHExeiAqIHEydyArIHExeCAqIHEyeSAtIHExeSAqIHEyeDtcclxuICAgICAgICBkZXN0LnkgPSBxMXcgKiBxMncgLSBxMXggKiBxMnggLSBxMXkgKiBxMnkgLSBxMXogKiBxMno7XHJcbiAgICAgICAgZGVzdC56ID0gcTF3ICogcTJ4ICsgcTF4ICogcTJ3ICsgcTF5ICogcTJ6IC0gcTF6ICogcTJ5O1xyXG4gICAgICAgIGRlc3QudyA9IHExdyAqIHEyeSArIHExeSAqIHEydyArIHExeiAqIHEyeCAtIHExeCAqIHEyejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzaG9ydE1peChxMSwgcTIsIHRpbWUsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aW1lIDw9IDAuMCkge1xyXG4gICAgICAgICAgICBkZXN0Lnh5encgPSBxMS54eXp3O1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGltZSA+PSAxLjApIHtcclxuICAgICAgICAgICAgZGVzdC54eXp3ID0gcTIueHl6dztcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb3MgPSBxdWF0LmRvdChxMSwgcTIpO1xyXG4gICAgICAgIGNvbnN0IHEyYSA9IHEyLmNvcHkoKTtcclxuICAgICAgICBpZiAoY29zIDwgMC4wKSB7XHJcbiAgICAgICAgICAgIHEyYS5pbnZlcnNlKCk7XHJcbiAgICAgICAgICAgIGNvcyA9IC1jb3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBrMDtcclxuICAgICAgICBsZXQgazE7XHJcbiAgICAgICAgaWYgKGNvcyA+IDAuOTk5OSkge1xyXG4gICAgICAgICAgICBrMCA9IDEgLSB0aW1lO1xyXG4gICAgICAgICAgICBrMSA9IDAgKyB0aW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zcXJ0KDEgLSBjb3MgKiBjb3MpO1xyXG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoc2luLCBjb3MpO1xyXG4gICAgICAgICAgICBjb25zdCBvbmVPdmVyU2luID0gMSAvIHNpbjtcclxuICAgICAgICAgICAgazAgPSBNYXRoLnNpbigoMSAtIHRpbWUpICogYW5nbGUpICogb25lT3ZlclNpbjtcclxuICAgICAgICAgICAgazEgPSBNYXRoLnNpbigoMCArIHRpbWUpICogYW5nbGUpICogb25lT3ZlclNpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gazAgKiBxMS54ICsgazEgKiBxMmEueDtcclxuICAgICAgICBkZXN0LnkgPSBrMCAqIHExLnkgKyBrMSAqIHEyYS55O1xyXG4gICAgICAgIGRlc3QueiA9IGswICogcTEueiArIGsxICogcTJhLno7XHJcbiAgICAgICAgZGVzdC53ID0gazAgKiBxMS53ICsgazEgKiBxMmEudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBtaXgocTEsIHEyLCB0aW1lLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb3NIYWxmVGhldGEgPSBxMS54ICogcTIueCArIHExLnkgKiBxMi55ICsgcTEueiAqIHEyLnogKyBxMS53ICogcTIudztcclxuICAgICAgICBpZiAoTWF0aC5hYnMoY29zSGFsZlRoZXRhKSA+PSAxLjApIHtcclxuICAgICAgICAgICAgZGVzdC54eXp3ID0gcTEueHl6dztcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhhbGZUaGV0YSA9IE1hdGguYWNvcyhjb3NIYWxmVGhldGEpO1xyXG4gICAgICAgIGNvbnN0IHNpbkhhbGZUaGV0YSA9IE1hdGguc3FydCgxLjAgLSBjb3NIYWxmVGhldGEgKiBjb3NIYWxmVGhldGEpO1xyXG4gICAgICAgIGlmIChNYXRoLmFicyhzaW5IYWxmVGhldGEpIDwgMC4wMDEpIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gcTEueCAqIDAuNSArIHEyLnggKiAwLjU7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IHExLnkgKiAwLjUgKyBxMi55ICogMC41O1xyXG4gICAgICAgICAgICBkZXN0LnogPSBxMS56ICogMC41ICsgcTIueiAqIDAuNTtcclxuICAgICAgICAgICAgZGVzdC53ID0gcTEudyAqIDAuNSArIHEyLncgKiAwLjU7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByYXRpb0EgPSBNYXRoLnNpbigoMSAtIHRpbWUpICogaGFsZlRoZXRhKSAvIHNpbkhhbGZUaGV0YTtcclxuICAgICAgICBjb25zdCByYXRpb0IgPSBNYXRoLnNpbih0aW1lICogaGFsZlRoZXRhKSAvIHNpbkhhbGZUaGV0YTtcclxuICAgICAgICBkZXN0LnggPSBxMS54ICogcmF0aW9BICsgcTIueCAqIHJhdGlvQjtcclxuICAgICAgICBkZXN0LnkgPSBxMS55ICogcmF0aW9BICsgcTIueSAqIHJhdGlvQjtcclxuICAgICAgICBkZXN0LnogPSBxMS56ICogcmF0aW9BICsgcTIueiAqIHJhdGlvQjtcclxuICAgICAgICBkZXN0LncgPSBxMS53ICogcmF0aW9BICsgcTIudyAqIHJhdGlvQjtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tQXhpc0FuZ2xlKGF4aXMsIGFuZ2xlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbmdsZSAqPSAwLjU7XHJcbiAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIGRlc3QueCA9IGF4aXMueCAqIHNpbjtcclxuICAgICAgICBkZXN0LnkgPSBheGlzLnkgKiBzaW47XHJcbiAgICAgICAgZGVzdC56ID0gYXhpcy56ICogc2luO1xyXG4gICAgICAgIGRlc3QudyA9IE1hdGguY29zKGFuZ2xlKTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxufVxyXG5xdWF0LmlkZW50aXR5ID0gbmV3IHF1YXQoKS5zZXRJZGVudGl0eSgpO1xyXG4iLCJpbXBvcnQgcXVhdCBmcm9tICcuL3F1YXQnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB2ZWMzIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSgzKTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy54eXogPSB2YWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHooKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXooKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdXTtcclxuICAgIH1cclxuICAgIHNldCB4KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB5KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB6KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB4eSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIHNldCB4eXoodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBhdChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICB0aGlzLnggPSAwO1xyXG4gICAgICAgIHRoaXMueSA9IDA7XHJcbiAgICAgICAgdGhpcy56ID0gMDtcclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdGhpcy54O1xyXG4gICAgICAgIGRlc3QueSA9IHRoaXMueTtcclxuICAgICAgICBkZXN0LnogPSB0aGlzLno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBuZWdhdGUoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gLXRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSAtdGhpcy55O1xyXG4gICAgICAgIGRlc3QueiA9IC10aGlzLno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBlcXVhbHModmVjdG9yLCB0aHJlc2hvbGQgPSBlcHNpbG9uKSB7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueCAtIHZlY3Rvci54KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnkgLSB2ZWN0b3IueSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy56IC0gdmVjdG9yLnopID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBsZW5ndGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWRMZW5ndGgoKSk7XHJcbiAgICB9XHJcbiAgICBzcXVhcmVkTGVuZ3RoKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XHJcbiAgICB9XHJcbiAgICBhZGQodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSArPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogKz0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzdWJ0cmFjdCh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLT0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC09IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAtPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5KHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAqPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKj0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56ICo9IHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZGl2aWRlKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56IC89IHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2NhbGUodmFsdWUsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCAqPSB2YWx1ZTtcclxuICAgICAgICBkZXN0LnkgKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC56ICo9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgZGVzdC56ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEuMCAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSAqPSBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC56ICo9IGxlbmd0aDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG11bHRpcGx5QnlNYXQzKG1hdHJpeCwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzModGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseUJ5UXVhdChxdWF0ZXJuaW9uLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcXVhdGVybmlvbi5tdWx0aXBseVZlYzModGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICB0b1F1YXQoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYyA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgY29uc3QgcyA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgYy54ID0gTWF0aC5jb3ModGhpcy54ICogMC41KTtcclxuICAgICAgICBzLnggPSBNYXRoLnNpbih0aGlzLnggKiAwLjUpO1xyXG4gICAgICAgIGMueSA9IE1hdGguY29zKHRoaXMueSAqIDAuNSk7XHJcbiAgICAgICAgcy55ID0gTWF0aC5zaW4odGhpcy55ICogMC41KTtcclxuICAgICAgICBjLnogPSBNYXRoLmNvcyh0aGlzLnogKiAwLjUpO1xyXG4gICAgICAgIHMueiA9IE1hdGguc2luKHRoaXMueiAqIDAuNSk7XHJcbiAgICAgICAgZGVzdC54ID0gcy54ICogYy55ICogYy56IC0gYy54ICogcy55ICogcy56O1xyXG4gICAgICAgIGRlc3QueSA9IGMueCAqIHMueSAqIGMueiArIHMueCAqIGMueSAqIHMuejtcclxuICAgICAgICBkZXN0LnogPSBjLnggKiBjLnkgKiBzLnogLSBzLnggKiBzLnkgKiBjLno7XHJcbiAgICAgICAgZGVzdC53ID0gYy54ICogYy55ICogYy56ICsgcy54ICogcy55ICogcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNyb3NzKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgY29uc3QgeDIgPSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeTIgPSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgY29uc3QgejIgPSB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC54ID0geSAqIHoyIC0geiAqIHkyO1xyXG4gICAgICAgIGRlc3QueSA9IHogKiB4MiAtIHggKiB6MjtcclxuICAgICAgICBkZXN0LnogPSB4ICogeTIgLSB5ICogeDI7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZG90KHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHgyID0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkyID0gdmVjdG9yMi55O1xyXG4gICAgICAgIGNvbnN0IHoyID0gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiB4ICogeDIgKyB5ICogeTIgKyB6ICogejI7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3RvcjIueCAtIHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IyLnkgLSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yMi56IC0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWREaXN0YW5jZSh2ZWN0b3IsIHZlY3RvcjIpKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3RvcjIueCAtIHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IyLnkgLSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yMi56IC0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogejtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaXJlY3Rpb24odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IueiAtIHZlY3RvcjIuejtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnkgPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnogPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggPSB4ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSA9IHkgKiBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC56ID0geiAqIGxlbmd0aDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBtaXgodmVjdG9yLCB2ZWN0b3IyLCB0aW1lLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHRpbWUgKiAodmVjdG9yMi54IC0gdmVjdG9yLngpO1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICsgdGltZSAqICh2ZWN0b3IyLnkgLSB2ZWN0b3IueSk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKyB0aW1lICogKHZlY3RvcjIueiAtIHZlY3Rvci56KTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzdW0odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiArIHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLSB2ZWN0b3IyLno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcHJvZHVjdCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICogdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICogdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICogdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHF1b3RpZW50KHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLyB2ZWN0b3IyLno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbn1cclxudmVjMy56ZXJvID0gbmV3IHZlYzMoWzAsIDAsIDBdKTtcclxudmVjMy5vbmUgPSBuZXcgdmVjMyhbMSwgMSwgMV0pO1xyXG52ZWMzLnVwID0gbmV3IHZlYzMoWzAsIDEsIDBdKTtcclxudmVjMy5yaWdodCA9IG5ldyB2ZWMzKFsxLCAwLCAwXSk7XHJcbnZlYzMuZm9yd2FyZCA9IG5ldyB2ZWMzKFswLCAwLCAxXSk7XHJcbiIsImV4cG9ydCBjbGFzcyBCYXNlT3V0cHV0IHtcclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlT3V0cHV0IH0gZnJvbSAnLi9iYXNlLW91dHB1dCc7XHJcbmV4cG9ydCBjbGFzcyBBcmlhT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IDEwMDtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgfHwgMTAwO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQodGhpcy5zcGVlY2hEaXNwbGF5KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lciwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLmNsZWFyRGlzcGxheSgpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG4gICAgICAgIHBhcmEuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hEaXNwbGF5LmFwcGVuZENoaWxkKHBhcmEpO1xyXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5jbGVhckRpc3BsYXkuYmluZCh0aGlzKSwgdGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckRpc3BsYXkoKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGlzcGxheSgpIHtcclxuICAgICAgICB0aGlzLnNwZWVjaERpc3BsYXkuaW5uZXJIVE1MID0gJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmFzZU91dHB1dCB9IGZyb20gJy4vYmFzZS1vdXRwdXQnO1xyXG5leHBvcnQgY2xhc3MgV2ViVFRTT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbn1cclxuIiwiaW1wb3J0IHsgY3JlYXRlT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXQtZmFjdG9yeSc7XHJcbmV4cG9ydCBjbGFzcyBUVFMge1xyXG4gICAgY29uc3RydWN0b3Iob3V0cHV0ID0gY3JlYXRlT3V0cHV0KCkpIHtcclxuICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dDtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLm91dHB1dC5zcGVhayh0ZXh0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc3RvcCgpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJhc2VPdXRwdXQgfSBmcm9tICcuL291dHB1dHMvYmFzZS1vdXRwdXQnO1xyXG5pbXBvcnQgeyBBcmlhT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXRzL2FyaWEnO1xyXG5pbXBvcnQgeyBXZWJUVFNPdXRwdXQgfSBmcm9tICcuL291dHB1dHMvd2VidHRzJztcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dChrZXkgPSAnYXJpYScpIHtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgY2FzZSAnYXJpYSc6XHJcbiAgICAgICAgICAgIHJldHVybiBBcmlhT3V0cHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd3ZWJ0dHMnOlxyXG4gICAgICAgICAgICByZXR1cm4gV2ViVFRTT3V0cHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gQXJpYU91dHB1dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IHsgV2ViVFRTT3V0cHV0LCBBcmlhT3V0cHV0LCBCYXNlT3V0cHV0IH07XHJcbiIsImV4cG9ydCBjbGFzcyBTb3VuZE1hbmFnZXIge1xyXG4gICAgY29uc3RydWN0b3Ioc291bmRTZXQgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zb3VuZFNldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuc291bmRTZXQgPSBzb3VuZFNldDtcclxuICAgIH1cclxuICAgIHNldFNvdW5kU2V0KHNvdW5kU2V0KSB7XHJcbiAgICAgICAgdGhpcy5zb3VuZFNldCA9IHNvdW5kU2V0O1xyXG4gICAgfVxyXG4gICAgaGFuZGxlU291bmQodHlwZSwgZGF0YSA9IG51bGwpIHtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnZWRpdCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVkaXRTb3VuZChkYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZXInOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTbGlkZXJTb3VuZChkYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdG9yU291bmQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja2JveFNvdW5kKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZvY3VzJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRm9jdXNTb3VuZCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Nob29zZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNob29zZVNvdW5kKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnb3Blbic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9wZW5Tb3VuZCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Nsb3NlJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2VTb3VuZCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBoYW5kbGVFZGl0U291bmQoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHByZXZEYXRhID0gdGhpcy5kYXRhLmdldCgnZWRpdCcpIHx8ICcnO1xyXG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCA8PSBwcmV2RGF0YS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VuZFNldC5kZWxldGUgJiYgdGhpcy5zb3VuZFNldC5kZWxldGUucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VuZFNldC5jaGFyICYmIHRoaXMuc291bmRTZXQuY2hhci5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YS5zZXQoJ2VkaXQnLCBkYXRhKTtcclxuICAgIH1cclxuICAgIGhhbmRsZVNlbGVjdG9yU291bmQoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuc291bmRTZXQuc2Nyb2xsZXIgJiYgdGhpcy5zb3VuZFNldC5zY3JvbGxlci5wbGF5KCk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVTbGlkZXJTb3VuZChkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgcHJldkRhdGEgPSB0aGlzLmRhdGEuZ2V0KCdzbGlkZXInKTtcclxuICAgICAgICBpZiAoZGF0YSA8IHByZXZEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc291bmRTZXQuc2xpZGVyTGVmdCAmJiB0aGlzLnNvdW5kU2V0LnNsaWRlckxlZnQucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VuZFNldC5zbGlkZXJSaWdodCAmJiB0aGlzLnNvdW5kU2V0LnNsaWRlclJpZ2h0LnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhLnNldCgnc2xpZGVyJywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVGb2N1c1NvdW5kKCkge1xyXG4gICAgICAgIHRoaXMuc291bmRTZXQubW92ZSAmJiB0aGlzLnNvdW5kU2V0Lm1vdmUucGxheSgpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT3BlblNvdW5kKCkge1xyXG4gICAgICAgIHRoaXMuc291bmRTZXQub3BlbiAmJiB0aGlzLnNvdW5kU2V0Lm9wZW4ucGxheSgpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlQ2xvc2VTb3VuZCgpIHtcclxuICAgICAgICB0aGlzLnNvdW5kU2V0LmNsb3NlICYmIHRoaXMuc291bmRTZXQuY2xvc2UucGxheSgpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlQ2hvb3NlU291bmQoKSB7XHJcbiAgICAgICAgdGhpcy5zb3VuZFNldC5jaG9vc2UgJiYgdGhpcy5zb3VuZFNldC5jaG9vc2UucGxheSgpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlQ2hlY2tib3hTb3VuZChkYXRhKSB7XHJcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VuZFNldC5jaGVja2VkICYmIHRoaXMuc291bmRTZXQuY2hlY2tlZC5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNvdW5kU2V0LnVuY2hlY2tlZCAmJiB0aGlzLnNvdW5kU2V0LnVuY2hlY2tlZC5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBLZXlib2FyZE1hbmFnZXIge1xyXG4gICAgY29uc3RydWN0b3IobWVudSkge1xyXG4gICAgICAgIHRoaXMubWVudSA9IG1lbnU7XHJcbiAgICB9XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMubWVudVxyXG4gICAgICAgICAgICAuZ2V0Q29udGFpbmVyKClcclxuICAgICAgICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZXIuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgLy8gVGhpcyB0cmljayBsZXQncyB1cyBkZXRlY3QgdGhlIHByZXNzIG9mIHRoZSBiYWNrIG9yIGZvcndhcmQgYnV0dG9ucyB0byBleGl0IG91dCBvZiB0aGUgbWVudS5cclxuICAgICAgICB3aW5kb3cub25wb3BzdGF0ZSA9ICgpID0+IHRoaXMubWVudS5jbGlja0NhbmNlbEFjdGlvbigpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlcihldmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51LmZvY3VzTmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudS5mb2N1c1ByZXZpb3VzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudS5jbGlja0RlZmF1bHRBY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdFc2NhcGUnOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudS5jbGlja0NhbmNlbEFjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZWxlYXNlKCkge1xyXG4gICAgICAgIHRoaXMubWVudVxyXG4gICAgICAgICAgICAuZ2V0Q29udGFpbmVyKClcclxuICAgICAgICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZXIuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCAqIGFzIEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcclxuZXhwb3J0IGNsYXNzIEJhc2VJdGVtIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGlkLCB0aXRsZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgIH1cclxuICAgIGdldERPTU5vZGUoKSB7XHJcbiAgICAgICAgbGV0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRpdGxlKTtcclxuICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICBnZXRDb250ZW50cygpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBvbkZvY3VzKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdmb2N1cycsIHRoaXMuaWQpO1xyXG4gICAgfVxyXG4gICAgZm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgJiYgdGhpcy5jb250YWluZXIuZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGNsaWNrKCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGdldElEKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJhc2VJdGVtIH0gZnJvbSAnLi9iYXNlLWl0ZW0nO1xyXG5leHBvcnQgY2xhc3MgRWRpdEl0ZW0gZXh0ZW5kcyBCYXNlSXRlbSB7XHJcbiAgICBjb25zdHJ1Y3RvcihpZCwgdGl0bGUsIGluaXRpYWxUZXh0LCBpc1Bhc3N3b3JkID0gZmFsc2UpIHtcclxuICAgICAgICBzdXBlcihpZCwgdGl0bGUpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbFRleHQgPSBpbml0aWFsVGV4dDtcclxuICAgICAgICB0aGlzLmlzUGFzc3dvcmQgPSBpc1Bhc3N3b3JkO1xyXG4gICAgICAgIHRoaXMuY29udGVudHMgPSBpbml0aWFsVGV4dDtcclxuICAgIH1cclxuICAgIGdldERPTU5vZGUoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcclxuICAgICAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsIGBlZGl0XyR7dGhpcy5pZH1gKTtcclxuICAgICAgICBsYWJlbC50ZXh0Q29udGVudCA9IHRoaXMudGl0bGU7XHJcbiAgICAgICAgY29uc3QgZWRpdEZpZWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgICAgICBlZGl0RmllbGQuaWQgPSBgZWRpdF8ke3RoaXMuaWR9YDtcclxuICAgICAgICBlZGl0RmllbGQudmFsdWUgPSB0aGlzLmNvbnRlbnRzO1xyXG4gICAgICAgIGVkaXRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICBlZGl0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uRm9jdXMuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNQYXNzd29yZCkge1xyXG4gICAgICAgICAgICBlZGl0RmllbGQudHlwZSA9ICdwYXNzd29yZCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQobGFiZWwpO1xyXG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoZWRpdEZpZWxkKTtcclxuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZvY3VzLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuZWRpdEZpZWxkID0gZWRpdEZpZWxkO1xyXG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9XHJcbiAgICBnZXRDb250ZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0RmllbGQudmFsdWU7XHJcbiAgICB9XHJcbiAgICBvbkNoYW5nZShldmVudCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgndXBkYXRlJywge1xyXG4gICAgICAgICAgICB0eXBlOiAnZWRpdCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmVkaXRGaWVsZC52YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0RmllbGQgJiYgdGhpcy5lZGl0RmllbGQuZm9jdXMoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlSXRlbSB9IGZyb20gJy4vYmFzZS1pdGVtJztcclxuZXhwb3J0IGNsYXNzIE1lbnVJdGVtIGV4dGVuZHMgQmFzZUl0ZW0ge1xyXG4gICAgY29uc3RydWN0b3IoaWQsIHRpdGxlKSB7XHJcbiAgICAgICAgc3VwZXIoaWQsIHRpdGxlKTtcclxuICAgIH1cclxuICAgIGdldERPTU5vZGUoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gdGhpcy50aXRsZTtcclxuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcykpO1xyXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25Gb2N1cy5iaW5kKHRoaXMpKTtcclxuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLmJ1dHRvbiA9IGJ1dHRvbjtcclxuICAgICAgICByZXR1cm4gY29udGFpbmVyO1xyXG4gICAgfVxyXG4gICAgZ2V0Q29udGVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVDbGljayhldmVudCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2hvb3NlJywgdGhpcy5pZCk7XHJcbiAgICB9XHJcbiAgICBmb2N1cygpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbiAmJiB0aGlzLmJ1dHRvbi5mb2N1cygpO1xyXG4gICAgfVxyXG4gICAgY2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b24uY2xpY2soKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlSXRlbSB9IGZyb20gJy4vYmFzZS1pdGVtJztcclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9ySXRlbSBleHRlbmRzIEJhc2VJdGVtIHtcclxuICAgIGNvbnN0cnVjdG9yKGlkLCB0aXRsZSwgaXRlbXMpIHtcclxuICAgICAgICBzdXBlcihpZCwgdGl0bGUpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcclxuICAgICAgICB0aGlzLmVudHJpZXMgPSBbXTtcclxuICAgIH1cclxuICAgIGdldERPTU5vZGUoKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xyXG4gICAgICAgIHRoaXMubGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsZWdlbmQnKTtcclxuICAgICAgICB0aGlzLmZpZWxkU2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTtcclxuICAgICAgICB0aGlzLmZpZWxkU2V0LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncmFkaW9ncm91cCcpO1xyXG4gICAgICAgIHRoaXMuZmllbGRTZXQuaWQgPSBgZnNfc2VsZWN0b3JfJHt0aGlzLmlkfWA7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGl0bGUpO1xyXG4gICAgICAgIHRoaXMubGFiZWwuYXBwZW5kQ2hpbGQobmFtZSk7XHJcbiAgICAgICAgdGhpcy5maWVsZFNldC5hcHBlbmRDaGlsZCh0aGlzLmxhYmVsKTtcclxuICAgICAgICB0aGlzLmJ1aWxkRW50cmllcygpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZmllbGRTZXQpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZvY3VzLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcclxuICAgIH1cclxuICAgIGJ1aWxkRW50cmllcygpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICAgICAgICBub2RlLnR5cGUgPSAncmFkaW8nO1xyXG4gICAgICAgICAgICBub2RlLmlkID0gYCR7dGhpcy5pZH1fJHtpdGVtLmlkfWA7XHJcbiAgICAgICAgICAgIG5vZGUubmFtZSA9IHRoaXMuaWQ7XHJcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSBpdGVtLmlkIHx8IGAke2luZGV4fWA7XHJcbiAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uSXRlbUZvY3VzLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdCcsIHRoaXMub25TZWxlY3RJdGVtLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VJdGVtLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMucHVzaChub2RlKTtcclxuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xyXG4gICAgICAgICAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsIGAke3RoaXMuaWR9XyR7aXRlbS5pZH1gKTtcclxuICAgICAgICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSBpdGVtLnRpdGxlO1xyXG4gICAgICAgICAgICB0aGlzLmZpZWxkU2V0LmFwcGVuZChub2RlKTtcclxuICAgICAgICAgICAgdGhpcy5maWVsZFNldC5hcHBlbmQobGFiZWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25JdGVtRm9jdXMoZXZlbnQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgSXRlbSBmb2N1c2VkOiBgLCBldmVudCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdmb2N1cycsIHRoaXMuaWQpO1xyXG4gICAgfVxyXG4gICAgZ2V0Q29udGVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgb25TZWxlY3RJdGVtKGV2ZW50KSB7IH1cclxuICAgIG9uQ2hhbmdlSXRlbShldmVudCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBpbnB1dFtuYW1lID0gXCIke3RoaXMuaWR9XCJdOmNoZWNrZWRgKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gYCR7dGhpcy5pZH1fJHtpdGVtLmlkfWAgPT09IG5vZGUuaWQpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgndXBkYXRlJywge1xyXG4gICAgICAgICAgICB0eXBlOiAnc2VsZWN0b3InLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50VmFsdWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZvY3VzKCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBpbnB1dFtuYW1lID0gXCIke3RoaXMuaWR9XCJdOmNoZWNrZWRgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXNbMF07XHJcbiAgICAgICAgbm9kZS5mb2N1cygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJhc2VJdGVtIH0gZnJvbSAnLi9iYXNlLWl0ZW0nO1xyXG5leHBvcnQgY2xhc3MgU2xpZGVySXRlbSBleHRlbmRzIEJhc2VJdGVtIHtcclxuICAgIGNvbnN0cnVjdG9yKGlkLCB0aXRsZSwgbWluLCBtYXgsIHN0ZXAsIGRlZmF1bHRWYWx1ZSA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcihpZCwgdGl0bGUpO1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgICAgIHRoaXMuc3RlcCA9IHN0ZXA7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbiAgICBnZXRET01Ob2RlKCkge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XHJcbiAgICAgICAgdGhpcy5sYWJlbC50ZXh0Q29udGVudCA9IHRoaXMudGl0bGU7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsIGBzbGlkZXJfJHt0aGlzLmlkfWApO1xyXG4gICAgICAgIHRoaXMuc2xpZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgICAgICB0aGlzLnNsaWRlci5pZCA9IGBzbGlkZXJfJHt0aGlzLmlkfWA7XHJcbiAgICAgICAgdGhpcy5zbGlkZXIudHlwZSA9ICdyYW5nZSc7XHJcbiAgICAgICAgdGhpcy5zbGlkZXIuc2V0QXR0cmlidXRlKCdtaW4nLCB0aGlzLm1pbi50b1N0cmluZygpKTtcclxuICAgICAgICB0aGlzLnNsaWRlci5zZXRBdHRyaWJ1dGUoJ21heCcsIHRoaXMubWF4LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIHRoaXMuc2xpZGVyLnNldEF0dHJpYnV0ZSgnc3RlcCcsIHRoaXMuc3RlcC50b1N0cmluZygpKTtcclxuICAgICAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUpXHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyLnZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICB0aGlzLnNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuc2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZvY3VzLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMubGFiZWwpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2xpZGVyKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25Gb2N1cy5iaW5kKHRoaXMpKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XHJcbiAgICB9XHJcbiAgICBnZXRDb250ZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXIudmFsdWU7XHJcbiAgICB9XHJcbiAgICBvbkNoYW5nZShldmVudCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgndXBkYXRlJywge1xyXG4gICAgICAgICAgICB0eXBlOiAnc2xpZGVyJyxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2xpZGVyLnZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmb2N1cygpIHtcclxuICAgICAgICB0aGlzLnNsaWRlciAmJiB0aGlzLnNsaWRlci5mb2N1cygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJhc2VJdGVtIH0gZnJvbSAnLi9iYXNlLWl0ZW0nO1xyXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hJdGVtIGV4dGVuZHMgQmFzZUl0ZW0ge1xyXG4gICAgY29uc3RydWN0b3IoaWQsIHRpdGxlKSB7XHJcbiAgICAgICAgc3VwZXIoaWQsIHRpdGxlKTtcclxuICAgIH1cclxuICAgIGdldERPTU5vZGUoKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB0aGlzLmxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcclxuICAgICAgICB0aGlzLmxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgYGNoa2J4XyR7dGhpcy5pZH1gKTtcclxuICAgICAgICB0aGlzLmxhYmVsLnRleHRDb250ZW50ID0gdGhpcy50aXRsZTtcclxuICAgICAgICB0aGlzLmNoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveEVsZW1lbnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2NoZWNrYm94Jyk7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveEVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIGBjaGtieF8ke3RoaXMuaWR9YCk7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uRm9jdXMuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmxhYmVsKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNoZWNrYm94RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xyXG4gICAgfVxyXG4gICAgZ2V0Q29udGVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tib3hFbGVtZW50LmNoZWNrZWQ7XHJcbiAgICB9XHJcbiAgICBvbkNoYW5nZShldmVudCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgndXBkYXRlJywge1xyXG4gICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jaGVja2JveEVsZW1lbnQuY2hlY2tlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveEVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxufVxyXG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmltcG9ydCAqIGFzIEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcclxuaW1wb3J0IHsgU291bmRNYW5hZ2VyIH0gZnJvbSAnLi9zb3VuZC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgS2V5Ym9hcmRNYW5hZ2VyIH0gZnJvbSAnLi9rZXlib2FyZC1tYW5hZ2VyJztcclxuZXhwb3J0IGNsYXNzIE1lbnUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IodGl0bGUgPSAnTWVudScsIG1lbnVJdGVtcyA9IFtdLCBzb3VuZFNldCA9IG51bGwsIGRlZmF1bHRBY3Rpb24gPSBudWxsLCBjYW5jZWxBY3Rpb24gPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgdGhpcy5tZW51SXRlbXMgPSBtZW51SXRlbXM7XHJcbiAgICAgICAgdGhpcy5zb3VuZFNldCA9IHNvdW5kU2V0O1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbiA9IGRlZmF1bHRBY3Rpb247XHJcbiAgICAgICAgdGhpcy5jYW5jZWxBY3Rpb24gPSBjYW5jZWxBY3Rpb247XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuRE9NTm9kZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zb3VuZE1hbmFnZXIgPSBuZXcgU291bmRNYW5hZ2VyKHNvdW5kU2V0KTtcclxuICAgICAgICB0aGlzLmtleWJvYXJkTWFuYWdlciA9IG5ldyBLZXlib2FyZE1hbmFnZXIodGhpcyk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMubWVudUl0ZW1zW3RoaXMuY3VycmVudEluZGV4XSAmJlxyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtc1t0aGlzLmN1cnJlbnRJbmRleF0uZm9jdXMoKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2luaXQnKTtcclxuICAgIH1cclxuICAgIGFkZEl0ZW0oaXRlbSkge1xyXG4gICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdpdGVtLmFkZCcsIGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2V0VGl0bGUodGl0bGUpIHtcclxuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzZXRTb3VuZFNldChzb3VuZFNldCkge1xyXG4gICAgICAgIHRoaXMuc291bmRTZXQgPSBzb3VuZFNldDtcclxuICAgICAgICB0aGlzLnNvdW5kTWFuYWdlci5zZXRTb3VuZFNldCh0aGlzLnNvdW5kU2V0KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNldERlZmF1bHRBY3Rpb24oaWQpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRBY3Rpb24gPSBpZDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNldENhbmNlbEFjdGlvbihpZCkge1xyXG4gICAgICAgIHRoaXMuY2FuY2VsQWN0aW9uID0gaWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBydW4oZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGl0bGVDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZUNvbnRhaW5lci50ZXh0Q29udGVudCA9IHRoaXMudGl0bGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRpdGxlQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFRvQ29udGFpbmVyKGl0ZW0uZ2V0RE9NTm9kZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm9uKCd1cGRhdGUnLCB0aGlzLmhhbmRsZUl0ZW1VcGRhdGUuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vbignZm9jdXMnLCB0aGlzLm9uSXRlbUZvY3VzLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub24oJ2Nob29zZScsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZW51TWFwID0gdGhpcy5jb21waWxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291bmRNYW5hZ2VyLmhhbmRsZVNvdW5kKCdjaG9vc2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdjaG9vc2UnLCBtZW51TWFwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtZW51TWFwKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kTWFuYWdlci5oYW5kbGVTb3VuZCgnb3BlbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlib2FyZE1hbmFnZXIuaW5pdCgpO1xyXG4gICAgICAgICAgICAgICAgLy8gcHVzaCBzb21lIGRhdGEgb250byB0aGUgaGlzdG9yeSBzdGFjayBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlIGJyb3dzZXIncyBiYWNrIGJ1dHRvbiB0byBleGl0IG91dCBvZiB0aGUgbWVudS5cclxuICAgICAgICAgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHsgbWVudTogdHJ1ZSB9LCBudWxsLCBudWxsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnNvdW5kTWFuYWdlci5oYW5kbGVTb3VuZCgnY2xvc2UnKTtcclxuICAgICAgICB0aGlzLmtleWJvYXJkTWFuYWdlci5yZWxlYXNlKCk7XHJcbiAgICAgICAgdGhpcy5ET01Ob2Rlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKGl0ZW0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcclxuICAgIH1cclxuICAgIGFwcGVuZFRvQ29udGFpbmVyKG5vZGUpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChub2RlKTtcclxuICAgICAgICB0aGlzLkRPTU5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVJdGVtVXBkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zb3VuZE1hbmFnZXIuaGFuZGxlU291bmQodmFsdWUudHlwZSwgdmFsdWUudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcy5jb21waWxlKCkpO1xyXG4gICAgfVxyXG4gICAgb25JdGVtRm9jdXMoaWQpIHtcclxuICAgICAgICB0aGlzLnNvdW5kTWFuYWdlci5oYW5kbGVTb3VuZCgnZm9jdXMnKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YodGhpcy5tZW51SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5nZXRJRCgpID09IGlkKSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdmb2N1cycsIHRoaXMubWVudUl0ZW1zW3RoaXMuY3VycmVudEluZGV4XSk7XHJcbiAgICB9XHJcbiAgICBmb2N1c05leHQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5tZW51SXRlbXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvY3VzQ3VycmVudEluZGV4KCk7XHJcbiAgICB9XHJcbiAgICBmb2N1c1ByZXZpb3VzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb2N1c0N1cnJlbnRJbmRleCgpO1xyXG4gICAgfVxyXG4gICAgZm9jdXNDdXJyZW50SW5kZXgoKSB7XHJcbiAgICAgICAgdGhpcy5tZW51SXRlbXNbdGhpcy5jdXJyZW50SW5kZXhdLmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBnZXRDdXJyZW50Rm9jdXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUl0ZW1zW3RoaXMuY3VycmVudEluZGV4XTtcclxuICAgIH1cclxuICAgIGdldENvbnRhaW5lcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XHJcbiAgICB9XHJcbiAgICBjbGlja0RlZmF1bHRBY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5tZW51SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5nZXRJRCgpID09PSB0aGlzLmRlZmF1bHRBY3Rpb24pO1xyXG4gICAgICAgIGl0ZW0uY2xpY2soKTtcclxuICAgIH1cclxuICAgIGNsaWNrQ2FuY2VsQWN0aW9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5tZW51SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5nZXRJRCgpID09PSB0aGlzLmNhbmNlbEFjdGlvbik7XHJcbiAgICAgICAgbm9kZS5jbGljaygpO1xyXG4gICAgfVxyXG4gICAgY29tcGlsZSgpIHtcclxuICAgICAgICBjb25zdCBtZW51TWFwID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMubWVudUl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IG1lbnVNYXAuc2V0KGl0ZW0uZ2V0SUQoKSwgaXRlbS5nZXRDb250ZW50cygpKSk7XHJcbiAgICAgICAgbWVudU1hcC5zZXQoJ3NlbGVjdGVkJywgdGhpcy5tZW51SXRlbXNbdGhpcy5jdXJyZW50SW5kZXhdLmdldElEKCkpO1xyXG4gICAgICAgIHJldHVybiBtZW51TWFwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCAqIGZyb20gJy4vaXRlbXMnO1xyXG4iXSwibmFtZXMiOlsiaGFzIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwcmVmaXgiLCJFdmVudHMiLCJFRSIsImZuIiwiY29udGV4dCIsIm9uY2UiLCJ0aGlzIiwiYWRkTGlzdGVuZXIiLCJlbWl0dGVyIiwiZXZlbnQiLCJUeXBlRXJyb3IiLCJsaXN0ZW5lciIsImV2dCIsIl9ldmVudHMiLCJwdXNoIiwiX2V2ZW50c0NvdW50IiwiY2xlYXJFdmVudCIsIkV2ZW50RW1pdHRlciIsImNyZWF0ZSIsIl9fcHJvdG9fXyIsImV2ZW50TmFtZXMiLCJldmVudHMiLCJuYW1lIiwibmFtZXMiLCJjYWxsIiwic2xpY2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJjb25jYXQiLCJsaXN0ZW5lcnMiLCJoYW5kbGVycyIsImkiLCJsIiwibGVuZ3RoIiwiZWUiLCJBcnJheSIsImxpc3RlbmVyQ291bnQiLCJlbWl0IiwiYTEiLCJhMiIsImEzIiwiYTQiLCJhNSIsImFyZ3MiLCJsZW4iLCJhcmd1bWVudHMiLCJyZW1vdmVMaXN0ZW5lciIsInVuZGVmaW5lZCIsImFwcGx5IiwiaiIsIm9uIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwib2ZmIiwicHJlZml4ZWQiLCJtb2R1bGUiLCJleHBvcnRzIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm4iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZCIsImEiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIm9iaiIsInByb3AiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsImJ1aWxkUGF0aCIsImJhc2VQYXRoIiwicGF0aCIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsIkRvd25sb2FkZXIiLCJjb25zdHJ1Y3RvciIsInN0b3JhZ2UiLCJxdWV1ZSIsInN1cGVyIiwic2V0QmFzZVBhdGgiLCJkb3dubG9hZCIsImRvd25sb2FkZWQiLCJNYXAiLCJudW1Eb3dubG9hZGVkIiwicG9wIiwiaXRlbSIsImRvd25sb2FkSXRlbSIsInNldCIsInJlbWFpbmluZyIsImluQ2FjaGUiLCJyZXNwb25zZSIsImZldGNoIiwiYWRkIiwiUXVldWUiLCJpdGVtcyIsImZpbGUiLCJyZW1vdmUiLCJmaWx0ZXIiLCJBc3NldFN0b3JhZ2UiLCJpZCIsImluaXQiLCJjYWNoZSIsImNhY2hlcyIsIm9wZW4iLCJyZXF1ZXN0IiwicHV0IiwibWF0Y2giLCJzZXRNYW5pZmVzdCIsIm1hbmlmZXN0IiwicHJldk1hbmlmZXN0U3RyIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsInZlcnNpb24iLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiQ2hlY2tNYW5pZmVzdCIsImNsZWFyIiwia2V5cyIsImZvckVhY2giLCJkZWxldGUiLCJTb3VyY2VUeXBlIiwiQXNzZXRNYW5hZ2VyIiwiZG93bmxvYWRlciIsImNvbnNvbGUiLCJsb2ciLCJtYW5pZmVzdFBhdGgiLCJkYXRhIiwidGV4dCIsImVycm9yIiwiYWxlcnQiLCJ0b1N0cmluZyIsIk1hbmlmZXN0IiwiZW5xdWV1ZSIsImRvd25sb2FkRnJvbU1hbmlmZXN0IiwiaW5mbyIsImZpbGVzIiwiZG93bmxvYWRGaWxlIiwiY2xlYXJDYWNoZSIsIkJhc2VFbnRpdHkiLCJjb21wb25lbnRzIiwiYWRkQ29tcG9uZW50IiwiY29tcG9uZW50IiwiY29tcCIsInJlbW92ZUNvbXBvbmVudCIsImdldENvbXBvbmVudElEcyIsImdldENvbXBvbmVudCIsImdldENvbXBvbmVudEJ5SUQiLCJFdmVudEJ1cyIsImV2Iiwic3Vic2NyaWJlcnMiLCJzdWJzY3JpYmVyIiwiRXZlbnRJdGVtIiwic3Vic2NyaWJlIiwidW5zdWJzY3JpYmUiLCJ1bnN1YnNjcmliZUFsbCIsIlF1ZXJ5IiwiaW5jbHVkZSIsImV4Y2x1ZGUiLCJ3b3JsZCIsImlzRGlydHkiLCJyZXN1bHRzIiwiaW5jbHVkZUNvbXBvbmVudElkcyIsIm1hcCIsImV4Y2x1ZGVDb21wb25lbnRJZHMiLCJleGVjdXRlIiwiY29tcG9uZW50TmFtZXNUb0lEcyIsImVudGl0aWVzIiwiZW50aXR5IiwiaWRzIiwiZXhjbHVkZXMiLCJpbmNsdWRlcyIsIlN5c3RlbSIsImV4ZWN1dG9yIiwiV29ybGQiLCJuZXh0RW50aXR5SUQiLCJuZXh0Q29tcG9uZW50SUQiLCJuZXh0UXVlcnlJRCIsInN5c3RlbXMiLCJTZXQiLCJxdWVyeUNhY2hlIiwiZXZlbnRCdXMiLCJydW4iLCJzeXN0ZW0iLCJjcmVhdGVTeXN0ZW0iLCJzeXN0ZW1FeGVjdXRvciIsIm5ld1N5c3RlbSIsImFkZFN5c3RlbSIsImFkZEVudGl0eSIsIm1hcmtRdWVyaWVzRGlydHkiLCJyZW1vdmVFbnRpdHkiLCJlbnRpdHlUb1JlbW92ZSIsImNyZWF0ZUVudGl0eSIsIm5ld0VudGl0eSIsImV4dGVuZEVudGl0eSIsInRvQ2xvbmUiLCJmaW5kIiwiZm91bmQiLCJjbG9uZWQiLCJjcmVhdGVDb21wb25lbnQiLCJuZXdDb21wb25lbnQiLCJxdWVyeSIsImNyZWF0ZVF1ZXJ5IiwibmV3UXVlcnkiLCJCYXNlSW5wdXQiLCJlbGVtZW50IiwiZ2V0U3RhdGUiLCJjYXB0dXJlIiwicHJldmVudERlZmF1bHQiLCJyZWxlYXNlIiwiS2V5Ym9hcmQiLCJrZXlzRG93biIsImtleXNKdXN0UHJlc3NlZCIsImtleXNKdXN0UmVsZWFzZWQiLCJoYW5kbGVLZXlEb3duIiwiYmluZCIsImhhbmRsZUtleVVwIiwiYWN0aXZlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzdGF0ZSIsImtleUNvZGUiLCJNb3VzZSIsIm1vdXNlUG9zaXRpb24iLCJQb3NpdGlvbiIsIm1vdXNlRGVsdGEiLCJEZWx0YSIsIm1vdXNlV2hlZWwiLCJtb3VzZUJ1dHRvbnMiLCJNb3VzZUJ1dHRvbnMiLCJoYW5kbGVNb3VzZURvd24iLCJoYW5kbGVNb3VzZU1vdmUiLCJoYW5kbGVNb3VzZVVwIiwiaGFuZGxlUG9pbnRlckNoYW5nZSIsImRvY3VtZW50IiwieCIsInkiLCJidXR0b24iLCJjbGllbnRYIiwiY2xpZW50WSIsIm1vdmVtZW50WCIsIm1vdmVtZW50WSIsInBvaW50ZXJMb2NrRWxlbWVudCIsInJlcXVlc3RQb2ludGVyTG9jayIsIklucHV0IiwiSW5wdXRJRHMiLCJpbnB1dHMiLCJpbnB1dElEIiwiaW5zdGFuY2UiLCJjcmVhdGVJbnB1dCIsImFkZElucHV0IiwiaW5wdXQiLCJ2ZWM0IiwidmFsdWVzIiwiRmxvYXQzMkFycmF5IiwieHl6dyIsInoiLCJ3IiwieHkiLCJ4eXoiLCJnIiwiYiIsInJnIiwicmdiIiwicmdiYSIsImF0IiwiaW5kZXgiLCJyZXNldCIsImNvcHkiLCJkZXN0IiwibmVnYXRlIiwiZXF1YWxzIiwidmVjdG9yIiwidGhyZXNob2xkIiwiZXBzaWxvbiIsIk1hdGgiLCJhYnMiLCJzcXJ0Iiwic3F1YXJlZExlbmd0aCIsInN1YnRyYWN0IiwibXVsdGlwbHkiLCJkaXZpZGUiLCJzY2FsZSIsIm5vcm1hbGl6ZSIsIm11bHRpcGx5TWF0NCIsIm1hdHJpeCIsIm11bHRpcGx5VmVjNCIsInN0YXRpYyIsInZlY3RvcjIiLCJ0aW1lIiwiemVybyIsIm9uZSIsIm1hdDQiLCJhbGwiLCJyb3ciLCJjb2wiLCJkZXRlcm1pbmFudCIsImEwMCIsImEwMSIsImEwMiIsImEwMyIsImExMCIsImExMSIsImExMiIsImExMyIsImEyMCIsImEyMSIsImEyMiIsImEyMyIsImEzMCIsImEzMSIsImEzMiIsImEzMyIsInNldElkZW50aXR5IiwidHJhbnNwb3NlIiwidGVtcDAxIiwidGVtcDAyIiwidGVtcDAzIiwidGVtcDEyIiwidGVtcDEzIiwidGVtcDIzIiwiaW52ZXJzZSIsImRldDAwIiwiZGV0MDEiLCJkZXQwMiIsImRldDAzIiwiZGV0MDQiLCJkZXQwNSIsImRldDA2IiwiZGV0MDciLCJkZXQwOCIsImRldDA5IiwiZGV0MTAiLCJkZXQxMSIsImRldCIsImIwIiwiYjEiLCJiMiIsImIzIiwibXVsdGlwbHlWZWMzIiwidG9NYXQzIiwibWF0MyIsInRvSW52ZXJzZU1hdDMiLCJkZXQyMSIsInRyYW5zbGF0ZSIsInJvdGF0ZSIsImFuZ2xlIiwiYXhpcyIsInMiLCJzaW4iLCJjIiwiY29zIiwidCIsImIwMCIsImIwMSIsImIwMiIsImIxMCIsImIxMSIsImIxMiIsImIyMCIsImIyMSIsImIyMiIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsInRvcCIsIm5lYXIiLCJmYXIiLCJybCIsInRiIiwiZm92IiwiYXNwZWN0IiwidGFuIiwiUEkiLCJmcnVzdHVtIiwicG9zaXRpb24iLCJ0YXJnZXQiLCJ1cCIsImlkZW50aXR5IiwibTEiLCJtMiIsImIwMyIsImIxMyIsImIyMyIsImIzMCIsImIzMSIsImIzMiIsImIzMyIsInZlYzIiLCJtdWx0aXBseU1hdDIiLCJtdWx0aXBseVZlYzIiLCJtdWx0aXBseU1hdDMiLCJ4MiIsInNxdWFyZWREaXN0YW5jZSIsInkyIiwidG9NYXQ0IiwidG9RdWF0IiwibTAwIiwibTAxIiwibTAyIiwibTEwIiwibTExIiwibTEyIiwibTIwIiwibTIxIiwibTIyIiwiZm91clhTcXVhcmVkTWludXMxIiwiZm91cllTcXVhcmVkTWludXMxIiwiZm91clpTcXVhcmVkTWludXMxIiwiYmlnZ2VzdEluZGV4IiwiZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxIiwiYmlnZ2VzdFZhbCIsIm11bHQiLCJxdWF0Iiwicm9sbCIsImF0YW4yIiwicGl0Y2giLCJ5YXciLCJhc2luIiwiY2FsY3VsYXRlVyIsImRvdCIsImludkRvdCIsImNvbmp1Z2F0ZSIsIm90aGVyIiwicTF4IiwicTF5IiwicTF6IiwicTF3IiwicTJ4IiwicTJ5IiwicTJ6IiwicTJ3IiwicXgiLCJxeSIsInF6IiwicXciLCJpeCIsIml5IiwiaXoiLCJpdyIsInoyIiwieHgiLCJ4eiIsInl5IiwieXoiLCJ6eiIsInd4Iiwid3kiLCJ3eiIsInExIiwicTIiLCJxMmEiLCJrMCIsImsxIiwib25lT3ZlclNpbiIsImNvc0hhbGZUaGV0YSIsImhhbGZUaGV0YSIsImFjb3MiLCJzaW5IYWxmVGhldGEiLCJyYXRpb0EiLCJyYXRpb0IiLCJtdWx0aXBseUJ5TWF0MyIsIm11bHRpcGx5QnlRdWF0IiwicXVhdGVybmlvbiIsImZvcndhcmQiLCJCYXNlT3V0cHV0Iiwic3BlYWsiLCJzdG9wIiwic2V0T3B0aW9ucyIsIm9wdGlvbnMiLCJBcmlhT3V0cHV0IiwidGltZW91dCIsImNvbnRhaW5lciIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzcGVlY2hEaXNwbGF5IiwiYXBwZW5kIiwiYm9keSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsImNsZWFyRGlzcGxheSIsIm5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInBhcmEiLCJzZXRUaW1lb3V0IiwiaW5uZXJIVE1MIiwiV2ViVFRTT3V0cHV0IiwiVFRTIiwib3V0cHV0IiwiY3JlYXRlT3V0cHV0IiwiU291bmRNYW5hZ2VyIiwic291bmRTZXQiLCJzZXRTb3VuZFNldCIsImhhbmRsZVNvdW5kIiwidHlwZSIsImhhbmRsZUVkaXRTb3VuZCIsImhhbmRsZVNsaWRlclNvdW5kIiwiaGFuZGxlU2VsZWN0b3JTb3VuZCIsImhhbmRsZUNoZWNrYm94U291bmQiLCJoYW5kbGVGb2N1c1NvdW5kIiwiaGFuZGxlQ2hvb3NlU291bmQiLCJoYW5kbGVPcGVuU291bmQiLCJoYW5kbGVDbG9zZVNvdW5kIiwicHJldkRhdGEiLCJwbGF5IiwiY2hhciIsInNjcm9sbGVyIiwic2xpZGVyTGVmdCIsInNsaWRlclJpZ2h0IiwibW92ZSIsImNsb3NlIiwiY2hvb3NlIiwiY2hlY2tlZCIsInVuY2hlY2tlZCIsIktleWJvYXJkTWFuYWdlciIsIm1lbnUiLCJnZXRDb250YWluZXIiLCJoYW5kbGVyIiwid2luZG93Iiwib25wb3BzdGF0ZSIsImNsaWNrQ2FuY2VsQWN0aW9uIiwiZm9jdXNOZXh0IiwiZm9jdXNQcmV2aW91cyIsImNsaWNrRGVmYXVsdEFjdGlvbiIsIkJhc2VJdGVtIiwidGl0bGUiLCJnZXRET01Ob2RlIiwiZ2V0Q29udGVudHMiLCJvbkZvY3VzIiwiZm9jdXMiLCJjbGljayIsImdldElEIiwiRWRpdEl0ZW0iLCJpbml0aWFsVGV4dCIsImlzUGFzc3dvcmQiLCJjb250ZW50cyIsImxhYmVsIiwidGV4dENvbnRlbnQiLCJlZGl0RmllbGQiLCJvbkNoYW5nZSIsIk1lbnVJdGVtIiwiaGFuZGxlQ2xpY2siLCJTZWxlY3Rvckl0ZW0iLCJlbnRyaWVzIiwibGlzdENvbnRhaW5lciIsImZpZWxkU2V0IiwiYnVpbGRFbnRyaWVzIiwib25JdGVtRm9jdXMiLCJvblNlbGVjdEl0ZW0iLCJvbkNoYW5nZUl0ZW0iLCJjdXJyZW50VmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiU2xpZGVySXRlbSIsIm1pbiIsIm1heCIsImRlZmF1bHRWYWx1ZSIsInNsaWRlciIsIkNoZWNrYm94SXRlbSIsImNoZWNrYm94RWxlbWVudCIsIk1lbnUiLCJtZW51SXRlbXMiLCJkZWZhdWx0QWN0aW9uIiwiY2FuY2VsQWN0aW9uIiwiY3VycmVudEluZGV4IiwiRE9NTm9kZXMiLCJjdXJyZW50SXRlbSIsInNvdW5kTWFuYWdlciIsImtleWJvYXJkTWFuYWdlciIsImFkZEl0ZW0iLCJzZXRUaXRsZSIsInNldERlZmF1bHRBY3Rpb24iLCJzZXRDYW5jZWxBY3Rpb24iLCJ0aXRsZUNvbnRhaW5lciIsImFwcGVuZFRvQ29udGFpbmVyIiwiaGFuZGxlSXRlbVVwZGF0ZSIsIm1lbnVNYXAiLCJjb21waWxlIiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsInJlbW92ZUNoaWxkIiwiaW5kZXhPZiIsImZvY3VzQ3VycmVudEluZGV4IiwiZ2V0Q3VycmVudEZvY3VzIl0sInNvdXJjZVJvb3QiOiIifQ==
|