-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSKY.html
2 lines (2 loc) · 290 KB
/
SKY.html
1
2
<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,shrink-to-fit=0,user-scalable=no,minimum-scale=1,maximum-scale=1"><title>index</title><style>html{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:column}body{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:row;margin:0}canvas{margin:auto;display:block;box-shadow:0 2px 12px -2px rgba(0,0,0,.15)}</style><body><script>!function t(e,n,r){function i(s,a){if(!n[s]){if(!e[s]){var c="function"==typeof require&&require;if(!a&&c)return c(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var p=n[s]={exports:{}};e[s][0].call(p.exports,(function(t){return i(e[s][1][t]||t)}),p,p.exports,t,e,n,r)}return n[s].exports}for(var o="function"==typeof require&&require,s=0;s<r.length;s++)i(r[s]);return i}({1:[function(t,e,n){e.exports=function(t,e,n){if("number"!=typeof e||"number"!=typeof n)throw new TypeError('Must specify "to" and "from" arguments as numbers');if(e>n){var r=e;e=n,n=r}var i=n-e;if(0===i)return n;return t-i*Math.floor((t-e)/i)}},{}],2:[function(t,e,n){var r=t("defined"),i=t("./lib/wrap"),o=Number.EPSILON;function s(t,e,n){return e<n?t<e?e:t>n?n:t:t<n?n:t>e?e:t}function a(t,e,n){return t*(1-n)+e*n}function c(t,e,n){return Math.abs(t-e)<o?0:(n-t)/(e-t)}function u(t,e){return e=r(e,0),"number"==typeof t&&isFinite(t)?t:e}function p(t){if("number"!=typeof t)throw new TypeError("Expected dims argument");return function(e,n){var i;n=r(n,0),null==e?i=n:"number"==typeof e&&isFinite(e)&&(i=e);var o,s=[];if(null==i)for(o=0;o<t;o++)s[o]=u(e[o],n);else for(o=0;o<t;o++)s[o]=i;return s}}function f(t,e,n,r){if(r=r||[],t.length!==e.length)throw new TypeError("min and max array are expected to have the same length");for(var i=0;i<t.length;i++)r[i]=a(t[i],e[i],n);return r}function h(t,e){if("number"!=typeof(t=r(t,0)))throw new TypeError("Expected n argument to be a number");for(var n=[],i=0;i<t;i++)n.push(e);return n}function l(t,e){return(t%e+e)%e}function d(t,e,n,r){return a(t,e,1-Math.exp(-n*r))}e.exports={mod:l,fract:function(t){return t-Math.floor(t)},sign:function(t){return t>0?1:t<0?-1:0},degToRad:function(t){return t*Math.PI/180},radToDeg:function(t){return 180*t/Math.PI},wrap:i,pingPong:function(t,e){return t=l(t,2*e),e-Math.abs(t-e)},linspace:function(t,e){if("number"!=typeof(t=r(t,0)))throw new TypeError("Expected n argument to be a number");"boolean"==typeof(e=e||{})&&(e={endpoint:!0});var n=r(e.offset,0);return e.endpoint?h(t).map((function(e,r){return t<=1?0:(r+n)/(t-1)})):h(t).map((function(e,r){return(r+n)/t}))},lerp:a,lerpArray:f,inverseLerp:c,lerpFrames:function(t,e,n){e=s(e,0,1);var r=t.length-1,i=e*r,o=Math.floor(i),c=i-o,u=Math.min(o+1,r),p=t[o%t.length],h=t[u%t.length];if("number"==typeof p&&"number"==typeof h)return a(p,h,c);if(Array.isArray(p)&&Array.isArray(h))return f(p,h,c,n);throw new TypeError("Mismatch in value type of two array elements: "+o+" and "+u)},clamp:s,clamp01:function(t){return s(t,0,1)},smoothstep:function(t,e,n){var r=s(c(t,e,n),0,1);return r*r*(3-2*r)},damp:d,dampArray:function(t,e,n,r,i){i=i||[];for(var o=0;o<t.length;o++)i[o]=d(t[o],e[o],n,r);return i},mapRange:function(t,e,n,r,i,s){if(Math.abs(e-n)<o)return r;var a=(t-e)/(n-e)*(i-r)+r;return s&&(i<r?a<i?a=i:a>r&&(a=r):a>i?a=i:a<r&&(a=r)),a},expand2D:p(2),expand3D:p(3),expand4D:p(4)}},{"./lib/wrap":1,defined:5}],3:[function(t,e,n){var r=t("seed-random"),i=t("simplex-noise"),o=t("defined");e.exports=function t(e){e=o(e,null);var n,s,a,c=Math.random,u=null,p=!1;return f(e),{value:h,createRandom:function(e){return t(e)},setSeed:f,getSeed:function(){return n},getRandomSeed:function(){return String(Math.floor(1e6*Math.random()))},valueNonZero:function(){var t=0;for(;0===t;)t=h();return t},permuteNoise:function(){a=l()},noise1D:function(t,e,n){if(!isFinite(t))throw new TypeError("x component for noise() must be finite");return e=o(e,1),(n=o(n,1))*a.noise2D(t*e,0)},noise2D:function(t,e,n,r){if(!isFinite(t))throw new TypeError("x component for noise() must be finite");if(!isFinite(e))throw new TypeError("y component for noise() must be finite");return n=o(n,1),(r=o(r,1))*a.noise2D(t*n,e*n)},noise3D:function(t,e,n,r,i){if(!isFinite(t))throw new TypeError("x component for noise() must be finite");if(!isFinite(e))throw new TypeError("y component for noise() must be finite");if(!isFinite(n))throw new TypeError("z component for noise() must be finite");return r=o(r,1),(i=o(i,1))*a.noise3D(t*r,e*r,n*r)},noise4D:function(t,e,n,r,i,s){if(!isFinite(t))throw new TypeError("x component for noise() must be finite");if(!isFinite(e))throw new TypeError("y component for noise() must be finite");if(!isFinite(n))throw new TypeError("z component for noise() must be finite");if(!isFinite(r))throw new TypeError("w component for noise() must be finite");return i=o(i,1),(s=o(s,1))*a.noise4D(t*i,e*i,n*i,r*i)},sign:function(){return d()?1:-1},boolean:d,chance:function(t){if("number"!=typeof(t=o(t,.5)))throw new TypeError("expected n to be a number");return h()<t},range:m,rangeFloor:y,pick:function(t){return 0===t.length?void 0:t[y(0,t.length)]},shuffle:function(t){if(!Array.isArray(t))throw new TypeError("Expected Array, got "+typeof t);var e,n,r=t.length,i=t.slice();for(;r;)e=Math.floor(h()*r--),n=i[r],i[r]=i[e],i[e]=n;return i},onCircle:g,insideCircle:function(t,e){t=o(t,1),g(1,e=e||[]);var n=t*Math.sqrt(h());return e[0]*=n,e[1]*=n,e},onSphere:function(t,e){t=o(t,1),e=e||[];var n=h()*Math.PI*2,r=2*h()-1,i=n,s=Math.acos(r);return e[0]=t*Math.sin(s)*Math.cos(i),e[1]=t*Math.sin(s)*Math.sin(i),e[2]=t*Math.cos(s),e},insideSphere:function(t,e){t=o(t,1),e=e||[];var n=h()*Math.PI*2,r=2*h()-1,i=h(),s=n,a=Math.acos(r),c=t*Math.cbrt(i);return e[0]=c*Math.sin(a)*Math.cos(s),e[1]=c*Math.sin(a)*Math.sin(s),e[2]=c*Math.cos(a),e},quaternion:function(t){t=t||[];var e=h(),n=h(),r=h(),i=Math.sqrt(1-e),o=Math.sqrt(e),s=2*Math.PI*n,a=2*Math.PI*r,c=Math.sin(s)*i,u=Math.cos(s)*i,p=Math.sin(a)*o,f=Math.cos(a)*o;return t[0]=c,t[1]=u,t[2]=p,t[3]=f,t},weighted:w,weightedSet:function(t){return 0===(t=t||[]).length?null:t[v(t)].value},weightedSetIndex:v,gaussian:function(t,e){if(t=o(t,0),e=o(e,1),p){p=!1;var n=u;return u=null,t+e*n}var r=0,i=0,s=0;do{s=(r=2*h()-1)*r+(i=2*h()-1)*i}while(s>=1||0===s);var a=Math.sqrt(-2*Math.log(s)/s);return u=i*a,p=!0,t+e*(r*a)}};function f(t,e){"number"==typeof t||"string"==typeof t?s=r(n=t,e):(n=void 0,s=c),a=l(),u=null,p=!1}function h(){return s()}function l(){return new i(s)}function d(){return h()>.5}function m(t,e){if(void 0===e&&(e=t,t=0),"number"!=typeof t||"number"!=typeof e)throw new TypeError("Expected all arguments to be numbers");return h()*(e-t)+t}function y(t,e){if(void 0===e&&(e=t,t=0),"number"!=typeof t||"number"!=typeof e)throw new TypeError("Expected all arguments to be numbers");return Math.floor(m(t,e))}function g(t,e){t=o(t,1),e=e||[];var n=2*h()*Math.PI;return e[0]=t*Math.cos(n),e[1]=t*Math.sin(n),e}function v(t){return 0===(t=t||[]).length?-1:w(t.map((function(t){return t.weight})))}function w(t){if(0===(t=t||[]).length)return-1;var e,n=0;for(e=0;e<t.length;e++)n+=t[e];if(n<=0)throw new Error("Weights must sum to > 0");var r=h()*n;for(e=0;e<t.length;e++){if(r<t[e])return e;r-=t[e]}return 0}}()},{defined:5,"seed-random":6,"simplex-noise":7}],4:[function(t,e,n){(function(t){(function(){!function(t,r){"object"==typeof n&&void 0!==e?e.exports=r():"function"==typeof define&&define.amd?define(r):t.canvasSketch=r()}(this,(function(){var e=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;var i=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(t){r[t]=t})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(t){return!1}}()?Object.assign:function(t,i){for(var o,s,a=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),c=1;c<arguments.length;c++){for(var u in o=Object(arguments[c]))n.call(o,u)&&(a[u]=o[u]);if(e){s=e(o);for(var p=0;p<s.length;p++)r.call(o,s[p])&&(a[s[p]]=o[s[p]])}}return a},o="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};function s(t,e){return t(e={exports:{}},e.exports),e.exports}var a=o.performance&&o.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date},c=function(t){return!!t&&("object"==typeof t||"function"==typeof t)&&"function"==typeof t.then};var u=function(t){return!(!t||"object"!=typeof t)&&("object"==typeof window&&"object"==typeof window.Node?t instanceof window.Node:"number"==typeof t.nodeType&&"string"==typeof t.nodeName)};function p(){return"undefined"!=typeof window&&window["canvas-sketch-cli"]}function f(){for(var t=arguments,e=0;e<arguments.length;e++)if(null!=t[e])return t[e]}function h(){return"undefined"!=typeof document}var l,d=s((function(t,e){function n(t){var e=[];for(var n in t)e.push(n);return e}(t.exports="function"==typeof Object.keys?Object.keys:n).shim=n})),m=s((function(t,e){var n="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();function r(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function i(t){return t&&"object"==typeof t&&"number"==typeof t.length&&Object.prototype.hasOwnProperty.call(t,"callee")&&!Object.prototype.propertyIsEnumerable.call(t,"callee")||!1}(e=t.exports=n?r:i).supported=r,e.unsupported=i})),y=s((function(t){var e=Array.prototype.slice,n=t.exports=function(t,o,s){return s||(s={}),t===o||(t instanceof Date&&o instanceof Date?t.getTime()===o.getTime():!t||!o||"object"!=typeof t&&"object"!=typeof o?s.strict?t===o:t==o:function(t,o,s){var a,c;if(r(t)||r(o))return!1;if(t.prototype!==o.prototype)return!1;if(m(t))return!!m(o)&&(t=e.call(t),o=e.call(o),n(t,o,s));if(i(t)){if(!i(o))return!1;if(t.length!==o.length)return!1;for(a=0;a<t.length;a++)if(t[a]!==o[a])return!1;return!0}try{var u=d(t),p=d(o)}catch(t){return!1}if(u.length!=p.length)return!1;for(u.sort(),p.sort(),a=u.length-1;a>=0;a--)if(u[a]!=p[a])return!1;for(a=u.length-1;a>=0;a--)if(!n(t[c=u[a]],o[c],s))return!1;return typeof t==typeof o}(t,o,s))};function r(t){return null==t}function i(t){return!(!t||"object"!=typeof t||"number"!=typeof t.length)&&("function"==typeof t.copy&&"function"==typeof t.slice&&!(t.length>0&&"number"!=typeof t[0]))}})),g=s((function(t,e){!function(e){var n,r,i,o=(n=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|"[^"]*"|'[^']*'/g,r=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,i=/[^-+\dA-Z]/g,function(t,e,a,c){if(1!==arguments.length||"string"!==(null===(u=t)?"null":void 0===u?"undefined":"object"!=typeof u?typeof u:Array.isArray(u)?"array":{}.toString.call(u).slice(8,-1).toLowerCase())||/\d/.test(t)||(e=t,t=void 0),(t=t||new Date)instanceof Date||(t=new Date(t)),isNaN(t))throw TypeError("Invalid date");var u,p=(e=String(o.masks[e]||e||o.masks.default)).slice(0,4);"UTC:"!==p&&"GMT:"!==p||(e=e.slice(4),a=!0,"GMT:"===p&&(c=!0));var f=a?"getUTC":"get",h=t[f+"Date"](),l=t[f+"Day"](),d=t[f+"Month"](),m=t[f+"FullYear"](),y=t[f+"Hours"](),g=t[f+"Minutes"](),v=t[f+"Seconds"](),w=t[f+"Milliseconds"](),b=a?0:t.getTimezoneOffset(),x=function(t){var e=new Date(t.getFullYear(),t.getMonth(),t.getDate());e.setDate(e.getDate()-(e.getDay()+6)%7+3);var n=new Date(e.getFullYear(),0,4);n.setDate(n.getDate()-(n.getDay()+6)%7+3);var r=e.getTimezoneOffset()-n.getTimezoneOffset();return e.setHours(e.getHours()-r),1+Math.floor((e-n)/6048e5)}(t),M=function(t){var e=t.getDay();return 0===e&&(e=7),e}(t),_={d:h,dd:s(h),ddd:o.i18n.dayNames[l],dddd:o.i18n.dayNames[l+7],m:d+1,mm:s(d+1),mmm:o.i18n.monthNames[d],mmmm:o.i18n.monthNames[d+12],yy:String(m).slice(2),yyyy:m,h:y%12||12,hh:s(y%12||12),H:y,HH:s(y),M:g,MM:s(g),s:v,ss:s(v),l:s(w,3),L:s(Math.round(w/10)),t:y<12?o.i18n.timeNames[0]:o.i18n.timeNames[1],tt:y<12?o.i18n.timeNames[2]:o.i18n.timeNames[3],T:y<12?o.i18n.timeNames[4]:o.i18n.timeNames[5],TT:y<12?o.i18n.timeNames[6]:o.i18n.timeNames[7],Z:c?"GMT":a?"UTC":(String(t).match(r)||[""]).pop().replace(i,""),o:(b>0?"-":"+")+s(100*Math.floor(Math.abs(b)/60)+Math.abs(b)%60,4),S:["th","st","nd","rd"][h%10>3?0:(h%100-h%10!=10)*h%10],W:x,N:M};return e.replace(n,(function(t){return t in _?_[t]:t.slice(1,t.length-1)}))});function s(t,e){for(t=String(t),e=e||2;t.length<e;)t="0"+t;return t}o.masks={default:"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:sso",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",expiresHeaderFormat:"ddd, dd mmm yyyy HH:MM:ss Z"},o.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],timeNames:["a","p","am","pm","A","P","AM","PM"]},t.exports=o}()})),v="",w=function(t,e){if("string"!=typeof t)throw new TypeError("expected a string");if(1===e)return t;if(2===e)return t+t;var n=t.length*e;if(l!==t||void 0===l)l=t,v="";else if(v.length>=n)return v.substr(0,n);for(;n>v.length&&e>1;)1&e&&(v+=t),e>>=1,t+=t;return v=(v+=t).substr(0,n)};var b,x=function(t,e,n){return t=t.toString(),void 0===e?t:(n=0===n?"0":n?n.toString():" ",w(n,e-t.length)+t)},M=function(){},_={extension:"",prefix:"",suffix:""},T=["image/png","image/jpeg","image/webp"];function k(t,e){return void 0===e&&(e={}),new Promise((function(n,r){e=i({},_,e);var o=P(Object.assign({},e,{extension:"",frame:void 0})),s=t?"streamStart":"streamEnd",a=p();return a&&a.output&&"function"==typeof a[s]?a[s](i({},e,{filename:o})).then((function(t){return n(t)})):n({filename:o,client:!1})}))}function E(t,e){return void 0===e&&(e={}),function(t){return new Promise((function(e){var n=t.indexOf(",");if(-1!==n){for(var r=t.slice(n+1),i=window.atob(r),o=t.slice(0,n),s=/data:([^;]+)/.exec(o),a=(s?s[1]:"")||void 0,c=new ArrayBuffer(i.length),u=new Uint8Array(c),p=0;p<i.length;p++)u[p]=i.charCodeAt(p);e(new window.Blob([c],{type:a}))}else e(new window.Blob)}))}(t).then((function(t){return S(t,e)}))}function S(t,e){return void 0===e&&(e={}),new Promise((function(n){var r=(e=i({},_,e)).filename,o=p();if(o&&"function"==typeof o.saveBlob&&o.output)return o.saveBlob(t,i({},e,{filename:r})).then((function(t){return n(t)}));b||((b=document.createElement("a")).style.visibility="hidden",b.target="_blank"),b.download=r,b.href=window.URL.createObjectURL(t),document.body.appendChild(b),b.onclick=function(){b.onclick=M,setTimeout((function(){window.URL.revokeObjectURL(t),b.parentElement&&b.parentElement.removeChild(b),b.removeAttribute("href"),n({filename:r,client:!1})}))},b.click()}))}function P(t){if(void 0===t&&(t={}),"function"==typeof(t=i({},t)).file)return t.file(t);if(t.file)return t.file;var e,n=null,r="";("string"==typeof t.extension&&(r=t.extension),"number"==typeof t.frame)&&(e="number"==typeof t.totalFrames?t.totalFrames:Math.max(1e4,t.frame),n=x(String(t.frame),String(e).length,"0"));var o=isFinite(t.totalLayers)&&isFinite(t.layer)&&t.totalLayers>1?""+t.layer:"";return null!=n?[o,n].filter(Boolean).join("-")+r:[t.prefix,t.name||t.timeStamp,o,t.hash,t.suffix].filter(Boolean).join("-")+r}var F={dimension:"dimensions",animated:"animate",animating:"animate",unit:"units",P5:"p5",pixellated:"pixelated",looping:"loop",pixelPerInch:"pixels"},R=["dimensions","units","pixelsPerInch","orientation","scaleToFit","scaleToView","bleed","pixelRatio","exportPixelRatio","maxPixelRatio","scaleContext","resizeCanvas","styleCanvas","canvas","context","attributes","parent","file","name","prefix","suffix","animate","playing","loop","duration","totalFrames","fps","playbackRate","timeScale","frame","time","flush","pixelated","hotkeys","p5","id","scaleToFitPadding","data","params","encoding","encodingQuality"],C=function(t){Object.keys(t).forEach((function(t){t in F?console.warn('[canvas-sketch] Could not recognize the setting "'+t+'", did you mean "'+F[t]+'"?'):R.includes(t)||console.warn('[canvas-sketch] Could not recognize the setting "'+t+'"')}))};var j=[["postcard",101.6,152.4],["poster-small",280,430],["poster",460,610],["poster-large",610,910],["business-card",50.8,88.9],["2r",64,89],["3r",89,127],["4r",102,152],["5r",127,178],["6r",152,203],["8r",203,254],["10r",254,305],["11r",279,356],["12r",305,381],["a0",841,1189],["a1",594,841],["a2",420,594],["a3",297,420],["a4",210,297],["a5",148,210],["a6",105,148],["a7",74,105],["a8",52,74],["a9",37,52],["a10",26,37],["2a0",1189,1682],["4a0",1682,2378],["b0",1e3,1414],["b1",707,1e3],["b1+",720,1020],["b2",500,707],["b2+",520,720],["b3",353,500],["b4",250,353],["b5",176,250],["b6",125,176],["b7",88,125],["b8",62,88],["b9",44,62],["b10",31,44],["b11",22,32],["b12",16,22],["c0",917,1297],["c1",648,917],["c2",458,648],["c3",324,458],["c4",229,324],["c5",162,229],["c6",114,162],["c7",81,114],["c8",57,81],["c9",40,57],["c10",28,40],["c11",22,32],["c12",16,22],["half-letter",5.5,8.5,"in"],["letter",8.5,11,"in"],["legal",8.5,14,"in"],["junior-legal",5,8,"in"],["ledger",11,17,"in"],["tabloid",11,17,"in"],["ansi-a",8.5,11,"in"],["ansi-b",11,17,"in"],["ansi-c",17,22,"in"],["ansi-d",22,34,"in"],["ansi-e",34,44,"in"],["arch-a",9,12,"in"],["arch-b",12,18,"in"],["arch-c",18,24,"in"],["arch-d",24,36,"in"],["arch-e",36,48,"in"],["arch-e1",30,42,"in"],["arch-e2",26,38,"in"],["arch-e3",27,39,"in"]].reduce((function(t,e){var n={units:e[3]||"mm",dimensions:[e[1],e[2]]};return t[e[0]]=n,t[e[0].replace(/-/g," ")]=n,t}),{}),D=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]},O=["mm","cm","m","pc","pt","in","ft","px"],A={m:{system:"metric",factor:1},cm:{system:"metric",factor:.01},mm:{system:"metric",factor:.001},pt:{system:"imperial",factor:1/72},pc:{system:"imperial",factor:1/6},in:{system:"imperial",factor:1},ft:{system:"imperial",factor:12}};const N={metric:{unit:"m",ratio:1/.0254},imperial:{unit:"in",ratio:.0254}};var H=function(t,e,n,r){if("number"!=typeof t||!isFinite(t))throw new Error("Value must be a finite number");if(!e||!n)throw new Error("Must specify from and to units");var i=D((r=r||{}).pixelsPerInch,96),o=r.precision,s=!1!==r.roundPixel;if(e=e.toLowerCase(),n=n.toLowerCase(),-1===O.indexOf(e))throw new Error('Invalid from unit "'+e+'", must be one of: '+O.join(", "));if(-1===O.indexOf(n))throw new Error('Invalid from unit "'+n+'", must be one of: '+O.join(", "));if(e===n)return t;var a=1,c=1,u=!1;"px"===e&&(c=1/i,e="in"),"px"===n&&(u=!0,a=i,n="in");var p=A[e],f=A[n],h=t*p.factor*c;p.system!==f.system&&(h*=N[p.system].ratio);var l=h/f.factor*a;return u&&s?l=Math.round(l):"number"==typeof o&&isFinite(o)&&(l=function(t,e){return Number(Math.round(t+"e"+e)+"e-"+e)}(l,o)),l};function I(t,e,n,r){return void 0===e&&(e="px"),void 0===n&&(n="px"),void 0===r&&(r=72),H(t,e,n,{pixelsPerInch:r,precision:4,roundPixel:!0})}function z(t,e){var n,r,i,o,s,a,c=h(),u=e.dimensions,p=function(t){return!(!t.dimensions||"string"!=typeof t.dimensions&&!(Array.isArray(t.dimensions)&&t.dimensions.length>=2))}(e),l=t.exporting,d=!!p&&!1!==e.scaleToFit,m=!(!l&&p)||e.scaleToView;c||(d=m=!1);var y,g,v=e.units,w="number"==typeof e.pixelsPerInch&&isFinite(e.pixelsPerInch)?e.pixelsPerInch:72,b=f(e.bleed,0),x=c?window.devicePixelRatio:1,M=m?x:1;"number"==typeof e.pixelRatio&&isFinite(e.pixelRatio)?g=f(e.exportPixelRatio,y=e.pixelRatio):p?(y=M,g=f(e.exportPixelRatio,1)):g=f(e.exportPixelRatio,y=x),"number"==typeof e.maxPixelRatio&&isFinite(e.maxPixelRatio)&&(y=Math.min(e.maxPixelRatio,y)),l&&(y=g);var _,T,k=function(t,e){if(!h())return[300,150];var n=e.parent||window;if(n===window||n===document||n===document.body)return[window.innerWidth,window.innerHeight];var r=n.getBoundingClientRect();return[r.width,r.height]}(0,e),E=k[0],S=k[1];if(p){var P=function(t,e,n){if(void 0===e&&(e="px"),void 0===n&&(n=72),"string"==typeof t){var r=t.toLowerCase();if(!(r in j))throw new Error('The dimension preset "'+t+'" is not supported or could not be found; try using a4, a3, postcard, letter, etc.');var i=j[r];return i.dimensions.map((function(t){return I(t,i.units,e,n)}))}return t}(u,v,w),F=Math.max(P[0],P[1]),R=Math.min(P[0],P[1]);if(e.orientation){var C="landscape"===e.orientation;n=C?F:R,r=C?R:F}else n=P[0],r=P[1];_=n,T=r,n+=2*b,r+=2*b}else _=n=E,T=r=S;var D=n,O=r;if(p&&v&&(D=I(n,v,"px",w),O=I(r,v,"px",w)),i=Math.round(D),o=Math.round(O),d&&!l&&p){var A=n/r,N=E/S,H=f(e.scaleToFitPadding,40),z=Math.round(E-2*H),L=Math.round(S-2*H);(i>z||o>L)&&(N>A?(o=L,i=Math.round(o*A)):(i=z,o=Math.round(i/A)))}return{bleed:b,pixelRatio:y,width:n,height:r,dimensions:[n,r],units:v||"px",scaleX:(s=m?Math.round(y*i):Math.round(y*D))/n,scaleY:(a=m?Math.round(y*o):Math.round(y*O))/r,pixelsPerInch:w,viewportWidth:m?Math.round(i):Math.round(D),viewportHeight:m?Math.round(o):Math.round(O),canvasWidth:s,canvasHeight:a,trimWidth:_,trimHeight:T,styleWidth:i,styleHeight:o}}H.units=O;var L=function(t,e){if("string"!=typeof t)throw new TypeError("must specify type string");if(e=e||{},"undefined"==typeof document&&!e.canvas)return null;var n=e.canvas||document.createElement("canvas");"number"==typeof e.width&&(n.width=e.width);"number"==typeof e.height&&(n.height=e.height);var r,i=e;try{var o=[t];0===t.indexOf("webgl")&&o.push("experimental-"+t);for(var s=0;s<o.length;s++)if(r=n.getContext(o[s],i))return r}catch(t){r=null}return r||null};function W(t){var e,n;void 0===t&&(t={});var r=!1;if(!1!==t.canvas){if(!(e=t.context)||"string"==typeof e){var o=t.canvas;o||(o=function(){if(!h())throw new Error("It appears you are runing from Node.js or a non-browser environment. Try passing in an existing { canvas } interface instead.");return document.createElement("canvas")}(),r=!0);var s=e||"2d";if("function"!=typeof o.getContext)throw new Error("The specified { canvas } element does not have a getContext() function, maybe it is not a <canvas> tag?");if(!(e=L(s,i({},t.attributes,{canvas:o}))))throw new Error("Failed at canvas.getContext('"+s+"') - the browser may not support this context, or a different context may already be in use with this canvas.")}if(n=e.canvas,t.canvas&&n!==t.canvas)throw new Error("The { canvas } and { context } settings must point to the same underlying canvas element");t.pixelated&&(e.imageSmoothingEnabled=!1,e.mozImageSmoothingEnabled=!1,e.oImageSmoothingEnabled=!1,e.webkitImageSmoothingEnabled=!1,e.msImageSmoothingEnabled=!1,n.style["image-rendering"]="pixelated")}return{canvas:n,context:e,ownsCanvas:r}}var U=function(){var t=this;this._settings={},this._props={},this._sketch=void 0,this._raf=null,this._recordTimeout=null,this._lastRedrawResult=void 0,this._isP5Resizing=!1,this._keyboardShortcuts=function(t){void 0===t&&(t={});var e=function(e){if(t.enabled()){var n=p();83!==e.keyCode||e.altKey||!e.metaKey&&!e.ctrlKey?32===e.keyCode?t.togglePlay(e):n&&!e.altKey&&75===e.keyCode&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),t.commit(e)):(e.preventDefault(),t.save(e))}};return{attach:function(){window.addEventListener("keydown",e)},detach:function(){window.removeEventListener("keydown",e)}}}({enabled:function(){return!1!==t.settings.hotkeys},save:function(e){e.shiftKey?t.props.recording?(t.endRecord(),t.run()):t.record():t.props.recording||t.exportFrame()},togglePlay:function(){t.props.playing?t.pause():t.play()},commit:function(e){t.exportFrame({commit:!0})}}),this._animateHandler=function(){return t.animate()},this._resizeHandler=function(){t.resize()&&t.render()}},q={sketch:{configurable:!0},settings:{configurable:!0},props:{configurable:!0}};q.sketch.get=function(){return this._sketch},q.settings.get=function(){return this._settings},q.props.get=function(){return this._props},U.prototype._computePlayhead=function(t,e){return"number"==typeof e&&isFinite(e)?t/e:0},U.prototype._computeFrame=function(t,e,n,r){return isFinite(n)&&n>1?Math.floor(t*(n-1)):Math.floor(r*e)},U.prototype._computeCurrentFrame=function(){return this._computeFrame(this.props.playhead,this.props.time,this.props.totalFrames,this.props.fps)},U.prototype._getSizeProps=function(){var t=this.props;return{width:t.width,height:t.height,pixelRatio:t.pixelRatio,canvasWidth:t.canvasWidth,canvasHeight:t.canvasHeight,viewportWidth:t.viewportWidth,viewportHeight:t.viewportHeight}},U.prototype.run=function(){if(!this.sketch)throw new Error("should wait until sketch is loaded before trying to play()");return!1!==this.settings.playing&&this.play(),"function"==typeof this.sketch.dispose&&console.warn("In [email protected] the dispose() event has been renamed to unload()"),this.props.started||(this._signalBegin(),this.props.started=!0),this.tick(),this.render(),this},U.prototype._cancelTimeouts=function(){null!=this._raf&&"undefined"!=typeof window&&"function"==typeof window.cancelAnimationFrame&&(window.cancelAnimationFrame(this._raf),this._raf=null),null!=this._recordTimeout&&(clearTimeout(this._recordTimeout),this._recordTimeout=null)},U.prototype.play=function(){var t=this.settings.animate;"animation"in this.settings&&(t=!0,console.warn("[canvas-sketch] { animation } has been renamed to { animate }")),t&&(h()?this.props.playing||(this.props.started||(this._signalBegin(),this.props.started=!0),this.props.playing=!0,this._cancelTimeouts(),this._lastTime=a(),this._raf=window.requestAnimationFrame(this._animateHandler)):console.error("[canvas-sketch] WARN: Using { animate } in Node.js is not yet supported"))},U.prototype.pause=function(){this.props.recording&&this.endRecord(),this.props.playing=!1,this._cancelTimeouts()},U.prototype.togglePlay=function(){this.props.playing?this.pause():this.play()},U.prototype.stop=function(){this.pause(),this.props.frame=0,this.props.playhead=0,this.props.time=0,this.props.deltaTime=0,this.props.started=!1,this.render()},U.prototype.record=function(){var t=this;if(!this.props.recording)if(h()){this.stop(),this.props.playing=!0,this.props.recording=!0;var e=this._createExportOptions({sequence:!0}),n=1/this.props.fps;this._cancelTimeouts();var r,i=function(){return t.props.recording?(t.props.deltaTime=n,t.tick(),t.exportFrame(e).then((function(){t.props.recording&&(t.props.deltaTime=0,t.props.frame++,t.props.frame<t.props.totalFrames?(t.props.time+=n,t.props.playhead=t._computePlayhead(t.props.time,t.props.duration),t._recordTimeout=setTimeout(i,0)):(console.log("Finished recording"),t._signalEnd(),t.endRecord(),t.stop(),t.run()))}))):Promise.resolve()};this.props.started||(this._signalBegin(),this.props.started=!0),this.sketch&&"function"==typeof this.sketch.beginRecord&&this._wrapContextScale((function(e){return t.sketch.beginRecord(e)})),(r=e,void 0===r&&(r={}),k(!0,r)).catch((function(t){console.error(t)})).then((function(e){t._raf=window.requestAnimationFrame(i)}))}else console.error("[canvas-sketch] WARN: Recording from Node.js is not yet supported")},U.prototype._signalBegin=function(){var t=this;this.sketch&&"function"==typeof this.sketch.begin&&this._wrapContextScale((function(e){return t.sketch.begin(e)}))},U.prototype._signalEnd=function(){var t=this;this.sketch&&"function"==typeof this.sketch.end&&this._wrapContextScale((function(e){return t.sketch.end(e)}))},U.prototype.endRecord=function(){var t,e=this,n=this.props.recording;return this._cancelTimeouts(),this.props.recording=!1,this.props.deltaTime=0,this.props.playing=!1,(void 0===t&&(t={}),k(!1,t)).catch((function(t){console.error(t)})).then((function(){n&&e.sketch&&"function"==typeof e.sketch.endRecord&&e._wrapContextScale((function(t){return e.sketch.endRecord(t)}))}))},U.prototype._createExportOptions=function(t){return void 0===t&&(t={}),{sequence:t.sequence,save:t.save,fps:this.props.fps,frame:t.sequence?this.props.frame:void 0,file:this.settings.file,name:this.settings.name,prefix:this.settings.prefix,suffix:this.settings.suffix,encoding:this.settings.encoding,encodingQuality:this.settings.encodingQuality,timeStamp:t.timeStamp||g(new Date,"yyyy.mm.dd-HH.MM.ss"),totalFrames:isFinite(this.props.totalFrames)?Math.max(0,this.props.totalFrames):1e3}},U.prototype.exportFrame=function(t){var e=this;if(void 0===t&&(t={}),!this.sketch)return Promise.all([]);"function"==typeof this.sketch.preExport&&this.sketch.preExport();var n=this._createExportOptions(t),r=p(),o=Promise.resolve();if(r&&t.commit&&"function"==typeof r.commit){var s=i({},n),a=r.commit(s);o=c(a)?a:Promise.resolve(a)}return o.then((function(t){return e._doExportFrame(i({},n,{hash:t||""}))})).then((function(t){return 1===t.length?t[0]:t}))},U.prototype._doExportFrame=function(t){var e=this;void 0===t&&(t={}),this._props.exporting=!0,this.resize();var n=this.render();return void 0===n&&(n=[this.props.canvas]),n=(n=[].concat(n).filter(Boolean)).map((function(e){var n,r="object"==typeof e&&e&&("data"in e||"dataURL"in e),o=r?e.data:e,s=r?i({},e,{data:o}):{data:o};if(u(n=o)&&/canvas/i.test(n.nodeName)&&"function"==typeof n.getContext){var a=function(t,e){void 0===e&&(e={});var n=e.encoding||"image/png";if(!T.includes(n))throw new Error("Invalid canvas encoding "+n);var r=(n.split("/")[1]||"").replace(/jpeg/i,"jpg");return r&&(r=("."+r).toLowerCase()),{extension:r,type:n,dataURL:t.toDataURL(n,e.encodingQuality)}}(o,{encoding:s.encoding||t.encoding,encodingQuality:f(s.encodingQuality,t.encodingQuality,.95)});return Object.assign(s,{dataURL:a.dataURL,extension:a.extension,type:a.type})}return s})),this._props.exporting=!1,this.resize(),this.render(),Promise.all(n.map((function(e,n,r){var o=i({extension:"",prefix:"",suffix:""},t,e,{layer:n,totalLayers:r.length}),s=!1!==t.save&&e.save;for(var a in o.save=!1!==s,o.filename=P(o),delete o.encoding,delete o.encodingQuality,o)void 0===o[a]&&delete o[a];var c=Promise.resolve({});if(o.save){var u=o.data;if(o.dataURL)c=E(o.dataURL,o);else c=function(t,e){void 0===e&&(e={});var n=Array.isArray(t)?t:[t];return S(new window.Blob(n,{type:e.type||""}),e)}(u,o)}return c.then((function(t){return Object.assign({},o,t)}))}))).then((function(n){var r=n.filter((function(t){return t.save}));if(r.length>0){var i,o=r.find((function(t){return t.outputName})),s=r.some((function(t){return t.client})),a=r.some((function(t){return t.stream}));i=r.length>1?r.length:o?o.outputName+"/"+r[0].filename:""+r[0].filename;var c="";if(t.sequence)c=isFinite(e.props.totalFrames)?" (frame "+(t.frame+1)+" / "+e.props.totalFrames+")":" (frame "+t.frame+")";else r.length>1&&(c=" files");console.log("%c["+(s?"canvas-sketch-cli":"canvas-sketch")+"]%c "+(a?"Streaming into":"Exported")+" %c"+i+"%c"+c,"color: #8e8e8e;","color: initial;","font-weight: bold;","font-weight: initial;")}return"function"==typeof e.sketch.postExport&&e.sketch.postExport(),n}))},U.prototype._wrapContextScale=function(t){this._preRender(),t(this.props),this._postRender()},U.prototype._preRender=function(){var t=this.props;this.props.gl||!t.context||t.p5?t.p5&&t.p5.scale(t.scaleX/t.pixelRatio,t.scaleY/t.pixelRatio):(t.context.save(),!1!==this.settings.scaleContext&&t.context.scale(t.scaleX,t.scaleY))},U.prototype._postRender=function(){var t=this.props;this.props.gl||!t.context||t.p5||t.context.restore(),t.gl&&!1!==this.settings.flush&&!t.p5&&t.gl.flush()},U.prototype.tick=function(){this.sketch&&"function"==typeof this.sketch.tick&&(this._preRender(),this.sketch.tick(this.props),this._postRender())},U.prototype.render=function(){return this.props.p5?(this._lastRedrawResult=void 0,this.props.p5.redraw(),this._lastRedrawResult):this.submitDrawCall()},U.prototype.submitDrawCall=function(){if(this.sketch){var t,e=this.props;return this._preRender(),"function"==typeof this.sketch?t=this.sketch(e):"function"==typeof this.sketch.render&&(t=this.sketch.render(e)),this._postRender(),t}},U.prototype.update=function(t){var e=this;void 0===t&&(t={});var n=["animate"];Object.keys(t).forEach((function(t){if(n.indexOf(t)>=0)throw new Error("Sorry, the { "+t+" } option is not yet supported with update().")}));var r=this._settings.canvas,i=this._settings.context;for(var o in t){var s=t[o];void 0!==s&&(e._settings[o]=s)}var a=Object.assign({},this._settings,t);if("time"in t&&"frame"in t)throw new Error("You should specify { time } or { frame } but not both");if("time"in t?delete a.frame:"frame"in t&&delete a.time,"duration"in t&&"totalFrames"in t)throw new Error("You should specify { duration } or { totalFrames } but not both");"duration"in t?delete a.totalFrames:"totalFrames"in t&&delete a.duration,"data"in t&&(this._props.data=t.data);var c=this.getTimeProps(a);if(Object.assign(this._props,c),r!==this._settings.canvas||i!==this._settings.context){var u=W(this._settings),p=u.context;this.props.canvas=u.canvas,this.props.context=p,this._setupGLKey(),this._appendCanvasIfNeeded()}return t.p5&&"function"!=typeof t.p5&&(this.props.p5=t.p5,this.props.p5.draw=function(){e._isP5Resizing||(e._lastRedrawResult=e.submitDrawCall())}),"playing"in t&&(t.playing?this.play():this.pause()),C(this._settings),this.resize(),this.render(),this.props},U.prototype.resize=function(){var t=this._getSizeProps(),e=this.settings,n=this.props,r=z(n,e);Object.assign(this._props,r);var i=this.props,o=i.pixelRatio,s=i.canvasWidth,a=i.canvasHeight,c=i.styleWidth,u=i.styleHeight,p=this.props.canvas;p&&!1!==e.resizeCanvas&&(n.p5?p.width===s&&p.height===a||(this._isP5Resizing=!0,n.p5.pixelDensity(o),n.p5.resizeCanvas(s/o,a/o,!1),this._isP5Resizing=!1):(p.width!==s&&(p.width=s),p.height!==a&&(p.height=a)),h()&&!1!==e.styleCanvas&&(p.style.width=c+"px",p.style.height=u+"px"));var f=this._getSizeProps(),l=!y(t,f);return l&&this._sizeChanged(),l},U.prototype._sizeChanged=function(){this.sketch&&"function"==typeof this.sketch.resize&&this.sketch.resize(this.props)},U.prototype.animate=function(){if(this.props.playing)if(h()){this._raf=window.requestAnimationFrame(this._animateHandler);var t=a(),e=1e3/this.props.fps,n=t-this._lastTime,r=this.props.duration,i="number"==typeof r&&isFinite(r),o=!0,s=this.settings.playbackRate;"fixed"===s?n=e:"throttle"===s?n>e?this._lastTime=t-=n%e:o=!1:this._lastTime=t;var c=n/1e3,u=this.props.time+c*this.props.timeScale;u<0&&i&&(u=r+u);var p=!1,f=!1;if(i&&u>=r&&(!1!==this.settings.loop?(o=!0,u%=r,f=!0):(o=!1,u=r,p=!0),this._signalEnd()),o){this.props.deltaTime=c,this.props.time=u,this.props.playhead=this._computePlayhead(u,r);var l=this.props.frame;this.props.frame=this._computeCurrentFrame(),f&&this._signalBegin(),l!==this.props.frame&&this.tick(),this.render(),this.props.deltaTime=0}p&&this.pause()}else console.error("[canvas-sketch] WARN: Animation in Node.js is not yet supported")},U.prototype.dispatch=function(t){if("function"!=typeof t)throw new Error("must pass function into dispatch()");t(this.props),this.render()},U.prototype.mount=function(){this._appendCanvasIfNeeded()},U.prototype.unmount=function(){h()&&(window.removeEventListener("resize",this._resizeHandler),this._keyboardShortcuts.detach()),this.props.canvas.parentElement&&this.props.canvas.parentElement.removeChild(this.props.canvas)},U.prototype._appendCanvasIfNeeded=function(){h()&&(!1!==this.settings.parent&&this.props.canvas&&!this.props.canvas.parentElement&&(this.settings.parent||document.body).appendChild(this.props.canvas))},U.prototype._setupGLKey=function(){var t;this.props.context&&("function"==typeof(t=this.props.context).clear&&"function"==typeof t.clearColor&&"function"==typeof t.bufferData?this._props.gl=this.props.context:delete this._props.gl)},U.prototype.getTimeProps=function(t){void 0===t&&(t={});var e=t.duration,n=t.totalFrames,r=f(t.timeScale,1),i=f(t.fps,24),o="number"==typeof e&&isFinite(e),s="number"==typeof n&&isFinite(n),a=o?Math.floor(i*e):void 0,c=s?n/i:void 0;if(o&&s&&a!==n)throw new Error("You should specify either duration or totalFrames, but not both. Or, they must match exactly.");void 0===t.dimensions&&void 0!==t.units&&console.warn("You've specified a { units } setting but no { dimension }, so the units will be ignored."),n=f(n,a,Infinity),e=f(e,c,Infinity);var u=t.time,p=t.frame,h="number"==typeof u&&isFinite(u),l="number"==typeof p&&isFinite(p),d=0,m=0,y=0;if(h&&l)throw new Error("You should specify either start frame or time, but not both.");return h?(y=this._computePlayhead(d=u,e),m=this._computeFrame(y,d,n,i)):l&&(y=this._computePlayhead(d=(m=p)/i,e)),{playhead:y,time:d,frame:m,duration:e,totalFrames:n,fps:i,timeScale:r}},U.prototype.setup=function(t){var e=this;if(void 0===t&&(t={}),this.sketch)throw new Error("Multiple setup() calls not yet supported.");this._settings=Object.assign({},t,this._settings),C(this._settings);var n=W(this._settings),r=n.context,i=n.canvas,o=this.getTimeProps(this._settings);this._props=Object.assign({},o,{canvas:i,context:r,deltaTime:0,started:!1,exporting:!1,playing:!1,recording:!1,settings:this.settings,data:this.settings.data,render:function(){return e.render()},togglePlay:function(){return e.togglePlay()},dispatch:function(t){return e.dispatch(t)},tick:function(){return e.tick()},resize:function(){return e.resize()},update:function(t){return e.update(t)},exportFrame:function(t){return e.exportFrame(t)},record:function(){return e.record()},play:function(){return e.play()},pause:function(){return e.pause()},stop:function(){return e.stop()}}),this._setupGLKey(),this.resize()},U.prototype.loadAndRun=function(t,e){var n=this;return this.load(t,e).then((function(){return n.run(),n}))},U.prototype.unload=function(){var t=this;this.pause(),this.sketch&&("function"==typeof this.sketch.unload&&this._wrapContextScale((function(e){return t.sketch.unload(e)})),this._sketch=null)},U.prototype.destroy=function(){this.unload(),this.unmount()},U.prototype.load=function(t,e){var n=this;if("function"!=typeof t)throw new Error("The function must take in a function as the first parameter. Example:\n canvasSketcher(() => { ... }, settings)");this.sketch&&this.unload(),void 0!==e&&this.update(e),this._preRender();var r=Promise.resolve();if(this.settings.p5){if(!h())throw new Error("[canvas-sketch] ERROR: Using p5.js in Node.js is not supported");r=new Promise((function(t){var e,r=n.settings.p5;r.p5&&(e=r.preload,r=r.p5);var i=function(r){e&&(r.preload=function(){return e(r)}),r.setup=function(){var e=n.props,i="webgl"===n.settings.context,o=i?r.WEBGL:r.P2D;r.noLoop(),r.pixelDensity(e.pixelRatio),r.createCanvas(e.viewportWidth,e.viewportHeight,o),i&&n.settings.attributes&&r.setAttributes(n.settings.attributes),n.update({p5:r,canvas:r.canvas,context:r._renderer.drawingContext}),t()}};if("function"==typeof r)new r(i);else{if("function"!=typeof window.createCanvas)throw new Error("{ p5 } setting is passed but can't find p5.js in global (window) scope. Maybe you did not create it globally?\nnew p5(); // <-- attaches to global scope");i(window)}}))}return r.then((function(){var e=t(n.props);return c(e)||(e=Promise.resolve(e)),e})).then((function(t){return t||(t={}),n._sketch=t,h()&&(n._keyboardShortcuts.attach(),window.addEventListener("resize",n._resizeHandler)),n._postRender(),n._sizeChanged(),n})).catch((function(t){throw console.warn("Could not start sketch, the async loading function rejected with an error:\n Error: "+t.message),t}))},Object.defineProperties(U.prototype,q);var B="hot-id-cache",Y=[];function K(t,e){if(void 0===e&&(e={}),e.p5){if(e.canvas||e.context&&"string"!=typeof e.context)throw new Error('In { p5 } mode, you can\'t pass your own canvas or context, unless the context is a "webgl" or "2d" string');e=Object.assign({},e,{canvas:!1,context:"string"==typeof e.context&&e.context})}var n,r,i=(n=p())&&n.hot;i&&(r=f(e.id,"$__DEFAULT_CANVAS_SKETCH_ID__$"));var o=i&&"string"==typeof r;o&&Y.includes(r)&&(console.warn("Warning: You have multiple calls to canvasSketch() in --hot mode. You must pass unique { id } strings in settings to enable hot reload across multiple sketches. ",r),o=!1);var s=Promise.resolve();if(o){Y.push(r);var a=function(t){var e=p();if(e)return e[B]=e[B]||{},e[B][t]}(r);if(a){var c=function(){var t,n=(t=a.manager,e.animate?{time:t.props.time}:void 0);return a.manager.destroy(),n};s=a.load.then(c).catch(c)}}return s.then((function(n){var i,s=new U;return t?(e=Object.assign({},e,n),s.setup(e),s.mount(),i=s.loadAndRun(t)):i=Promise.resolve(s),o&&function(t,e){var n=p();n&&(n[B]=n[B]||{},n[B][t]=e)}(r,{load:i,manager:s}),i}))}return K.canvasSketch=K,K.PaperSizes=j,K}))}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(t,e,n){"use strict";e.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},{}],6:[function(t,e,n){(function(t){(function(){"use strict";var n=256,r=[],i=void 0===t?window:t,o=Math.pow(n,6),s=Math.pow(2,52),a=2*s,c=n-1,u=Math.random;function p(t){var e,r=t.length,i=this,o=0,s=i.i=i.j=0,a=i.S=[];for(r||(t=[r++]);o<n;)a[o]=o++;for(o=0;o<n;o++)a[o]=a[s=c&s+t[o%r]+(e=a[o])],a[s]=e;(i.g=function(t){for(var e,r=0,o=i.i,s=i.j,a=i.S;t--;)e=a[o=c&o+1],r=r*n+a[c&(a[o]=a[s=c&s+e])+(a[s]=e)];return i.i=o,i.j=s,r})(n)}function f(t,e){var n,r=[],i=(typeof t)[0];if(e&&"o"==i)for(n in t)try{r.push(f(t[n],e-1))}catch(t){}return r.length?r:"s"==i?t:t+"\0"}function h(t,e){for(var n,r=t+"",i=0;i<r.length;)e[c&i]=c&(n^=19*e[c&i])+r.charCodeAt(i++);return l(e)}function l(t){return String.fromCharCode.apply(0,t)}e.exports=function(t,c){if(c&&!0===c.global)return c.global=!1,Math.random=e.exports(t,c),c.global=!0,Math.random;var u=[],d=(h(f(c&&c.entropy||!1?[t,l(r)]:0 in arguments?t:function(t){try{return i.crypto.getRandomValues(t=new Uint8Array(n)),l(t)}catch(t){return[+new Date,i,i.navigator&&i.navigator.plugins,i.screen,l(r)]}}(),3),u),new p(u));return h(l(d.S),r),function(){for(var t=d.g(6),e=o,r=0;t<s;)t=(t+r)*n,e*=n,r=d.g(1);for(;t>=a;)t/=2,e/=2,r>>>=1;return(t+r)/e}},e.exports.resetGlobal=function(){Math.random=u},h(Math.random(),r)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(t,e,n){!function(){"use strict";var t=.5*(Math.sqrt(3)-1),r=(3-Math.sqrt(3))/6,i=1/6,o=(Math.sqrt(5)-1)/4,s=(5-Math.sqrt(5))/20;function a(t){var e;e="function"==typeof t?t:t?function(){var t=0,e=0,n=0,r=1,i=(o=4022871197,function(t){t=t.toString();for(var e=0;e<t.length;e++){var n=.02519603282416938*(o+=t.charCodeAt(e));n-=o=n>>>0,o=(n*=o)>>>0,o+=4294967296*(n-=o)}return 2.3283064365386963e-10*(o>>>0)});var o;t=i(" "),e=i(" "),n=i(" ");for(var s=0;s<arguments.length;s++)(t-=i(arguments[s]))<0&&(t+=1),(e-=i(arguments[s]))<0&&(e+=1),(n-=i(arguments[s]))<0&&(n+=1);return i=null,function(){var i=2091639*t+2.3283064365386963e-10*r;return t=e,e=n,n=i-(r=0|i)}}(t):Math.random,this.p=c(e),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(var n=0;n<512;n++)this.perm[n]=this.p[255&n],this.permMod12[n]=this.perm[n]%12}function c(t){var e,n=new Uint8Array(256);for(e=0;e<256;e++)n[e]=e;for(e=0;e<255;e++){var r=e+~~(t()*(256-e)),i=n[e];n[e]=n[r],n[r]=i}return n}a.prototype={grad3:new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]),grad4:new Float32Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]),noise2D:function(e,n){var i,o,s=this.permMod12,a=this.perm,c=this.grad3,u=0,p=0,f=0,h=(e+n)*t,l=Math.floor(e+h),d=Math.floor(n+h),m=(l+d)*r,y=e-(l-m),g=n-(d-m);y>g?(i=1,o=0):(i=0,o=1);var v=y-i+r,w=g-o+r,b=y-1+2*r,x=g-1+2*r,M=255&l,_=255&d,T=.5-y*y-g*g;if(T>=0){var k=3*s[M+a[_]];u=(T*=T)*T*(c[k]*y+c[k+1]*g)}var E=.5-v*v-w*w;if(E>=0){var S=3*s[M+i+a[_+o]];p=(E*=E)*E*(c[S]*v+c[S+1]*w)}var P=.5-b*b-x*x;if(P>=0){var F=3*s[M+1+a[_+1]];f=(P*=P)*P*(c[F]*b+c[F+1]*x)}return 70*(u+p+f)},noise3D:function(t,e,n){var r,o,s,a,c,u,p,f,h,l,d=this.permMod12,m=this.perm,y=this.grad3,g=.3333333333333333*(t+e+n),v=Math.floor(t+g),w=Math.floor(e+g),b=Math.floor(n+g),x=(v+w+b)*i,M=t-(v-x),_=e-(w-x),T=n-(b-x);M>=_?_>=T?(c=1,u=0,p=0,f=1,h=1,l=0):M>=T?(c=1,u=0,p=0,f=1,h=0,l=1):(c=0,u=0,p=1,f=1,h=0,l=1):_<T?(c=0,u=0,p=1,f=0,h=1,l=1):M<T?(c=0,u=1,p=0,f=0,h=1,l=1):(c=0,u=1,p=0,f=1,h=1,l=0);var k=M-c+i,E=_-u+i,S=T-p+i,P=M-f+2*i,F=_-h+2*i,R=T-l+2*i,C=M-1+.5,j=_-1+.5,D=T-1+.5,O=255&v,A=255&w,N=255&b,H=.6-M*M-_*_-T*T;if(H<0)r=0;else{var I=3*d[O+m[A+m[N]]];r=(H*=H)*H*(y[I]*M+y[I+1]*_+y[I+2]*T)}var z=.6-k*k-E*E-S*S;if(z<0)o=0;else{var L=3*d[O+c+m[A+u+m[N+p]]];o=(z*=z)*z*(y[L]*k+y[L+1]*E+y[L+2]*S)}var W=.6-P*P-F*F-R*R;if(W<0)s=0;else{var U=3*d[O+f+m[A+h+m[N+l]]];s=(W*=W)*W*(y[U]*P+y[U+1]*F+y[U+2]*R)}var q=.6-C*C-j*j-D*D;if(q<0)a=0;else{var B=3*d[O+1+m[A+1+m[N+1]]];a=(q*=q)*q*(y[B]*C+y[B+1]*j+y[B+2]*D)}return 32*(r+o+s+a)},noise4D:function(t,e,n,r){var i,a,c,u,p,f,h,l,d,m,y,g,v,w,b,x,M,_=this.perm,T=this.grad4,k=(t+e+n+r)*o,E=Math.floor(t+k),S=Math.floor(e+k),P=Math.floor(n+k),F=Math.floor(r+k),R=(E+S+P+F)*s,C=t-(E-R),j=e-(S-R),D=n-(P-R),O=r-(F-R),A=0,N=0,H=0,I=0;C>j?A++:N++,C>D?A++:H++,C>O?A++:I++,j>D?N++:H++,j>O?N++:I++,D>O?H++:I++;var z=C-(f=A>=3?1:0)+s,L=j-(h=N>=3?1:0)+s,W=D-(l=H>=3?1:0)+s,U=O-(d=I>=3?1:0)+s,q=C-(m=A>=2?1:0)+2*s,B=j-(y=N>=2?1:0)+2*s,Y=D-(g=H>=2?1:0)+2*s,K=O-(v=I>=2?1:0)+2*s,G=C-(w=A>=1?1:0)+3*s,Q=j-(b=N>=1?1:0)+3*s,Z=D-(x=H>=1?1:0)+3*s,J=O-(M=I>=1?1:0)+3*s,V=C-1+4*s,X=j-1+4*s,$=D-1+4*s,tt=O-1+4*s,et=255&E,nt=255&S,rt=255&P,it=255&F,ot=.6-C*C-j*j-D*D-O*O;if(ot<0)i=0;else{var st=_[et+_[nt+_[rt+_[it]]]]%32*4;i=(ot*=ot)*ot*(T[st]*C+T[st+1]*j+T[st+2]*D+T[st+3]*O)}var at=.6-z*z-L*L-W*W-U*U;if(at<0)a=0;else{var ct=_[et+f+_[nt+h+_[rt+l+_[it+d]]]]%32*4;a=(at*=at)*at*(T[ct]*z+T[ct+1]*L+T[ct+2]*W+T[ct+3]*U)}var ut=.6-q*q-B*B-Y*Y-K*K;if(ut<0)c=0;else{var pt=_[et+m+_[nt+y+_[rt+g+_[it+v]]]]%32*4;c=(ut*=ut)*ut*(T[pt]*q+T[pt+1]*B+T[pt+2]*Y+T[pt+3]*K)}var ft=.6-G*G-Q*Q-Z*Z-J*J;if(ft<0)u=0;else{var ht=_[et+w+_[nt+b+_[rt+x+_[it+M]]]]%32*4;u=(ft*=ft)*ft*(T[ht]*G+T[ht+1]*Q+T[ht+2]*Z+T[ht+3]*J)}var lt=.6-V*V-X*X-$*$-tt*tt;if(lt<0)p=0;else{var dt=_[et+1+_[nt+1+_[rt+1+_[it+1]]]]%32*4;p=(lt*=lt)*lt*(T[dt]*V+T[dt+1]*X+T[dt+2]*$+T[dt+3]*tt)}return 27*(i+a+c+u+p)}},a._buildPermutationTable=c,"undefined"!=typeof define&&define.amd&&define((function(){return a})),void 0!==n?n.SimplexNoise=a:"undefined"!=typeof window&&(window.SimplexNoise=a),void 0!==e&&(e.exports=a)}()},{}],8:[function(t,e,n){const r=t("canvas-sketch"),i=t("canvas-sketch-util/random"),o=t("canvas-sketch-util/math"),s={dimensions:[window.innerWidth,window.innerHeight],animate:!0,scaleToFit:!1};document.body.style.background="black",document.title="NIGHT SKY";let a=0,c=0;r((({width:t,height:e})=>{const n=[];for(let r=0;r<100;r++){const r=i.range(0,t),o=i.range(0,e);n.push(new p(r,o,!0))}return({context:t,width:e,height:r})=>{t.fillStyle="black",t.fillRect(0,0,e,r);var i=t.createLinearGradient(0,r,0,0);i.addColorStop(0,"#430175"),i.addColorStop(1,"#000230"),t.fillStyle=i,t.fillRect(0,0,e,r);for(let e=0;e<n.length;e++){const r=n[e];for(let i=e+1;i<n.length;i++){const e=n[i],s=r.pos.getDistance(e.pos),a=(window.innerWidth+window.innerHeight)/2*.08;s>a||(t.strokeStyle="#5bd1f5",t.lineWidth=o.mapRange(s,0,a,8,0),t.beginPath(),t.moveTo(r.pos.x,r.pos.y),t.lineTo(e.pos.x,e.pos.y),t.stroke())}}if(onmousemove=function(t){a=t.clientX,c=t.clientY},c>20&&a>20&&a<window.innerWidth-20&&c<window.innerHeight-20){const e=new p(a,c);for(let r=0;r<n.length;r++){const i=n[r],s=e.pos.getDistance(i.pos),a=(window.innerWidth+window.innerHeight)/2*.08;s>a||(t.strokeStyle="#5bd1f5",t.lineWidth=o.mapRange(s,0,a,8,0),t.beginPath(),t.moveTo(e.pos.x,e.pos.y),t.lineTo(i.pos.x,i.pos.y),t.stroke())}t.fillStyle="white",t.lineWidth=4,t.save(),t.translate(a,c),t.beginPath(),t.arc(0,0,8,0,2*Math.PI),t.lineWidth=1,t.shadowColor="#eff5c1",t.shadowBlur=30,t.shadowOffsetX=0,t.shadowOffsetY=0,t.stroke(),t.fill(),t.fill(),t.stroke(),t.restore()}n.forEach((n=>{n.update(),n.draw(t),n.bounce(e,r)})),onclick=function(){console.log("mousedown"),n.push(new p(a,c,!1))}}}),s);class u{constructor(t,e){this.x=t,this.y=e}getDistance(t){const e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)}}class p{constructor(t,e,n){this.pos=new u(t,e),this.vel=n?new u(i.range(0,.5),i.range(0,-.5)):new u(0,0),this.radius=i.range(2,6)}bounce(t,e){this.pos.x<=-20&&(this.pos.x=t),this.pos.x>=t+20&&(this.pos.x=0),this.pos.y>=e+20&&(this.pos.y=0),this.pos.y<=-20&&(this.pos.y=e)}draw(t){t.fillStyle="white",t.lineWidth=4,t.save(),t.translate(this.pos.x,this.pos.y),t.beginPath(),t.arc(0,0,this.radius,0,2*Math.PI),t.lineWidth=1,t.shadowColor="#eff5c1",t.shadowBlur=30,t.shadowOffsetX=0,t.shadowOffsetY=0,t.stroke(),t.fill(),t.fill(),t.stroke(),t.restore()}pull(t,e){this.vel.x=this.pos.x-t}update(){this.pos.x+=this.vel.x,this.pos.y+=this.vel.y}}},{"canvas-sketch":4,"canvas-sketch-util/math":2,"canvas-sketch-util/random":3}],9:[function(t,e,n){(function(t){(function(){t.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[8,9]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyIiwiZSIsIm4iLCJ0IiwibyIsImkiLCJmIiwiYyIsInJlcXVpcmUiLCJ1IiwiYSIsIkVycm9yIiwiY29kZSIsInAiLCJleHBvcnRzIiwiY2FsbCIsImxlbmd0aCIsIm1vZHVsZSIsInZhbHVlIiwiZnJvbSIsInRvIiwiVHlwZUVycm9yIiwiY3ljbGUiLCJNYXRoIiwiZmxvb3IiLCJkZWZpbmVkIiwid3JhcCIsIkVQU0lMT04iLCJOdW1iZXIiLCJjbGFtcCIsIm1pbiIsIm1heCIsImxlcnAiLCJpbnZlcnNlTGVycCIsImFicyIsInRvRmluaXRlIiwiZGVmYXVsdFZhbHVlIiwiaXNGaW5pdGUiLCJleHBhbmRWZWN0b3IiLCJkaW1zIiwic2NhbGFyIiwib3V0IiwibGVycEFycmF5IiwibmV3QXJyYXkiLCJpbml0aWFsVmFsdWUiLCJwdXNoIiwibW9kIiwiYiIsImRhbXAiLCJsYW1iZGEiLCJkdCIsImV4cCIsImZyYWN0Iiwic2lnbiIsImRlZ1RvUmFkIiwiUEkiLCJyYWRUb0RlZyIsInBpbmdQb25nIiwibGluc3BhY2UiLCJvcHRzIiwiZW5kcG9pbnQiLCJvZmZzZXQiLCJtYXAiLCJfIiwibGVycEZyYW1lcyIsInZhbHVlcyIsImxlbiIsIndob2xlIiwiZnJhbWUiLCJuZXh0RnJhbWUiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFtcDAxIiwidiIsInNtb290aHN0ZXAiLCJ4IiwiZGFtcEFycmF5IiwibWFwUmFuZ2UiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwic2VlZFJhbmRvbSIsIlNpbXBsZXhOb2lzZSIsImNyZWF0ZVJhbmRvbSIsImRlZmF1bHRTZWVkIiwiY3VycmVudFNlZWQiLCJjdXJyZW50UmFuZG9tIiwibm9pc2VHZW5lcmF0b3IiLCJkZWZhdWx0UmFuZG9tIiwicmFuZG9tIiwiX25leHRHYXVzc2lhbiIsIl9oYXNOZXh0R2F1c3NpYW4iLCJzZXRTZWVkIiwiZ2V0U2VlZCIsImdldFJhbmRvbVNlZWQiLCJTdHJpbmciLCJ2YWx1ZU5vblplcm8iLCJwZXJtdXRlTm9pc2UiLCJjcmVhdGVOb2lzZSIsIm5vaXNlMUQiLCJmcmVxdWVuY3kiLCJhbXBsaXR1ZGUiLCJub2lzZTJEIiwieSIsIm5vaXNlM0QiLCJ6Iiwibm9pc2U0RCIsInciLCJib29sZWFuIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsImFycmF5Iiwic2h1ZmZsZSIsImFyciIsInJhbmQiLCJ0bXAiLCJyZXQiLCJzbGljZSIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwicmFkaXVzIiwic3FydCIsIm9uU3BoZXJlIiwicGhpIiwidGhldGEiLCJhY29zIiwic2luIiwiY29zIiwiaW5zaWRlU3BoZXJlIiwiayIsImNicnQiLCJxdWF0ZXJuaW9uIiwidTEiLCJ1MiIsInUzIiwic3ExIiwic3EyIiwidGhldGExIiwidGhldGEyIiwid2VpZ2h0ZWQiLCJ3ZWlnaHRlZFNldCIsInNldCIsIndlaWdodGVkU2V0SW5kZXgiLCJnYXVzc2lhbiIsIm1lYW4iLCJzdGFuZGFyZERlcml2YXRpb24iLCJyZXN1bHQiLCJ2MSIsInYyIiwicyIsIm11bHRpcGxpZXIiLCJsb2ciLCJzZWVkIiwib3B0IiwidW5kZWZpbmVkIiwid2VpZ2h0Iiwid2VpZ2h0cyIsInRvdGFsV2VpZ2h0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvYmplY3RBc3NpZ24iLCJhc3NpZ24iLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJ0ZXN0MyIsInNwbGl0IiwiZm9yRWFjaCIsImxldHRlciIsImtleXMiLCJlcnIiLCJzaG91bGRVc2VOYXRpdmUiLCJ0YXJnZXQiLCJzb3VyY2UiLCJzeW1ib2xzIiwidmFsIiwidG9PYmplY3QiLCJhcmd1bWVudHMiLCJrZXkiLCJicm93c2VyIiwiY29tbW9uanNHbG9iYWwiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIkRhdGUiLCJpc1Byb21pc2VfMSIsIm9iaiIsInRoZW4iLCJpc0RvbSIsIndpbmRvdyIsIk5vZGUiLCJub2RlVHlwZSIsIm5vZGVOYW1lIiwiZ2V0Q2xpZW50QVBJIiwiYXJndW1lbnRzJDEiLCJpc0Jyb3dzZXIiLCJkb2N1bWVudCIsImNhY2hlIiwic2hpbSIsInN1cHBvcnRzQXJndW1lbnRzQ2xhc3MiLCJ0b1N0cmluZyIsInN1cHBvcnRlZCIsIm9iamVjdCIsInVuc3VwcG9ydGVkIiwicFNsaWNlIiwiZGVlcEVxdWFsIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJnZXRUaW1lIiwic3RyaWN0IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc19hcmd1bWVudHMiLCJpc0J1ZmZlciIsImthIiwia2IiLCJzb3J0Iiwib2JqRXF1aXYiLCJjb3B5IiwiZ2xvYmFsIiwidG9rZW4iLCJ0aW1lem9uZSIsInRpbWV6b25lQ2xpcCIsImRhdGVGb3JtYXQiLCJkYXRlIiwibWFzayIsInV0YyIsImdtdCIsInRvTG93ZXJDYXNlIiwidGVzdCIsImlzTmFOIiwibWFza1NsaWNlIiwibWFza3MiLCJkIiwiRCIsIm0iLCJIIiwiTSIsIkwiLCJnZXRUaW1lem9uZU9mZnNldCIsIlciLCJ0YXJnZXRUaHVyc2RheSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwic2V0RGF0ZSIsImdldERheSIsImZpcnN0VGh1cnNkYXkiLCJkcyIsInNldEhvdXJzIiwiZ2V0SG91cnMiLCJnZXRXZWVrIiwiTiIsImRvdyIsImdldERheU9mV2VlayIsImZsYWdzIiwiZGQiLCJwYWQiLCJkZGQiLCJpMThuIiwiZGF5TmFtZXMiLCJkZGRkIiwibW0iLCJtbW0iLCJtb250aE5hbWVzIiwibW1tbSIsInl5IiwieXl5eSIsImgiLCJoaCIsIkhIIiwiTU0iLCJzcyIsImwiLCJyb3VuZCIsInRpbWVOYW1lcyIsInR0IiwiVCIsIlRUIiwiWiIsIm1hdGNoIiwicG9wIiwicmVwbGFjZSIsIlMiLCJkZWZhdWx0Iiwic2hvcnREYXRlIiwibWVkaXVtRGF0ZSIsImxvbmdEYXRlIiwiZnVsbERhdGUiLCJzaG9ydFRpbWUiLCJtZWRpdW1UaW1lIiwibG9uZ1RpbWUiLCJpc29EYXRlIiwiaXNvVGltZSIsImlzb0RhdGVUaW1lIiwiaXNvVXRjRGF0ZVRpbWUiLCJleHBpcmVzSGVhZGVyRm9ybWF0IiwicmVzIiwicmVwZWF0U3RyaW5nIiwic3RyIiwibnVtIiwic3Vic3RyIiwibGluayIsInBhZExlZnQiLCJjaCIsIm5vb3AiLCJkZWZhdWx0RXh0cyIsImV4dGVuc2lvbiIsInByZWZpeCIsInN1ZmZpeCIsInN1cHBvcnRlZEVuY29kaW5ncyIsInN0cmVhbSIsImlzU3RhcnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbGVuYW1lIiwicmVzb2x2ZUZpbGVuYW1lIiwiZnVuYyIsImNsaWVudCIsIm91dHB1dCIsImV2Iiwic2F2ZURhdGFVUkwiLCJkYXRhVVJMIiwic3BsaXRJbmRleCIsImluZGV4T2YiLCJiYXNlNjQiLCJieXRlU3RyaW5nIiwiYXRvYiIsInR5cGUiLCJtaW1lTWF0Y2giLCJleGVjIiwibWltZSIsImFiIiwiQXJyYXlCdWZmZXIiLCJpYSIsIlVpbnQ4QXJyYXkiLCJjaGFyQ29kZUF0IiwiQmxvYiIsImNyZWF0ZUJsb2JGcm9tRGF0YVVSTCIsImJsb2IiLCJzYXZlQmxvYiIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkb3dubG9hZCIsImhyZWYiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJvbmNsaWNrIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsInBhcmVudEVsZW1lbnQiLCJyZW1vdmVDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsImNsaWNrIiwiZmlsZSIsInRvdGFsRnJhbWVzIiwibGF5ZXJTdHIiLCJ0b3RhbExheWVycyIsImxheWVyIiwiZmlsdGVyIiwiQm9vbGVhbiIsIm5hbWUiLCJ0aW1lU3RhbXAiLCJoYXNoIiwiY29tbW9uVHlwb3MiLCJkaW1lbnNpb24iLCJhbmltYXRlZCIsImFuaW1hdGluZyIsInVuaXQiLCJQNSIsInBpeGVsbGF0ZWQiLCJsb29waW5nIiwicGl4ZWxQZXJJbmNoIiwiYWxsS2V5cyIsImNoZWNrU2V0dGluZ3MiLCJzZXR0aW5ncyIsImNvbnNvbGUiLCJ3YXJuIiwiaW5jbHVkZXMiLCJwYXBlclNpemVzIiwicmVkdWNlIiwiZGljdCIsInByZXNldCIsIml0ZW0iLCJ1bml0cyIsImRpbWVuc2lvbnMiLCJkZWZpbmVkJDEiLCJjb252ZXJzaW9ucyIsInN5c3RlbSIsImZhY3RvciIsImNtIiwicHQiLCJwYyIsImluIiwiZnQiLCJhbmNob3JzIiwibWV0cmljIiwicmF0aW8iLCJpbXBlcmlhbCIsImNvbnZlcnRMZW5ndGgiLCJmcm9tVW5pdCIsInRvVW5pdCIsInBpeGVsc1BlckluY2giLCJwcmVjaXNpb24iLCJyb3VuZFBpeGVsIiwidG9GYWN0b3IiLCJmcm9tRmFjdG9yIiwiaXNUb1BpeGVsIiwiZnJvbVVuaXREYXRhIiwidG9Vbml0RGF0YSIsImFuY2hvciIsImRlY2ltYWxzIiwiY29udmVydERpc3RhbmNlJDEiLCJ1bml0c0Zyb20iLCJ1bml0c1RvIiwicmVzaXplQ2FudmFzIiwicHJvcHMiLCJ3aWR0aCIsImhlaWdodCIsInN0eWxlV2lkdGgiLCJzdHlsZUhlaWdodCIsImNhbnZhc1dpZHRoIiwiY2FudmFzSGVpZ2h0IiwiaGFzRGltZW5zaW9ucyIsImNoZWNrSWZIYXNEaW1lbnNpb25zIiwiZXhwb3J0aW5nIiwic2NhbGVUb0ZpdCIsInNjYWxlVG9WaWV3IiwicGl4ZWxSYXRpbyIsImV4cG9ydFBpeGVsUmF0aW8iLCJibGVlZCIsImRldmljZVBpeGVsUmF0aW8iLCJiYXNlUGl4ZWxSYXRpbyIsIm1heFBpeGVsUmF0aW8iLCJ0cmltV2lkdGgiLCJ0cmltSGVpZ2h0IiwicmVmIiwiZWxlbWVudCIsInBhcmVudCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImdldFBhcmVudFNpemUiLCJwYXJlbnRXaWR0aCIsInBhcmVudEhlaWdodCIsImdldERpbWVuc2lvbnNGcm9tUHJlc2V0IiwiaGlnaGVzdCIsImxvd2VzdCIsIm9yaWVudGF0aW9uIiwibGFuZHNjYXBlIiwicmVhbFdpZHRoIiwicmVhbEhlaWdodCIsImFzcGVjdCIsIndpbmRvd0FzcGVjdCIsInNjYWxlVG9GaXRQYWRkaW5nIiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJnZXRDYW52YXNDb250ZXh0XzEiLCJjYW52YXMiLCJnbCIsImF0dHJpYnMiLCJuYW1lcyIsImdldENvbnRleHQiLCJjcmVhdGVDYW52YXMiLCJjb250ZXh0Iiwib3duc0NhbnZhcyIsIm5ld0NhbnZhcyIsImNyZWF0ZUNhbnZhc0VsZW1lbnQiLCJhdHRyaWJ1dGVzIiwicGl4ZWxhdGVkIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwib0ltYWdlU21vb3RoaW5nRW5hYmxlZCIsIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwiU2tldGNoTWFuYWdlciIsIl9zZXR0aW5ncyIsIl9wcm9wcyIsIl9za2V0Y2giLCJfcmFmIiwiX3JlY29yZFRpbWVvdXQiLCJfbGFzdFJlZHJhd1Jlc3VsdCIsIl9pc1A1UmVzaXppbmciLCJfa2V5Ym9hcmRTaG9ydGN1dHMiLCJoYW5kbGVyIiwiZW5hYmxlZCIsImtleUNvZGUiLCJhbHRLZXkiLCJtZXRhS2V5IiwiY3RybEtleSIsInRvZ2dsZVBsYXkiLCJwcmV2ZW50RGVmYXVsdCIsImNvbW1pdCIsInNhdmUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleWJvYXJkU2hvcnRjdXRzIiwidGhpcyQxIiwiaG90a2V5cyIsInNoaWZ0S2V5IiwicmVjb3JkaW5nIiwiZW5kUmVjb3JkIiwicnVuIiwicmVjb3JkIiwiZXhwb3J0RnJhbWUiLCJwbGF5aW5nIiwicGF1c2UiLCJwbGF5IiwiX2FuaW1hdGVIYW5kbGVyIiwiYW5pbWF0ZSIsIl9yZXNpemVIYW5kbGVyIiwicmVzaXplIiwicmVuZGVyIiwic2tldGNoIiwiZ2V0IiwidGhpcyIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsImRpc3Bvc2UiLCJzdGFydGVkIiwiX3NpZ25hbEJlZ2luIiwidGljayIsIl9jYW5jZWxUaW1lb3V0cyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2xhc3RUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXJyb3IiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsImJlZ2luIiwiZW5kIiwid2FzUmVjb3JkaW5nIiwic2VxdWVuY2UiLCJlbmNvZGluZyIsImVuY29kaW5nUXVhbGl0eSIsImRhdGVmb3JtYXQiLCJhbGwiLCJwcmVFeHBvcnQiLCJjb21taXRPcHRzIiwiX2RvRXhwb3J0RnJhbWUiLCJkcmF3UmVzdWx0IiwiY29uY2F0IiwiaGFzRGF0YU9iamVjdCIsImRhdGEiLCJ0b0RhdGFVUkwiLCJleHBvcnRDYW52YXMiLCJsYXllckxpc3QiLCJjdXJPcHQiLCJzYXZlUGFyYW0iLCJzYXZlUHJvbWlzZSIsInBhcnRzIiwic2F2ZUZpbGUiLCJzYXZlUmVzdWx0Iiwic2F2ZWRFdmVudHMiLCJldmVudFdpdGhPdXRwdXQiLCJmaW5kIiwib3V0cHV0TmFtZSIsImlzQ2xpZW50Iiwic29tZSIsImlzU3RyZWFtaW5nIiwib2ZTZXEiLCJwb3N0RXhwb3J0IiwiY2IiLCJfcHJlUmVuZGVyIiwiX3Bvc3RSZW5kZXIiLCJwNSIsInNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwicmVzdG9yZSIsImZsdXNoIiwicmVkcmF3Iiwic3VibWl0RHJhd0NhbGwiLCJ1cGRhdGUiLCJub3RZZXRTdXBwb3J0ZWQiLCJvbGRDYW52YXMiLCJvbGRDb250ZXh0IiwidGltZU9wdHMiLCJ0aW1lUHJvcHMiLCJnZXRUaW1lUHJvcHMiLCJfc2V0dXBHTEtleSIsIl9hcHBlbmRDYW52YXNJZk5lZWRlZCIsImRyYXciLCJvbGRTaXplcyIsIm5ld1Byb3BzIiwicGl4ZWxEZW5zaXR5Iiwic3R5bGVDYW52YXMiLCJuZXdTaXplcyIsImNoYW5nZWQiLCJkZWVwRXF1YWxfMSIsIl9zaXplQ2hhbmdlZCIsImZyYW1lSW50ZXJ2YWxNUyIsImRlbHRhVGltZU1TIiwiaGFzRHVyYXRpb24iLCJpc05ld0ZyYW1lIiwicGxheWJhY2tSYXRlIiwibmV3VGltZSIsInRpbWVTY2FsZSIsImlzRmluaXNoZWQiLCJpc0xvb3BTdGFydCIsImxvb3AiLCJsYXN0RnJhbWUiLCJkaXNwYXRjaCIsIm1vdW50IiwidW5tb3VudCIsImRldGFjaCIsImN0eCIsImNsZWFyIiwiY2xlYXJDb2xvciIsImJ1ZmZlckRhdGEiLCJoYXNUb3RhbEZyYW1lcyIsInRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uIiwiZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMiLCJJbmZpbml0eSIsInN0YXJ0VGltZSIsInN0YXJ0RnJhbWUiLCJoYXNTdGFydFRpbWUiLCJoYXNTdGFydEZyYW1lIiwic2V0dXAiLCJsb2FkQW5kUnVuIiwiY2FudmFzU2tldGNoIiwibmV3U2V0dGluZ3MiLCJsb2FkIiwidW5sb2FkIiwiZGVzdHJveSIsImNyZWF0ZVNrZXRjaCIsInByZWxvYWQiLCJQNUNvbnN0cnVjdG9yIiwicDVTa2V0Y2giLCJpc0dMIiwicmVuZGVyZXIiLCJXRUJHTCIsIlAyRCIsIm5vTG9vcCIsInNldEF0dHJpYnV0ZXMiLCJfcmVuZGVyZXIiLCJkcmF3aW5nQ29udGV4dCIsImxvYWRlciIsImF0dGFjaCIsIm1lc3NhZ2UiLCJDQUNIRSIsInJ1bnRpbWVDb2xsaXNpb25zIiwiaG90SUQiLCJpc0hvdCIsImhvdCIsImlkIiwiaXNJbmplY3RpbmciLCJwcmV2aW91c0RhdGEiLCJjYWNoZUdldCIsIm5leHQiLCJvbGRNYW5hZ2VyIiwibWFuYWdlciIsImNhY2hlUHV0IiwiUGFwZXJTaXplcyIsInBvb2wiLCJHTE9CQUwiLCJzdGFydGRlbm9tIiwicG93Iiwic2lnbmlmaWNhbmNlIiwib3ZlcmZsb3ciLCJvbGRSYW5kb20iLCJBUkM0Iiwia2V5bGVuIiwibWUiLCJqIiwiZyIsImNvdW50IiwiZmxhdHRlbiIsImRlcHRoIiwicHJvcCIsInR5cCIsIm1peGtleSIsInNtZWFyIiwic3RyaW5nc2VlZCIsInRvc3RyaW5nIiwiYXBwbHkiLCJvcHRpb25zIiwiYXJjNCIsImVudHJvcHkiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJuYXZpZ2F0b3IiLCJwbHVnaW5zIiwic2NyZWVuIiwiYXV0b3NlZWQiLCJyZXNldEdsb2JhbCIsIkYyIiwiRzIiLCJHMyIsIkY0IiwiRzQiLCJyYW5kb21PclNlZWQiLCJzMCIsInMxIiwiczIiLCJtYXNoIiwiYWxlYSIsImJ1aWxkUGVybXV0YXRpb25UYWJsZSIsInBlcm0iLCJwZXJtTW9kMTIiLCJhdXgiLCJncmFkMyIsIkZsb2F0MzJBcnJheSIsImdyYWQ0IiwieGluIiwieWluIiwiaTEiLCJqMSIsIm4wIiwibjEiLCJuMiIsIngwIiwieTAiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImlpIiwiamoiLCJ0MCIsImdpMCIsInQxIiwiZ2kxIiwidDIiLCJnaTIiLCJ6aW4iLCJuMyIsImsxIiwiaTIiLCJqMiIsImsyIiwiejAiLCJ6MSIsInoyIiwieDMiLCJ5MyIsInozIiwia2siLCJ0MyIsImdpMyIsIm40IiwibDEiLCJsMiIsImkzIiwiajMiLCJrMyIsImwzIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsIncxIiwidzIiLCJ3MyIsIng0IiwieTQiLCJ6NCIsInc0IiwibGwiLCJ0NCIsImdpNCIsIl9idWlsZFBlcm11dGF0aW9uVGFibGUiLCJkZWZpbmUiLCJhbWQiLCJtYXRoIiwiYmFja2dyb3VuZCIsInRpdGxlIiwibW91c2V4IiwibW91c2V5IiwiYWdlbnRzIiwiQWdlbnQiLCJmaWxsU3R5bGUiLCJmaWxsUmVjdCIsImdyZCIsImNyZWF0ZUxpbmVhckdyYWRpZW50IiwiYWRkQ29sb3JTdG9wIiwiYWdlbnQiLCJvdGhlciIsImRpc3QiLCJwb3MiLCJnZXREaXN0YW5jZSIsImxpbmVUaHJlc2hvbGQiLCJzdHJva2VTdHlsZSIsImxpbmVXaWR0aCIsImJlZ2luUGF0aCIsIm1vdmVUbyIsImxpbmVUbyIsInN0cm9rZSIsIm9ubW91c2Vtb3ZlIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0cmFuc2xhdGUiLCJhcmMiLCJzaGFkb3dDb2xvciIsInNoYWRvd0JsdXIiLCJzaGFkb3dPZmZzZXRYIiwic2hhZG93T2Zmc2V0WSIsImZpbGwiLCJib3VuY2UiLCJWZWN0b3IiLCJjb25zdHJ1Y3RvciIsImR4IiwiZHkiLCJtb3ZlIiwidmVsIiwicHVsbCIsIkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSIsImxvY2F0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLmNvbmZpZy95YXJuL2dsb2JhbC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvd3JhcC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvcmFuZG9tLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3JpZ2h0LW5vdy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvaXMtcHJvbWlzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLWRvbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yZXBlYXQtc3RyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2lzX2FyZ3VtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kYXRlZm9ybWF0L2xpYi9kYXRlZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcGFkLWxlZnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9zYXZlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvYWNjZXNzaWJpbGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3BhcGVyLXNpemVzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvZGlzdGFuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9yZXNpemVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9nZXQtY2FudmFzLWNvbnRleHQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2NyZWF0ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvU2tldGNoTWFuYWdlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUva2V5Ym9hcmRTaG9ydGN1dHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jYW52YXMtc2tldGNoLmpzIiwibm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2VlZC1yYW5kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2ltcGxleC1ub2lzZS9zaW1wbGV4LW5vaXNlLmpzIiwic2tldGNoLTAzLmpzIiwiY2FudmFzLXNrZXRjaC1jbGkvaW5qZWN0ZWQvc3RvcmFnZS1rZXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIm1vZHVsZS5leHBvcnRzID0gd3JhcDtcbmZ1bmN0aW9uIHdyYXAgKHZhbHVlLCBmcm9tLCB0bykge1xuICBpZiAodHlwZW9mIGZyb20gIT09ICdudW1iZXInIHx8IHR5cGVvZiB0byAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHNwZWNpZnkgXCJ0b1wiIGFuZCBcImZyb21cIiBhcmd1bWVudHMgYXMgbnVtYmVycycpO1xuICB9XG4gIC8vIGFsZ29yaXRobSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU4NTI2MjgvNTk5ODg0XG4gIGlmIChmcm9tID4gdG8pIHtcbiAgICB2YXIgdCA9IGZyb207XG4gICAgZnJvbSA9IHRvO1xuICAgIHRvID0gdDtcbiAgfVxuICB2YXIgY3ljbGUgPSB0byAtIGZyb207XG4gIGlmIChjeWNsZSA9PT0gMCkge1xuICAgIHJldHVybiB0bztcbiAgfVxuICByZXR1cm4gdmFsdWUgLSBjeWNsZSAqIE1hdGguZmxvb3IoKHZhbHVlIC0gZnJvbSkgLyBjeWNsZSk7XG59XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi9saWIvd3JhcCcpO1xudmFyIEVQU0lMT04gPSBOdW1iZXIuRVBTSUxPTjtcblxuZnVuY3Rpb24gY2xhbXAgKHZhbHVlLCBtaW4sIG1heCkge1xuICByZXR1cm4gbWluIDwgbWF4XG4gICAgPyAodmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlKVxuICAgIDogKHZhbHVlIDwgbWF4ID8gbWF4IDogdmFsdWUgPiBtaW4gPyBtaW4gOiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wMDEgKHYpIHtcbiAgcmV0dXJuIGNsYW1wKHYsIDAsIDEpO1xufVxuXG5mdW5jdGlvbiBsZXJwIChtaW4sIG1heCwgdCkge1xuICByZXR1cm4gbWluICogKDEgLSB0KSArIG1heCAqIHQ7XG59XG5cbmZ1bmN0aW9uIGludmVyc2VMZXJwIChtaW4sIG1heCwgdCkge1xuICBpZiAoTWF0aC5hYnMobWluIC0gbWF4KSA8IEVQU0lMT04pIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAodCAtIG1pbikgLyAobWF4IC0gbWluKTtcbn1cblxuZnVuY3Rpb24gc21vb3Roc3RlcCAobWluLCBtYXgsIHQpIHtcbiAgdmFyIHggPSBjbGFtcChpbnZlcnNlTGVycChtaW4sIG1heCwgdCksIDAsIDEpO1xuICByZXR1cm4geCAqIHggKiAoMyAtIDIgKiB4KTtcbn1cblxuZnVuY3Rpb24gdG9GaW5pdGUgKG4sIGRlZmF1bHRWYWx1ZSkge1xuICBkZWZhdWx0VmFsdWUgPSBkZWZpbmVkKGRlZmF1bHRWYWx1ZSwgMCk7XG4gIHJldHVybiB0eXBlb2YgbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUobikgPyBuIDogZGVmYXVsdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBleHBhbmRWZWN0b3IgKGRpbXMpIHtcbiAgaWYgKHR5cGVvZiBkaW1zICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZGltcyBhcmd1bWVudCcpO1xuICByZXR1cm4gZnVuY3Rpb24gKHAsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmluZWQoZGVmYXVsdFZhbHVlLCAwKTtcbiAgICB2YXIgc2NhbGFyO1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIC8vIE5vIHZlY3RvciwgY3JlYXRlIGEgZGVmYXVsdCBvbmVcbiAgICAgIHNjYWxhciA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwKSkge1xuICAgICAgLy8gRXhwYW5kIHNpbmdsZSBjaGFubmVsIHRvIG11bHRpcGxlIHZlY3RvclxuICAgICAgc2NhbGFyID0gcDtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIGk7XG4gICAgaWYgKHNjYWxhciA9PSBudWxsKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGltczsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IHRvRmluaXRlKHBbaV0sIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkaW1zOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gc2NhbGFyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBsZXJwQXJyYXkgKG1pbiwgbWF4LCB0LCBvdXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdO1xuICBpZiAobWluLmxlbmd0aCAhPT0gbWF4Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBhbmQgbWF4IGFycmF5IGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWluLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0W2ldID0gbGVycChtaW5baV0sIG1heFtpXSwgdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbmV3QXJyYXkgKG4sIGluaXRpYWxWYWx1ZSkge1xuICBuID0gZGVmaW5lZChuLCAwKTtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbiBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICB2YXIgb3V0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBvdXQucHVzaChpbml0aWFsVmFsdWUpO1xuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBsaW5zcGFjZSAobiwgb3B0cykge1xuICBuID0gZGVmaW5lZChuLCAwKTtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbiBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnYm9vbGVhbicpIHtcbiAgICBvcHRzID0geyBlbmRwb2ludDogdHJ1ZSB9O1xuICB9XG4gIHZhciBvZmZzZXQgPSBkZWZpbmVkKG9wdHMub2Zmc2V0LCAwKTtcbiAgaWYgKG9wdHMuZW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbmV3QXJyYXkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gbiA8PSAxID8gMCA6ICgoaSArIG9mZnNldCkgLyAobiAtIDEpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3QXJyYXkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gKGkgKyBvZmZzZXQpIC8gbjtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZXJwRnJhbWVzICh2YWx1ZXMsIHQsIG91dCkge1xuICB0ID0gY2xhbXAodCwgMCwgMSk7XG5cbiAgdmFyIGxlbiA9IHZhbHVlcy5sZW5ndGggLSAxO1xuICB2YXIgd2hvbGUgPSB0ICogbGVuO1xuICB2YXIgZnJhbWUgPSBNYXRoLmZsb29yKHdob2xlKTtcbiAgdmFyIGZyYWN0ID0gd2hvbGUgLSBmcmFtZTtcblxuICB2YXIgbmV4dEZyYW1lID0gTWF0aC5taW4oZnJhbWUgKyAxLCBsZW4pO1xuICB2YXIgYSA9IHZhbHVlc1tmcmFtZSAlIHZhbHVlcy5sZW5ndGhdO1xuICB2YXIgYiA9IHZhbHVlc1tuZXh0RnJhbWUgJSB2YWx1ZXMubGVuZ3RoXTtcbiAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGVycChhLCBiLCBmcmFjdCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgcmV0dXJuIGxlcnBBcnJheShhLCBiLCBmcmFjdCwgb3V0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNtYXRjaCBpbiB2YWx1ZSB0eXBlIG9mIHR3byBhcnJheSBlbGVtZW50czogJyArIGZyYW1lICsgJyBhbmQgJyArIG5leHRGcmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9kIChhLCBiKSB7XG4gIHJldHVybiAoKGEgJSBiKSArIGIpICUgYjtcbn1cblxuZnVuY3Rpb24gZGVnVG9SYWQgKG4pIHtcbiAgcmV0dXJuIG4gKiBNYXRoLlBJIC8gMTgwO1xufVxuXG5mdW5jdGlvbiByYWRUb0RlZyAobikge1xuICByZXR1cm4gbiAqIDE4MCAvIE1hdGguUEk7XG59XG5cbmZ1bmN0aW9uIGZyYWN0IChuKSB7XG4gIHJldHVybiBuIC0gTWF0aC5mbG9vcihuKTtcbn1cblxuZnVuY3Rpb24gc2lnbiAobikge1xuICBpZiAobiA+IDApIHJldHVybiAxO1xuICBlbHNlIGlmIChuIDwgMCkgcmV0dXJuIC0xO1xuICBlbHNlIHJldHVybiAwO1xufVxuXG4vLyBTcGVjaWZpYyBmdW5jdGlvbiBmcm9tIFVuaXR5IC8gb2ZNYXRoLCBub3Qgc3VyZSBpdHMgbmVlZGVkP1xuLy8gZnVuY3Rpb24gbGVycFdyYXAgKGEsIGIsIHQsIG1pbiwgbWF4KSB7XG4vLyAgIHJldHVybiB3cmFwKGEgKyB3cmFwKGIgLSBhLCBtaW4sIG1heCkgKiB0LCBtaW4sIG1heClcbi8vIH1cblxuZnVuY3Rpb24gcGluZ1BvbmcgKHQsIGxlbmd0aCkge1xuICB0ID0gbW9kKHQsIGxlbmd0aCAqIDIpO1xuICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGRhbXAgKGEsIGIsIGxhbWJkYSwgZHQpIHtcbiAgcmV0dXJuIGxlcnAoYSwgYiwgMSAtIE1hdGguZXhwKC1sYW1iZGEgKiBkdCkpO1xufVxuXG5mdW5jdGlvbiBkYW1wQXJyYXkgKGEsIGIsIGxhbWJkYSwgZHQsIG91dCkge1xuICBvdXQgPSBvdXQgfHwgW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIG91dFtpXSA9IGRhbXAoYVtpXSwgYltpXSwgbGFtYmRhLCBkdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbWFwUmFuZ2UgKHZhbHVlLCBpbnB1dE1pbiwgaW5wdXRNYXgsIG91dHB1dE1pbiwgb3V0cHV0TWF4LCBjbGFtcCkge1xuICAvLyBSZWZlcmVuY2U6XG4gIC8vIGh0dHBzOi8vb3BlbmZyYW1ld29ya3MuY2MvZG9jdW1lbnRhdGlvbi9tYXRoL29mTWF0aC9cbiAgaWYgKE1hdGguYWJzKGlucHV0TWluIC0gaW5wdXRNYXgpIDwgRVBTSUxPTikge1xuICAgIHJldHVybiBvdXRwdXRNaW47XG4gIH0gZWxzZSB7XG4gICAgdmFyIG91dFZhbCA9ICgodmFsdWUgLSBpbnB1dE1pbikgLyAoaW5wdXRNYXggLSBpbnB1dE1pbikgKiAob3V0cHV0TWF4IC0gb3V0cHV0TWluKSArIG91dHB1dE1pbik7XG4gICAgaWYgKGNsYW1wKSB7XG4gICAgICBpZiAob3V0cHV0TWF4IDwgb3V0cHV0TWluKSB7XG4gICAgICAgIGlmIChvdXRWYWwgPCBvdXRwdXRNYXgpIG91dFZhbCA9IG91dHB1dE1heDtcbiAgICAgICAgZWxzZSBpZiAob3V0VmFsID4gb3V0cHV0TWluKSBvdXRWYWwgPSBvdXRwdXRNaW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0VmFsID4gb3V0cHV0TWF4KSBvdXRWYWwgPSBvdXRwdXRNYXg7XG4gICAgICAgIGVsc2UgaWYgKG91dFZhbCA8IG91dHB1dE1pbikgb3V0VmFsID0gb3V0cHV0TWluO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0VmFsO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb2Q6IG1vZCxcbiAgZnJhY3Q6IGZyYWN0LFxuICBzaWduOiBzaWduLFxuICBkZWdUb1JhZDogZGVnVG9SYWQsXG4gIHJhZFRvRGVnOiByYWRUb0RlZyxcbiAgd3JhcDogd3JhcCxcbiAgcGluZ1Bvbmc6IHBpbmdQb25nLFxuICBsaW5zcGFjZTogbGluc3BhY2UsXG4gIGxlcnA6IGxlcnAsXG4gIGxlcnBBcnJheTogbGVycEFycmF5LFxuICBpbnZlcnNlTGVycDogaW52ZXJzZUxlcnAsXG4gIGxlcnBGcmFtZXM6IGxlcnBGcmFtZXMsXG4gIGNsYW1wOiBjbGFtcCxcbiAgY2xhbXAwMTogY2xhbXAwMSxcbiAgc21vb3Roc3RlcDogc21vb3Roc3RlcCxcbiAgZGFtcDogZGFtcCxcbiAgZGFtcEFycmF5OiBkYW1wQXJyYXksXG4gIG1hcFJhbmdlOiBtYXBSYW5nZSxcbiAgZXhwYW5kMkQ6IGV4cGFuZFZlY3RvcigyKSxcbiAgZXhwYW5kM0Q6IGV4cGFuZFZlY3RvcigzKSxcbiAgZXhwYW5kNEQ6IGV4cGFuZFZlY3Rvcig0KVxufTtcbiIsInZhciBzZWVkUmFuZG9tID0gcmVxdWlyZSgnc2VlZC1yYW5kb20nKTtcbnZhciBTaW1wbGV4Tm9pc2UgPSByZXF1aXJlKCdzaW1wbGV4LW5vaXNlJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcblxuZnVuY3Rpb24gY3JlYXRlUmFuZG9tIChkZWZhdWx0U2VlZCkge1xuICBkZWZhdWx0U2VlZCA9IGRlZmluZWQoZGVmYXVsdFNlZWQsIG51bGwpO1xuICB2YXIgZGVmYXVsdFJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICB2YXIgY3VycmVudFNlZWQ7XG4gIHZhciBjdXJyZW50UmFuZG9tO1xuICB2YXIgbm9pc2VHZW5lcmF0b3I7XG4gIHZhciBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgdmFyIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcblxuICBzZXRTZWVkKGRlZmF1bHRTZWVkKTtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjcmVhdGVSYW5kb206IGZ1bmN0aW9uIChkZWZhdWx0U2VlZCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJhbmRvbShkZWZhdWx0U2VlZCk7XG4gICAgfSxcbiAgICBzZXRTZWVkOiBzZXRTZWVkLFxuICAgIGdldFNlZWQ6IGdldFNlZWQsXG4gICAgZ2V0UmFuZG9tU2VlZDogZ2V0UmFuZG9tU2VlZCxcbiAgICB2YWx1ZU5vblplcm86IHZhbHVlTm9uWmVybyxcbiAgICBwZXJtdXRlTm9pc2U6IHBlcm11dGVOb2lzZSxcbiAgICBub2lzZTFEOiBub2lzZTFELFxuICAgIG5vaXNlMkQ6IG5vaXNlMkQsXG4gICAgbm9pc2UzRDogbm9pc2UzRCxcbiAgICBub2lzZTREOiBub2lzZTRELFxuICAgIHNpZ246IHNpZ24sXG4gICAgYm9vbGVhbjogYm9vbGVhbixcbiAgICBjaGFuY2U6IGNoYW5jZSxcbiAgICByYW5nZTogcmFuZ2UsXG4gICAgcmFuZ2VGbG9vcjogcmFuZ2VGbG9vcixcbiAgICBwaWNrOiBwaWNrLFxuICAgIHNodWZmbGU6IHNodWZmbGUsXG4gICAgb25DaXJjbGU6IG9uQ2lyY2xlLFxuICAgIGluc2lkZUNpcmNsZTogaW5zaWRlQ2lyY2xlLFxuICAgIG9uU3BoZXJlOiBvblNwaGVyZSxcbiAgICBpbnNpZGVTcGhlcmU6IGluc2lkZVNwaGVyZSxcbiAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLFxuICAgIHdlaWdodGVkOiB3ZWlnaHRlZCxcbiAgICB3ZWlnaHRlZFNldDogd2VpZ2h0ZWRTZXQsXG4gICAgd2VpZ2h0ZWRTZXRJbmRleDogd2VpZ2h0ZWRTZXRJbmRleCxcbiAgICBnYXVzc2lhbjogZ2F1c3NpYW5cbiAgfTtcblxuICBmdW5jdGlvbiBzZXRTZWVkIChzZWVkLCBvcHQpIHtcbiAgICBpZiAodHlwZW9mIHNlZWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZWVkID09PSAnc3RyaW5nJykge1xuICAgICAgY3VycmVudFNlZWQgPSBzZWVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IHNlZWRSYW5kb20oY3VycmVudFNlZWQsIG9wdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gdW5kZWZpbmVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IGRlZmF1bHRSYW5kb207XG4gICAgfVxuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZSAoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRSYW5kb20oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlTm9uWmVybyAoKSB7XG4gICAgdmFyIHUgPSAwO1xuICAgIHdoaWxlICh1ID09PSAwKSB1ID0gdmFsdWUoKTtcbiAgICByZXR1cm4gdTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlZWQgKCkge1xuICAgIHJldHVybiBjdXJyZW50U2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVNlZWQgKCkge1xuICAgIHZhciBzZWVkID0gU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApKTtcbiAgICByZXR1cm4gc2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vaXNlICgpIHtcbiAgICByZXR1cm4gbmV3IFNpbXBsZXhOb2lzZShjdXJyZW50UmFuZG9tKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcm11dGVOb2lzZSAoKSB7XG4gICAgbm9pc2VHZW5lcmF0b3IgPSBjcmVhdGVOb2lzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UxRCAoeCwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlMkQoeCAqIGZyZXF1ZW5jeSwgMCk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTJEICh4LCB5LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIHkgKiBmcmVxdWVuY3kpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UzRCAoeCwgeSwgeiwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh6KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneiBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTNEKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlNEQgKHgsIHksIHosIHcsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh3KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigndyBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTREKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5LFxuICAgICAgdyAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduICgpIHtcbiAgICByZXR1cm4gYm9vbGVhbigpID8gMSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gYm9vbGVhbiAoKSB7XG4gICAgcmV0dXJuIHZhbHVlKCkgPiAwLjU7XG4gIH1cblxuICBmdW5jdGlvbiBjaGFuY2UgKG4pIHtcbiAgICBuID0gZGVmaW5lZChuLCAwLjUpO1xuICAgIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIG4gdG8gYmUgYSBudW1iZXInKTtcbiAgICByZXR1cm4gdmFsdWUoKSA8IG47XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZSAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUoKSAqIChtYXggLSBtaW4pICsgbWluO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2VGbG9vciAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYW5nZShtaW4sIG1heCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGljayAoYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhcnJheVtyYW5nZUZsb29yKDAsIGFycmF5Lmxlbmd0aCldO1xuICB9XG5cbiAgZnVuY3Rpb24gc2h1ZmZsZSAoYXJyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIEFycmF5LCBnb3QgJyArIHR5cGVvZiBhcnIpO1xuICAgIH1cblxuICAgIHZhciByYW5kO1xuICAgIHZhciB0bXA7XG4gICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgdmFyIHJldCA9IGFyci5zbGljZSgpO1xuICAgIHdoaWxlIChsZW4pIHtcbiAgICAgIHJhbmQgPSBNYXRoLmZsb29yKHZhbHVlKCkgKiBsZW4tLSk7XG4gICAgICB0bXAgPSByZXRbbGVuXTtcbiAgICAgIHJldFtsZW5dID0gcmV0W3JhbmRdO1xuICAgICAgcmV0W3JhbmRdID0gdG1wO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdGhldGEgPSB2YWx1ZSgpICogMi4wICogTWF0aC5QSTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgb3V0WzFdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVDaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICBvbkNpcmNsZSgxLCBvdXQpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5zcXJ0KHZhbHVlKCkpO1xuICAgIG91dFswXSAqPSByO1xuICAgIG91dFsxXSAqPSByO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBvblNwaGVyZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1ID0gdmFsdWUoKSAqIE1hdGguUEkgKiAyO1xuICAgIHZhciB2ID0gdmFsdWUoKSAqIDIgLSAxO1xuICAgIHZhciBwaGkgPSB1O1xuICAgIHZhciB0aGV0YSA9IE1hdGguYWNvcyh2KTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVTcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgayA9IHZhbHVlKCk7XG5cbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgdmFyIHIgPSByYWRpdXMgKiBNYXRoLmNicnQoayk7XG4gICAgb3V0WzBdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKHBoaSk7XG4gICAgb3V0WzFdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gciAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhdGVybmlvbiAob3V0KSB7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1MSA9IHZhbHVlKCk7XG4gICAgdmFyIHUyID0gdmFsdWUoKTtcbiAgICB2YXIgdTMgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHNxMSA9IE1hdGguc3FydCgxIC0gdTEpO1xuICAgIHZhciBzcTIgPSBNYXRoLnNxcnQodTEpO1xuXG4gICAgdmFyIHRoZXRhMSA9IE1hdGguUEkgKiAyICogdTI7XG4gICAgdmFyIHRoZXRhMiA9IE1hdGguUEkgKiAyICogdTM7XG5cbiAgICB2YXIgeCA9IE1hdGguc2luKHRoZXRhMSkgKiBzcTE7XG4gICAgdmFyIHkgPSBNYXRoLmNvcyh0aGV0YTEpICogc3ExO1xuICAgIHZhciB6ID0gTWF0aC5zaW4odGhldGEyKSAqIHNxMjtcbiAgICB2YXIgdyA9IE1hdGguY29zKHRoZXRhMikgKiBzcTI7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgb3V0WzNdID0gdztcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXQgKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNldFt3ZWlnaHRlZFNldEluZGV4KHNldCldLnZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXRJbmRleCAoc2V0KSB7XG4gICAgc2V0ID0gc2V0IHx8IFtdO1xuICAgIGlmIChzZXQubGVuZ3RoID09PSAwKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHdlaWdodGVkKHNldC5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLndlaWdodDtcbiAgICB9KSk7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZCAod2VpZ2h0cykge1xuICAgIHdlaWdodHMgPSB3ZWlnaHRzIHx8IFtdO1xuICAgIGlmICh3ZWlnaHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHZhciB0b3RhbFdlaWdodCA9IDA7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdG90YWxXZWlnaHQgKz0gd2VpZ2h0c1tpXTtcbiAgICB9XG5cbiAgICBpZiAodG90YWxXZWlnaHQgPD0gMCkgdGhyb3cgbmV3IEVycm9yKCdXZWlnaHRzIG11c3Qgc3VtIHRvID4gMCcpO1xuXG4gICAgdmFyIHJhbmRvbSA9IHZhbHVlKCkgKiB0b3RhbFdlaWdodDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJhbmRvbSA8IHdlaWdodHNbaV0pIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgICByYW5kb20gLT0gd2VpZ2h0c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnYXVzc2lhbiAobWVhbiwgc3RhbmRhcmREZXJpdmF0aW9uKSB7XG4gICAgbWVhbiA9IGRlZmluZWQobWVhbiwgMCk7XG4gICAgc3RhbmRhcmREZXJpdmF0aW9uID0gZGVmaW5lZChzdGFuZGFyZERlcml2YXRpb24sIDEpO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5qZGstbWlycm9yL2pkazd1LWpkay9ibG9iL2Y0ZDgwOTU3ZTg5YTE5YTI5YmI5Zjk4MDdkMmEyODM1MWVkN2Y3ZGYvc3JjL3NoYXJlL2NsYXNzZXMvamF2YS91dGlsL1JhbmRvbS5qYXZhI0w0OTZcbiAgICBpZiAoX2hhc05leHRHYXVzc2lhbikge1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICAgICAgdmFyIHJlc3VsdCA9IF9uZXh0R2F1c3NpYW47XG4gICAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICAgIHJldHVybiBtZWFuICsgc3RhbmRhcmREZXJpdmF0aW9uICogcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdjEgPSAwO1xuICAgICAgdmFyIHYyID0gMDtcbiAgICAgIHZhciBzID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgdjEgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgdjIgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgcyA9IHYxICogdjEgKyB2MiAqIHYyO1xuICAgICAgfSB3aGlsZSAocyA+PSAxIHx8IHMgPT09IDApO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhzKSAvIHMpO1xuICAgICAgX25leHRHYXVzc2lhbiA9ICh2MiAqIG11bHRpcGxpZXIpO1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IHRydWU7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqICh2MSAqIG11bHRpcGxpZXIpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJhbmRvbSgpO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbiAgZ2xvYmFsLnBlcmZvcm1hbmNlICYmXG4gIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPyBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpXG4gIH0gOiBEYXRlLm5vdyB8fCBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuICtuZXcgRGF0ZVxuICB9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzUHJvbWlzZTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gaXNOb2RlXG5cbmZ1bmN0aW9uIGlzTm9kZSAodmFsKSB7XG4gIHJldHVybiAoIXZhbCB8fCB0eXBlb2YgdmFsICE9PSAnb2JqZWN0JylcbiAgICA/IGZhbHNlXG4gICAgOiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHdpbmRvdy5Ob2RlID09PSAnb2JqZWN0JylcbiAgICAgID8gKHZhbCBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlKVxuICAgICAgOiAodHlwZW9mIHZhbC5ub2RlVHlwZSA9PT0gJ251bWJlcicpICYmXG4gICAgICAgICh0eXBlb2YgdmFsLm5vZGVOYW1lID09PSAnc3RyaW5nJylcbn1cbiIsIi8vIFRPRE86IFdlIGNhbiByZW1vdmUgYSBodWdlIGNodW5rIG9mIGJ1bmRsZSBzaXplIGJ5IHVzaW5nIGEgc21hbGxlclxuLy8gdXRpbGl0eSBtb2R1bGUgZm9yIGNvbnZlcnRpbmcgdW5pdHMuXG5pbXBvcnQgaXNET00gZnJvbSAnaXMtZG9tJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudEFQSSAoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3dbJ2NhbnZhcy1za2V0Y2gtY2xpJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkICgpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jyb3dzZXIgKCkge1xuICByZXR1cm4gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViR0xDb250ZXh0IChjdHgpIHtcbiAgcmV0dXJuIHR5cGVvZiBjdHguY2xlYXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0eC5jbGVhckNvbG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguYnVmZmVyRGF0YSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzIChlbGVtZW50KSB7XG4gIHJldHVybiBpc0RPTShlbGVtZW50KSAmJiAvY2FudmFzL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSAmJiB0eXBlb2YgZWxlbWVudC5nZXRDb250ZXh0ID09PSAnZnVuY3Rpb24nO1xufVxuIiwiLyohXG4gKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUmVzdWx0cyBjYWNoZVxuICovXG5cbnZhciByZXMgPSAnJztcbnZhciBjYWNoZTtcblxuLyoqXG4gKiBFeHBvc2UgYHJlcGVhdGBcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGVhdDtcblxuLyoqXG4gKiBSZXBlYXQgdGhlIGdpdmVuIGBzdHJpbmdgIHRoZSBzcGVjaWZpZWQgYG51bWJlcmBcbiAqIG9mIHRpbWVzLlxuICpcbiAqICoqRXhhbXBsZToqKlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuICogcmVwZWF0KCdBJywgNSk7XG4gKiAvLz0+IEFBQUFBXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmluZ2AgVGhlIHN0cmluZyB0byByZXBlYXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBgbnVtYmVyYCBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlcGVhdGVkIHN0cmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByZXBlYXQoc3RyLCBudW0pIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIC8vIGNvdmVyIGNvbW1vbiwgcXVpY2sgdXNlIGNhc2VzXG4gIGlmIChudW0gPT09IDEpIHJldHVybiBzdHI7XG4gIGlmIChudW0gPT09IDIpIHJldHVybiBzdHIgKyBzdHI7XG5cbiAgdmFyIG1heCA9IHN0ci5sZW5ndGggKiBudW07XG4gIGlmIChjYWNoZSAhPT0gc3RyIHx8IHR5cGVvZiBjYWNoZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjYWNoZSA9IHN0cjtcbiAgICByZXMgPSAnJztcbiAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID49IG1heCkge1xuICAgIHJldHVybiByZXMuc3Vic3RyKDAsIG1heCk7XG4gIH1cblxuICB3aGlsZSAobWF4ID4gcmVzLmxlbmd0aCAmJiBudW0gPiAxKSB7XG4gICAgaWYgKG51bSAmIDEpIHtcbiAgICAgIHJlcyArPSBzdHI7XG4gICAgfVxuXG4gICAgbnVtID4+PSAxO1xuICAgIHN0ciArPSBzdHI7XG4gIH1cblxuICByZXMgKz0gc3RyO1xuICByZXMgPSByZXMuc3Vic3RyKDAsIG1heCk7XG4gIHJldHVybiByZXM7XG59XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbidcbiAgPyBPYmplY3Qua2V5cyA6IHNoaW07XG5cbmV4cG9ydHMuc2hpbSA9IHNoaW07XG5mdW5jdGlvbiBzaGltIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwidmFyIHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPSAoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHMpXG59KSgpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID8gc3VwcG9ydGVkIDogdW5zdXBwb3J0ZWQ7XG5cbmV4cG9ydHMuc3VwcG9ydGVkID0gc3VwcG9ydGVkO1xuZnVuY3Rpb24gc3VwcG9ydGVkKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG59O1xuXG5leHBvcnRzLnVuc3VwcG9ydGVkID0gdW5zdXBwb3J0ZWQ7XG5mdW5jdGlvbiB1bnN1cHBvcnRlZChvYmplY3Qpe1xuICByZXR1cm4gb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QubGVuZ3RoID09ICdudW1iZXInICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpICYmXG4gICAgIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsICdjYWxsZWUnKSB8fFxuICAgIGZhbHNlO1xufTtcbiIsInZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4vbGliL2tleXMuanMnKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vbGliL2lzX2FyZ3VtZW50cy5qcycpO1xuXG52YXIgZGVlcEVxdWFsID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zLiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkIHx8IHR5cGVvZiBhY3R1YWwgIT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyA3LjQuIEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgb3B0cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyICh4KSB7XG4gIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHgubGVuZ3RoICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHguY29weSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeC5zbGljZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoeC5sZW5ndGggPiAwICYmIHR5cGVvZiB4WzBdICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgb3B0cykge1xuICB2YXIgaSwga2V5O1xuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuXG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgLy9+fn5JJ3ZlIG1hbmFnZWQgdG8gYnJlYWsgT2JqZWN0LmtleXMgdGhyb3VnaCBzY3Jld3kgYXJndW1lbnRzIHBhc3NpbmcuXG4gIC8vICAgQ29udmVydGluZyB0byBhcnJheSBzb2x2ZXMgdGhlIHByb2JsZW0uXG4gIGlmIChpc0FyZ3VtZW50cyhhKSkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIG9wdHMpO1xuICB9XG4gIGlmIChpc0J1ZmZlcihhKSkge1xuICAgIGlmICghaXNCdWZmZXIoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSksXG4gICAgICAgIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgey8vaGFwcGVucyB3aGVuIG9uZSBpcyBhIHN0cmluZyBsaXRlcmFsIGFuZCB0aGUgb3RoZXIgaXNuJ3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBvcHRzKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XG59XG4iLCIvKlxuICogRGF0ZSBGb3JtYXQgMS4yLjNcbiAqIChjKSAyMDA3LTIwMDkgU3RldmVuIExldml0aGFuIDxzdGV2ZW5sZXZpdGhhbi5jb20+XG4gKiBNSVQgbGljZW5zZVxuICpcbiAqIEluY2x1ZGVzIGVuaGFuY2VtZW50cyBieSBTY290dCBUcmVuZGEgPHNjb3R0LnRyZW5kYS5uZXQ+XG4gKiBhbmQgS3JpcyBLb3dhbCA8Y2l4YXIuY29tL35rcmlzLmtvd2FsLz5cbiAqXG4gKiBBY2NlcHRzIGEgZGF0ZSwgYSBtYXNrLCBvciBhIGRhdGUgYW5kIGEgbWFzay5cbiAqIFJldHVybnMgYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBkYXRlIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGRhdGUvdGltZS5cbiAqIFRoZSBtYXNrIGRlZmF1bHRzIHRvIGRhdGVGb3JtYXQubWFza3MuZGVmYXVsdC5cbiAqL1xuXG4oZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZGF0ZUZvcm1hdCA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0b2tlbiA9IC9kezEsNH18bXsxLDR9fHl5KD86eXkpP3woW0hoTXNUdF0pXFwxP3xbTGxvU1pXTl18XCJbXlwiXSpcInwnW14nXSonL2c7XG4gICAgICB2YXIgdGltZXpvbmUgPSAvXFxiKD86W1BNQ0VBXVtTRFBdVHwoPzpQYWNpZmljfE1vdW50YWlufENlbnRyYWx8RWFzdGVybnxBdGxhbnRpYykgKD86U3RhbmRhcmR8RGF5bGlnaHR8UHJldmFpbGluZykgVGltZXwoPzpHTVR8VVRDKSg/OlstK11cXGR7NH0pPylcXGIvZztcbiAgICAgIHZhciB0aW1lem9uZUNsaXAgPSAvW14tK1xcZEEtWl0vZztcbiAgXG4gICAgICAvLyBSZWdleGVzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBhcmUgY2FjaGVkIHRocm91Z2ggY2xvc3VyZVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBtYXNrLCB1dGMsIGdtdCkge1xuICBcbiAgICAgICAgLy8gWW91IGNhbid0IHByb3ZpZGUgdXRjIGlmIHlvdSBza2lwIG90aGVyIGFyZ3MgKHVzZSB0aGUgJ1VUQzonIG1hc2sgcHJlZml4KVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBraW5kT2YoZGF0ZSkgPT09ICdzdHJpbmcnICYmICEvXFxkLy50ZXN0KGRhdGUpKSB7XG4gICAgICAgICAgbWFzayA9IGRhdGU7XG4gICAgICAgICAgZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICBcbiAgICAgICAgZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGU7XG4gIFxuICAgICAgICBpZighKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIGRhdGUnKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgbWFzayA9IFN0cmluZyhkYXRlRm9ybWF0Lm1hc2tzW21hc2tdIHx8IG1hc2sgfHwgZGF0ZUZvcm1hdC5tYXNrc1snZGVmYXVsdCddKTtcbiAgXG4gICAgICAgIC8vIEFsbG93IHNldHRpbmcgdGhlIHV0Yy9nbXQgYXJndW1lbnQgdmlhIHRoZSBtYXNrXG4gICAgICAgIHZhciBtYXNrU2xpY2UgPSBtYXNrLnNsaWNlKDAsIDQpO1xuICAgICAgICBpZiAobWFza1NsaWNlID09PSAnVVRDOicgfHwgbWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICBtYXNrID0gbWFzay5zbGljZSg0KTtcbiAgICAgICAgICB1dGMgPSB0cnVlO1xuICAgICAgICAgIGlmIChtYXNrU2xpY2UgPT09ICdHTVQ6Jykge1xuICAgICAgICAgICAgZ210ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG4gICAgICAgIHZhciBfID0gdXRjID8gJ2dldFVUQycgOiAnZ2V0JztcbiAgICAgICAgdmFyIGQgPSBkYXRlW18gKyAnRGF0ZSddKCk7XG4gICAgICAgIHZhciBEID0gZGF0ZVtfICsgJ0RheSddKCk7XG4gICAgICAgIHZhciBtID0gZGF0ZVtfICsgJ01vbnRoJ10oKTtcbiAgICAgICAgdmFyIHkgPSBkYXRlW18gKyAnRnVsbFllYXInXSgpO1xuICAgICAgICB2YXIgSCA9IGRhdGVbXyArICdIb3VycyddKCk7XG4gICAgICAgIHZhciBNID0gZGF0ZVtfICsgJ01pbnV0ZXMnXSgpO1xuICAgICAgICB2YXIgcyA9IGRhdGVbXyArICdTZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIEwgPSBkYXRlW18gKyAnTWlsbGlzZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIG8gPSB1dGMgPyAwIDogZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICB2YXIgVyA9IGdldFdlZWsoZGF0ZSk7XG4gICAgICAgIHZhciBOID0gZ2V0RGF5T2ZXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgZmxhZ3MgPSB7XG4gICAgICAgICAgZDogICAgZCxcbiAgICAgICAgICBkZDogICBwYWQoZCksXG4gICAgICAgICAgZGRkOiAgZGF0ZUZvcm1hdC5pMThuLmRheU5hbWVzW0RdLFxuICAgICAgICAgIGRkZGQ6IGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEICsgN10sXG4gICAgICAgICAgbTogICAgbSArIDEsXG4gICAgICAgICAgbW06ICAgcGFkKG0gKyAxKSxcbiAgICAgICAgICBtbW06ICBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttXSxcbiAgICAgICAgICBtbW1tOiBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttICsgMTJdLFxuICAgICAgICAgIHl5OiAgIFN0cmluZyh5KS5zbGljZSgyKSxcbiAgICAgICAgICB5eXl5OiB5LFxuICAgICAgICAgIGg6ICAgIEggJSAxMiB8fCAxMixcbiAgICAgICAgICBoaDogICBwYWQoSCAlIDEyIHx8IDEyKSxcbiAgICAgICAgICBIOiAgICBILFxuICAgICAgICAgIEhIOiAgIHBhZChIKSxcbiAgICAgICAgICBNOiAgICBNLFxuICAgICAgICAgIE1NOiAgIHBhZChNKSxcbiAgICAgICAgICBzOiAgICBzLFxuICAgICAgICAgIHNzOiAgIHBhZChzKSxcbiAgICAgICAgICBsOiAgICBwYWQoTCwgMyksXG4gICAgICAgICAgTDogICAgcGFkKE1hdGgucm91bmQoTCAvIDEwKSksXG4gICAgICAgICAgdDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1swXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMV0sXG4gICAgICAgICAgdHQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1syXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbM10sXG4gICAgICAgICAgVDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s0XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNV0sXG4gICAgICAgICAgVFQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s2XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbN10sXG4gICAgICAgICAgWjogICAgZ210ID8gJ0dNVCcgOiB1dGMgPyAnVVRDJyA6IChTdHJpbmcoZGF0ZSkubWF0Y2godGltZXpvbmUpIHx8IFsnJ10pLnBvcCgpLnJlcGxhY2UodGltZXpvbmVDbGlwLCAnJyksXG4gICAgICAgICAgbzogICAgKG8gPiAwID8gJy0nIDogJysnKSArIHBhZChNYXRoLmZsb29yKE1hdGguYWJzKG8pIC8gNjApICogMTAwICsgTWF0aC5hYnMobykgJSA2MCwgNCksXG4gICAgICAgICAgUzogICAgWyd0aCcsICdzdCcsICduZCcsICdyZCddW2QgJSAxMCA+IDMgPyAwIDogKGQgJSAxMDAgLSBkICUgMTAgIT0gMTApICogZCAlIDEwXSxcbiAgICAgICAgICBXOiAgICBXLFxuICAgICAgICAgIE46ICAgIE5cbiAgICAgICAgfTtcbiAgXG4gICAgICAgIHJldHVybiBtYXNrLnJlcGxhY2UodG9rZW4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgIGlmIChtYXRjaCBpbiBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIGZsYWdzW21hdGNoXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKDEsIG1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICBkYXRlRm9ybWF0Lm1hc2tzID0ge1xuICAgICdkZWZhdWx0JzogICAgICAgICAgICAgICAnZGRkIG1tbSBkZCB5eXl5IEhIOk1NOnNzJyxcbiAgICAnc2hvcnREYXRlJzogICAgICAgICAgICAgJ20vZC95eScsXG4gICAgJ21lZGl1bURhdGUnOiAgICAgICAgICAgICdtbW0gZCwgeXl5eScsXG4gICAgJ2xvbmdEYXRlJzogICAgICAgICAgICAgICdtbW1tIGQsIHl5eXknLFxuICAgICdmdWxsRGF0ZSc6ICAgICAgICAgICAgICAnZGRkZCwgbW1tbSBkLCB5eXl5JyxcbiAgICAnc2hvcnRUaW1lJzogICAgICAgICAgICAgJ2g6TU0gVFQnLFxuICAgICdtZWRpdW1UaW1lJzogICAgICAgICAgICAnaDpNTTpzcyBUVCcsXG4gICAgJ2xvbmdUaW1lJzogICAgICAgICAgICAgICdoOk1NOnNzIFRUIFonLFxuICAgICdpc29EYXRlJzogICAgICAgICAgICAgICAneXl5eS1tbS1kZCcsXG4gICAgJ2lzb1RpbWUnOiAgICAgICAgICAgICAgICdISDpNTTpzcycsXG4gICAgJ2lzb0RhdGVUaW1lJzogICAgICAgICAgICd5eXl5LW1tLWRkXFwnVFxcJ0hIOk1NOnNzbycsXG4gICAgJ2lzb1V0Y0RhdGVUaW1lJzogICAgICAgICdVVEM6eXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc1xcJ1pcXCcnLFxuICAgICdleHBpcmVzSGVhZGVyRm9ybWF0JzogICAnZGRkLCBkZCBtbW0geXl5eSBISDpNTTpzcyBaJ1xuICB9O1xuXG4gIC8vIEludGVybmF0aW9uYWxpemF0aW9uIHN0cmluZ3NcbiAgZGF0ZUZvcm1hdC5pMThuID0ge1xuICAgIGRheU5hbWVzOiBbXG4gICAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JyxcbiAgICAgICdTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSdcbiAgICBdLFxuICAgIG1vbnRoTmFtZXM6IFtcbiAgICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYycsXG4gICAgICAnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlcidcbiAgICBdLFxuICAgIHRpbWVOYW1lczogW1xuICAgICAgJ2EnLCAncCcsICdhbScsICdwbScsICdBJywgJ1AnLCAnQU0nLCAnUE0nXG4gICAgXVxuICB9O1xuXG5mdW5jdGlvbiBwYWQodmFsLCBsZW4pIHtcbiAgdmFsID0gU3RyaW5nKHZhbCk7XG4gIGxlbiA9IGxlbiB8fCAyO1xuICB3aGlsZSAodmFsLmxlbmd0aCA8IGxlbikge1xuICAgIHZhbCA9ICcwJyArIHZhbDtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSVNPIDg2MDEgd2VlayBudW1iZXJcbiAqIEJhc2VkIG9uIGNvbW1lbnRzIGZyb21cbiAqIGh0dHA6Ly90ZWNoYmxvZy5wcm9jdXJpb3Mubmwvay9uNjE4L25ld3Mvdmlldy8zMzc5Ni8xNDg2My9DYWxjdWxhdGUtSVNPLTg2MDEtd2Vlay1hbmQteWVhci1pbi1qYXZhc2NyaXB0Lmh0bWxcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGBkYXRlYFxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRXZWVrKGRhdGUpIHtcbiAgLy8gUmVtb3ZlIHRpbWUgY29tcG9uZW50cyBvZiBkYXRlXG4gIHZhciB0YXJnZXRUaHVyc2RheSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIHRhcmdldFRodXJzZGF5LnNldERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKCh0YXJnZXRUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBUYWtlIEphbnVhcnkgNHRoIGFzIGl0IGlzIGFsd2F5cyBpbiB3ZWVrIDEgKHNlZSBJU08gODYwMSlcbiAgdmFyIGZpcnN0VGh1cnNkYXkgPSBuZXcgRGF0ZSh0YXJnZXRUaHVyc2RheS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcblxuICAvLyBDaGFuZ2UgZGF0ZSB0byBUaHVyc2RheSBzYW1lIHdlZWtcbiAgZmlyc3RUaHVyc2RheS5zZXREYXRlKGZpcnN0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKChmaXJzdFRodXJzZGF5LmdldERheSgpICsgNikgJSA3KSArIDMpO1xuXG4gIC8vIENoZWNrIGlmIGRheWxpZ2h0LXNhdmluZy10aW1lLXN3aXRjaCBvY2N1cnJlZCBhbmQgY29ycmVjdCBmb3IgaXRcbiAgdmFyIGRzID0gdGFyZ2V0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIGZpcnN0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgdGFyZ2V0VGh1cnNkYXkuc2V0SG91cnModGFyZ2V0VGh1cnNkYXkuZ2V0SG91cnMoKSAtIGRzKTtcblxuICAvLyBOdW1iZXIgb2Ygd2Vla3MgYmV0d2VlbiB0YXJnZXQgVGh1cnNkYXkgYW5kIGZpcnN0IFRodXJzZGF5XG4gIHZhciB3ZWVrRGlmZiA9ICh0YXJnZXRUaHVyc2RheSAtIGZpcnN0VGh1cnNkYXkpIC8gKDg2NDAwMDAwKjcpO1xuICByZXR1cm4gMSArIE1hdGguZmxvb3Iod2Vla0RpZmYpO1xufVxuXG4vKipcbiAqIEdldCBJU08tODYwMSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAqIDEgKGZvciBNb25kYXkpIHRocm91Z2ggNyAoZm9yIFN1bmRheSlcbiAqIFxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGF5T2ZXZWVrKGRhdGUpIHtcbiAgdmFyIGRvdyA9IGRhdGUuZ2V0RGF5KCk7XG4gIGlmKGRvdyA9PT0gMCkge1xuICAgIGRvdyA9IDc7XG4gIH1cbiAgcmV0dXJuIGRvdztcbn1cblxuLyoqXG4gKiBraW5kLW9mIHNob3J0Y3V0XG4gKiBAcGFyYW0gIHsqfSB2YWxcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24ga2luZE9mKHZhbCkge1xuICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuXG4gIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0eXBlb2YgdmFsO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG5cbiAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwodmFsKVxuICAgIC5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcbn07XG5cblxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRhdGVGb3JtYXQ7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBkYXRlRm9ybWF0O1xuICB9IGVsc2Uge1xuICAgIGdsb2JhbC5kYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdDtcbiAgfVxufSkodGhpcyk7XG4iLCIvKiFcbiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhZExlZnQoc3RyLCBudW0sIGNoKSB7XG4gIHN0ciA9IHN0ci50b1N0cmluZygpO1xuXG4gIGlmICh0eXBlb2YgbnVtID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAoY2ggPT09IDApIHtcbiAgICBjaCA9ICcwJztcbiAgfSBlbHNlIGlmIChjaCkge1xuICAgIGNoID0gY2gudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBjaCA9ICcgJztcbiAgfVxuXG4gIHJldHVybiByZXBlYXQoY2gsIG51bSAtIHN0ci5sZW5ndGgpICsgc3RyO1xufTtcbiIsImltcG9ydCBkYXRlZm9ybWF0IGZyb20gJ2RhdGVmb3JtYXQnO1xuaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBwYWRMZWZ0IGZyb20gJ3BhZC1sZWZ0JztcbmltcG9ydCB7IGdldENsaWVudEFQSSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbmxldCBsaW5rO1xubGV0IGRlZmF1bHRFeHRzID0geyBleHRlbnNpb246ICcnLCBwcmVmaXg6ICcnLCBzdWZmaXg6ICcnIH07XG5cbi8vIEFsdGVybmF0aXZlIHNvbHV0aW9uIGZvciBzYXZpbmcgZmlsZXMsXG4vLyBhIGJpdCBzbG93ZXIgYW5kIGRvZXMgbm90IHdvcmsgaW4gU2FmYXJpXG4vLyBmdW5jdGlvbiBmZXRjaEJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuLy8gICByZXR1cm4gd2luZG93LmZldGNoKGRhdGFVUkwpLnRoZW4ocmVzID0+IHJlcy5ibG9iKCkpO1xuLy8gfVxuXG5jb25zdCBzdXBwb3J0ZWRFbmNvZGluZ3MgPSBbXG4gICdpbWFnZS9wbmcnLFxuICAnaW1hZ2UvanBlZycsXG4gICdpbWFnZS93ZWJwJ1xuXTtcblxuZnVuY3Rpb24gc3RyZWFtIChpc1N0YXJ0LCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge1xuICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgIGZyYW1lOiB1bmRlZmluZWRcbiAgICB9KSk7XG4gICAgY29uc3QgZnVuYyA9IGlzU3RhcnQgPyAnc3RyZWFtU3RhcnQnIDogJ3N0cmVhbUVuZCc7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiBjbGllbnQub3V0cHV0ICYmIHR5cGVvZiBjbGllbnRbZnVuY10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjbGllbnRbZnVuY10oYXNzaWduKHt9LCBvcHRzLCB7IGZpbGVuYW1lIH0pKVxuICAgICAgICAudGhlbihldiA9PiByZXNvbHZlKGV2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVN0YXJ0IChvcHRzID0ge30pIHtcbiAgcmV0dXJuIHN0cmVhbSh0cnVlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbUVuZCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0oZmFsc2UsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzIChjYW52YXMsIG9wdCA9IHt9KSB7XG4gIGNvbnN0IGVuY29kaW5nID0gb3B0LmVuY29kaW5nIHx8ICdpbWFnZS9wbmcnO1xuICBpZiAoIXN1cHBvcnRlZEVuY29kaW5ncy5pbmNsdWRlcyhlbmNvZGluZykpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYW52YXMgZW5jb2RpbmcgJHtlbmNvZGluZ31gKTtcbiAgbGV0IGV4dGVuc2lvbiA9IChlbmNvZGluZy5zcGxpdCgnLycpWzFdIHx8ICcnKS5yZXBsYWNlKC9qcGVnL2ksICdqcGcnKTtcbiAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uID0gYC4ke2V4dGVuc2lvbn1gLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgZXh0ZW5zaW9uLFxuICAgIHR5cGU6IGVuY29kaW5nLFxuICAgIGRhdGFVUkw6IGNhbnZhcy50b0RhdGFVUkwoZW5jb2RpbmcsIG9wdC5lbmNvZGluZ1F1YWxpdHkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzcGxpdEluZGV4ID0gZGF0YVVSTC5pbmRleE9mKCcsJyk7XG4gICAgaWYgKHNwbGl0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmFzZTY0ID0gZGF0YVVSTC5zbGljZShzcGxpdEluZGV4ICsgMSk7XG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgdHlwZSA9IGRhdGFVUkwuc2xpY2UoMCwgc3BsaXRJbmRleCk7XG4gICAgY29uc3QgbWltZU1hdGNoID0gL2RhdGE6KFteO10rKS8uZXhlYyh0eXBlKTtcbiAgICBjb25zdCBtaW1lID0gKG1pbWVNYXRjaCA/IG1pbWVNYXRjaFsxXSA6ICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJlc29sdmUobmV3IHdpbmRvdy5CbG9iKFsgYWIgXSwgeyB0eXBlOiBtaW1lIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlRGF0YVVSTCAoZGF0YVVSTCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVCbG9iRnJvbURhdGFVUkwoZGF0YVVSTClcbiAgICAudGhlbihibG9iID0+IHNhdmVCbG9iKGJsb2IsIG9wdHMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVCbG9iIChibG9iLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIG9wdHMgPSBhc3NpZ24oe30sIGRlZmF1bHRFeHRzLCBvcHRzKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IG9wdHMuZmlsZW5hbWU7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoY2xpZW50ICYmIHR5cGVvZiBjbGllbnQuc2F2ZUJsb2IgPT09ICdmdW5jdGlvbicgJiYgY2xpZW50Lm91dHB1dCkge1xuICAgICAgLy8gbmF0aXZlIHNhdmluZyB1c2luZyBhIENMSSB0b29sXG4gICAgICByZXR1cm4gY2xpZW50LnNhdmVCbG9iKGJsb2IsIGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3JjZSBkb3dubG9hZFxuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgfVxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgbGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICBsaW5rLm9uY2xpY2sgPSBub29wO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICBpZiAobGluay5wYXJlbnRFbGVtZW50KSBsaW5rLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGUgKGRhdGEsIG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogWyBkYXRhIF07XG4gIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IocGFydHMsIHsgdHlwZTogb3B0cy50eXBlIHx8ICcnIH0pO1xuICByZXR1cm4gc2F2ZUJsb2IoYmxvYiwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lU3RhbXAgKCkge1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICByZXR1cm4gZGF0ZWZvcm1hdChuZXcgRGF0ZSgpLCBkYXRlRm9ybWF0U3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWxlIChwcmVmaXggPSAnJywgc3VmZml4ID0gJycsIGV4dCkge1xuICAvLyBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXktbW0tZGQgJ2F0JyBoLk1NLnNzIFRUYDtcbiAgcmV0dXJuIGAke3ByZWZpeH0ke2RhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cil9JHtzdWZmaXh9JHtleHR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGaWxlbmFtZSAob3B0ID0ge30pIHtcbiAgb3B0ID0gYXNzaWduKHt9LCBvcHQpO1xuXG4gIC8vIEN1c3RvbSBmaWxlbmFtZSBmdW5jdGlvblxuICBpZiAodHlwZW9mIG9wdC5maWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlKG9wdCk7XG4gIH0gZWxzZSBpZiAob3B0LmZpbGUpIHtcbiAgICByZXR1cm4gb3B0LmZpbGU7XG4gIH1cblxuICBsZXQgZnJhbWUgPSBudWxsO1xuICBsZXQgZXh0ZW5zaW9uID0gJyc7XG4gIGlmICh0eXBlb2Ygb3B0LmV4dGVuc2lvbiA9PT0gJ3N0cmluZycpIGV4dGVuc2lvbiA9IG9wdC5leHRlbnNpb247XG5cbiAgaWYgKHR5cGVvZiBvcHQuZnJhbWUgPT09ICdudW1iZXInKSB7XG4gICAgbGV0IHRvdGFsRnJhbWVzO1xuICAgIGlmICh0eXBlb2Ygb3B0LnRvdGFsRnJhbWVzID09PSAnbnVtYmVyJykge1xuICAgICAgdG90YWxGcmFtZXMgPSBvcHQudG90YWxGcmFtZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gTWF0aC5tYXgoMTAwMDAsIG9wdC5mcmFtZSk7XG4gICAgfVxuICAgIGZyYW1lID0gcGFkTGVmdChTdHJpbmcob3B0LmZyYW1lKSwgU3RyaW5nKHRvdGFsRnJhbWVzKS5sZW5ndGgsICcwJyk7XG4gIH1cblxuICBjb25zdCBsYXllclN0ciA9IGlzRmluaXRlKG9wdC50b3RhbExheWVycykgJiYgaXNGaW5pdGUob3B0LmxheWVyKSAmJiBvcHQudG90YWxMYXllcnMgPiAxID8gYCR7b3B0LmxheWVyfWAgOiAnJztcbiAgaWYgKGZyYW1lICE9IG51bGwpIHtcbiAgICByZXR1cm4gWyBsYXllclN0ciwgZnJhbWUgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRGaWxlTmFtZSA9IG9wdC50aW1lU3RhbXA7XG4gICAgcmV0dXJuIFsgb3B0LnByZWZpeCwgb3B0Lm5hbWUgfHwgZGVmYXVsdEZpbGVOYW1lLCBsYXllclN0ciwgb3B0Lmhhc2gsIG9wdC5zdWZmaXggXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9XG59XG4iLCIvLyBIYW5kbGUgc29tZSBjb21tb24gdHlwb3NcbmNvbnN0IGNvbW1vblR5cG9zID0ge1xuICBkaW1lbnNpb246ICdkaW1lbnNpb25zJyxcbiAgYW5pbWF0ZWQ6ICdhbmltYXRlJyxcbiAgYW5pbWF0aW5nOiAnYW5pbWF0ZScsXG4gIHVuaXQ6ICd1bml0cycsXG4gIFA1OiAncDUnLFxuICBwaXhlbGxhdGVkOiAncGl4ZWxhdGVkJyxcbiAgbG9vcGluZzogJ2xvb3AnLFxuICBwaXhlbFBlckluY2g6ICdwaXhlbHMnXG59O1xuXG4vLyBIYW5kbGUgYWxsIG90aGVyIHR5cG9zXG5jb25zdCBhbGxLZXlzID0gW1xuICAnZGltZW5zaW9ucycsICd1bml0cycsICdwaXhlbHNQZXJJbmNoJywgJ29yaWVudGF0aW9uJyxcbiAgJ3NjYWxlVG9GaXQnLCAnc2NhbGVUb1ZpZXcnLCAnYmxlZWQnLCAncGl4ZWxSYXRpbycsXG4gICdleHBvcnRQaXhlbFJhdGlvJywgJ21heFBpeGVsUmF0aW8nLCAnc2NhbGVDb250ZXh0JyxcbiAgJ3Jlc2l6ZUNhbnZhcycsICdzdHlsZUNhbnZhcycsICdjYW52YXMnLCAnY29udGV4dCcsICdhdHRyaWJ1dGVzJyxcbiAgJ3BhcmVudCcsICdmaWxlJywgJ25hbWUnLCAncHJlZml4JywgJ3N1ZmZpeCcsICdhbmltYXRlJywgJ3BsYXlpbmcnLFxuICAnbG9vcCcsICdkdXJhdGlvbicsICd0b3RhbEZyYW1lcycsICdmcHMnLCAncGxheWJhY2tSYXRlJywgJ3RpbWVTY2FsZScsXG4gICdmcmFtZScsICd0aW1lJywgJ2ZsdXNoJywgJ3BpeGVsYXRlZCcsICdob3RrZXlzJywgJ3A1JywgJ2lkJyxcbiAgJ3NjYWxlVG9GaXRQYWRkaW5nJywgJ2RhdGEnLCAncGFyYW1zJywgJ2VuY29kaW5nJywgJ2VuY29kaW5nUXVhbGl0eSdcbl07XG5cbi8vIFRoaXMgaXMgZmFpcmx5IG9waW5pb25hdGVkIGFuZCBmb3JjZXMgdXNlcnMgdG8gdXNlIHRoZSAnZGF0YScgcGFyYW1ldGVyXG4vLyBpZiB0aGV5IHdhbnQgdG8gcGFzcyBhbG9uZyBub24tc2V0dGluZyBvYmplY3RzLi4uXG5leHBvcnQgY29uc3QgY2hlY2tTZXR0aW5ncyA9IChzZXR0aW5ncykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbW1vblR5cG9zKSB7XG4gICAgICBjb25zdCBhY3R1YWwgPSBjb21tb25UeXBvc1trZXldO1xuICAgICAgY29uc29sZS53YXJuKGBbY2FudmFzLXNrZXRjaF0gQ291bGQgbm90IHJlY29nbml6ZSB0aGUgc2V0dGluZyBcIiR7a2V5fVwiLCBkaWQgeW91IG1lYW4gXCIke2FjdHVhbH1cIj9gKTtcbiAgICB9IGVsc2UgaWYgKCFhbGxLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cImApO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiY29uc3QgZGVmYXVsdFVuaXRzID0gJ21tJztcblxuY29uc3QgZGF0YSA9IFtcbiAgLy8gQ29tbW9uIFBhcGVyIFNpemVzXG4gIC8vIChNb3N0bHkgTm9ydGgtQW1lcmljYW4gYmFzZWQpXG4gIFsgJ3Bvc3RjYXJkJywgMTAxLjYsIDE1Mi40IF0sXG4gIFsgJ3Bvc3Rlci1zbWFsbCcsIDI4MCwgNDMwIF0sXG4gIFsgJ3Bvc3RlcicsIDQ2MCwgNjEwIF0sXG4gIFsgJ3Bvc3Rlci1sYXJnZScsIDYxMCwgOTEwIF0sXG4gIFsgJ2J1c2luZXNzLWNhcmQnLCA1MC44LCA4OC45IF0sXG5cbiAgLy8gUGhvdG9ncmFwaGljIFByaW50IFBhcGVyIFNpemVzXG4gIFsgJzJyJywgNjQsIDg5IF0sXG4gIFsgJzNyJywgODksIDEyNyBdLFxuICBbICc0cicsIDEwMiwgMTUyIF0sXG4gIFsgJzVyJywgMTI3LCAxNzggXSwgLy8gNeKAs3g34oCzXG4gIFsgJzZyJywgMTUyLCAyMDMgXSwgLy8gNuKAs3g44oCzXG4gIFsgJzhyJywgMjAzLCAyNTQgXSwgLy8gOOKAs3gxMOKAs1xuICBbICcxMHInLCAyNTQsIDMwNSBdLCAvLyAxMOKAs3gxMuKAs1xuICBbICcxMXInLCAyNzksIDM1NiBdLCAvLyAxMeKAs3gxNOKAs1xuICBbICcxMnInLCAzMDUsIDM4MSBdLFxuXG4gIC8vIFN0YW5kYXJkIFBhcGVyIFNpemVzXG4gIFsgJ2EwJywgODQxLCAxMTg5IF0sXG4gIFsgJ2ExJywgNTk0LCA4NDEgXSxcbiAgWyAnYTInLCA0MjAsIDU5NCBdLFxuICBbICdhMycsIDI5NywgNDIwIF0sXG4gIFsgJ2E0JywgMjEwLCAyOTcgXSxcbiAgWyAnYTUnLCAxNDgsIDIxMCBdLFxuICBbICdhNicsIDEwNSwgMTQ4IF0sXG4gIFsgJ2E3JywgNzQsIDEwNSBdLFxuICBbICdhOCcsIDUyLCA3NCBdLFxuICBbICdhOScsIDM3LCA1MiBdLFxuICBbICdhMTAnLCAyNiwgMzcgXSxcbiAgWyAnMmEwJywgMTE4OSwgMTY4MiBdLFxuICBbICc0YTAnLCAxNjgyLCAyMzc4IF0sXG4gIFsgJ2IwJywgMTAwMCwgMTQxNCBdLFxuICBbICdiMScsIDcwNywgMTAwMCBdLFxuICBbICdiMSsnLCA3MjAsIDEwMjAgXSxcbiAgWyAnYjInLCA1MDAsIDcwNyBdLFxuICBbICdiMisnLCA1MjAsIDcyMCBdLFxuICBbICdiMycsIDM1MywgNTAwIF0sXG4gIFsgJ2I0JywgMjUwLCAzNTMgXSxcbiAgWyAnYjUnLCAxNzYsIDI1MCBdLFxuICBbICdiNicsIDEyNSwgMTc2IF0sXG4gIFsgJ2I3JywgODgsIDEyNSBdLFxuICBbICdiOCcsIDYyLCA4OCBdLFxuICBbICdiOScsIDQ0LCA2MiBdLFxuICBbICdiMTAnLCAzMSwgNDQgXSxcbiAgWyAnYjExJywgMjIsIDMyIF0sXG4gIFsgJ2IxMicsIDE2LCAyMiBdLFxuICBbICdjMCcsIDkxNywgMTI5NyBdLFxuICBbICdjMScsIDY0OCwgOTE3IF0sXG4gIFsgJ2MyJywgNDU4LCA2NDggXSxcbiAgWyAnYzMnLCAzMjQsIDQ1OCBdLFxuICBbICdjNCcsIDIyOSwgMzI0IF0sXG4gIFsgJ2M1JywgMTYyLCAyMjkgXSxcbiAgWyAnYzYnLCAxMTQsIDE2MiBdLFxuICBbICdjNycsIDgxLCAxMTQgXSxcbiAgWyAnYzgnLCA1NywgODEgXSxcbiAgWyAnYzknLCA0MCwgNTcgXSxcbiAgWyAnYzEwJywgMjgsIDQwIF0sXG4gIFsgJ2MxMScsIDIyLCAzMiBdLFxuICBbICdjMTInLCAxNiwgMjIgXSxcblxuICAvLyBVc2UgaW5jaGVzIGZvciBOb3J0aCBBbWVyaWNhbiBzaXplcyxcbiAgLy8gYXMgaXQgcHJvZHVjZXMgbGVzcyBmbG9hdCBwcmVjaXNpb24gZXJyb3JzXG4gIFsgJ2hhbGYtbGV0dGVyJywgNS41LCA4LjUsICdpbicgXSxcbiAgWyAnbGV0dGVyJywgOC41LCAxMSwgJ2luJyBdLFxuICBbICdsZWdhbCcsIDguNSwgMTQsICdpbicgXSxcbiAgWyAnanVuaW9yLWxlZ2FsJywgNSwgOCwgJ2luJyBdLFxuICBbICdsZWRnZXInLCAxMSwgMTcsICdpbicgXSxcbiAgWyAndGFibG9pZCcsIDExLCAxNywgJ2luJyBdLFxuICBbICdhbnNpLWEnLCA4LjUsIDExLjAsICdpbicgXSxcbiAgWyAnYW5zaS1iJywgMTEuMCwgMTcuMCwgJ2luJyBdLFxuICBbICdhbnNpLWMnLCAxNy4wLCAyMi4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZCcsIDIyLjAsIDM0LjAsICdpbicgXSxcbiAgWyAnYW5zaS1lJywgMzQuMCwgNDQuMCwgJ2luJyBdLFxuICBbICdhcmNoLWEnLCA5LCAxMiwgJ2luJyBdLFxuICBbICdhcmNoLWInLCAxMiwgMTgsICdpbicgXSxcbiAgWyAnYXJjaC1jJywgMTgsIDI0LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZCcsIDI0LCAzNiwgJ2luJyBdLFxuICBbICdhcmNoLWUnLCAzNiwgNDgsICdpbicgXSxcbiAgWyAnYXJjaC1lMScsIDMwLCA0MiwgJ2luJyBdLFxuICBbICdhcmNoLWUyJywgMjYsIDM4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTMnLCAyNywgMzksICdpbicgXVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZGF0YS5yZWR1Y2UoKGRpY3QsIHByZXNldCkgPT4ge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHVuaXRzOiBwcmVzZXRbM10gfHwgZGVmYXVsdFVuaXRzLFxuICAgIGRpbWVuc2lvbnM6IFsgcHJlc2V0WzFdLCBwcmVzZXRbMl0gXVxuICB9O1xuICBkaWN0W3ByZXNldFswXV0gPSBpdGVtO1xuICBkaWN0W3ByZXNldFswXS5yZXBsYWNlKC8tL2csICcgJyldID0gaXRlbTtcbiAgcmV0dXJuIGRpY3Q7XG59LCB7fSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9PSB1bmRlZmluZWQpIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxufTtcbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHVuaXRzID0gWyAnbW0nLCAnY20nLCAnbScsICdwYycsICdwdCcsICdpbicsICdmdCcsICdweCcgXTtcblxudmFyIGNvbnZlcnNpb25zID0ge1xuICAvLyBtZXRyaWNcbiAgbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGNtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDBcbiAgfSxcbiAgbW06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMDBcbiAgfSxcbiAgLy8gaW1wZXJpYWxcbiAgcHQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNzJcbiAgfSxcbiAgcGM6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNlxuICB9LFxuICBpbjoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgZnQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxMlxuICB9XG59O1xuXG5jb25zdCBhbmNob3JzID0ge1xuICBtZXRyaWM6IHtcbiAgICB1bml0OiAnbScsXG4gICAgcmF0aW86IDEgLyAwLjAyNTRcbiAgfSxcbiAgaW1wZXJpYWw6IHtcbiAgICB1bml0OiAnaW4nLFxuICAgIHJhdGlvOiAwLjAyNTRcbiAgfVxufTtcblxuZnVuY3Rpb24gcm91bmQgKHZhbHVlLCBkZWNpbWFscykge1xuICByZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodmFsdWUgKyAnZScgKyBkZWNpbWFscykgKyAnZS0nICsgZGVjaW1hbHMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKHZhbHVlLCBmcm9tVW5pdCwgdG9Vbml0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXInKTtcbiAgaWYgKCFmcm9tVW5pdCB8fCAhdG9Vbml0KSB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBmcm9tIGFuZCB0byB1bml0cycpO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgcGl4ZWxzUGVySW5jaCA9IGRlZmluZWQob3B0cy5waXhlbHNQZXJJbmNoLCA5Nik7XG4gIHZhciBwcmVjaXNpb24gPSBvcHRzLnByZWNpc2lvbjtcbiAgdmFyIHJvdW5kUGl4ZWwgPSBvcHRzLnJvdW5kUGl4ZWwgIT09IGZhbHNlO1xuXG4gIGZyb21Vbml0ID0gZnJvbVVuaXQudG9Mb3dlckNhc2UoKTtcbiAgdG9Vbml0ID0gdG9Vbml0LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHVuaXRzLmluZGV4T2YoZnJvbVVuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyBmcm9tVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcbiAgaWYgKHVuaXRzLmluZGV4T2YodG9Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgdG9Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gdG9Vbml0KSB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IGZyb20gQSB0byBCIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGFscmVhZHlcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB2YXIgdG9GYWN0b3IgPSAxO1xuICB2YXIgZnJvbUZhY3RvciA9IDE7XG4gIHZhciBpc1RvUGl4ZWwgPSBmYWxzZTtcblxuICBpZiAoZnJvbVVuaXQgPT09ICdweCcpIHtcbiAgICBmcm9tRmFjdG9yID0gMSAvIHBpeGVsc1BlckluY2g7XG4gICAgZnJvbVVuaXQgPSAnaW4nO1xuICB9XG4gIGlmICh0b1VuaXQgPT09ICdweCcpIHtcbiAgICBpc1RvUGl4ZWwgPSB0cnVlO1xuICAgIHRvRmFjdG9yID0gcGl4ZWxzUGVySW5jaDtcbiAgICB0b1VuaXQgPSAnaW4nO1xuICB9XG5cbiAgdmFyIGZyb21Vbml0RGF0YSA9IGNvbnZlcnNpb25zW2Zyb21Vbml0XTtcbiAgdmFyIHRvVW5pdERhdGEgPSBjb252ZXJzaW9uc1t0b1VuaXRdO1xuXG4gIC8vIHNvdXJjZSB0byBhbmNob3IgaW5zaWRlIHNvdXJjZSdzIHN5c3RlbVxuICB2YXIgYW5jaG9yID0gdmFsdWUgKiBmcm9tVW5pdERhdGEuZmFjdG9yICogZnJvbUZhY3RvcjtcblxuICAvLyBpZiBzeXN0ZW1zIGRpZmZlciwgY29udmVydCBvbmUgdG8gYW5vdGhlclxuICBpZiAoZnJvbVVuaXREYXRhLnN5c3RlbSAhPT0gdG9Vbml0RGF0YS5zeXN0ZW0pIHtcbiAgICAvLyByZWd1bGFyICdtJyB0byAnaW4nIGFuZCBzbyBmb3J0aFxuICAgIGFuY2hvciAqPSBhbmNob3JzW2Zyb21Vbml0RGF0YS5zeXN0ZW1dLnJhdGlvO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGFuY2hvciAvIHRvVW5pdERhdGEuZmFjdG9yICogdG9GYWN0b3I7XG4gIGlmIChpc1RvUGl4ZWwgJiYgcm91bmRQaXhlbCkge1xuICAgIHJlc3VsdCA9IE1hdGgucm91bmQocmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwcmVjaXNpb24pKSB7XG4gICAgcmVzdWx0ID0gcm91bmQocmVzdWx0LCBwcmVjaXNpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydERpc3RhbmNlO1xubW9kdWxlLmV4cG9ydHMudW5pdHMgPSB1bml0cztcbiIsImltcG9ydCBwYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IGNvbnZlcnRMZW5ndGggZnJvbSAnY29udmVydC1sZW5ndGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQgKGRpbWVuc2lvbnMsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgaWYgKHR5cGVvZiBkaW1lbnNpb25zID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGtleSA9IGRpbWVuc2lvbnMudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIShrZXkgaW4gcGFwZXJTaXplcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGRpbWVuc2lvbiBwcmVzZXQgXCIke2RpbWVuc2lvbnN9XCIgaXMgbm90IHN1cHBvcnRlZCBvciBjb3VsZCBub3QgYmUgZm91bmQ7IHRyeSB1c2luZyBhNCwgYTMsIHBvc3RjYXJkLCBsZXR0ZXIsIGV0Yy5gKVxuICAgIH1cbiAgICBjb25zdCBwcmVzZXQgPSBwYXBlclNpemVzW2tleV07XG4gICAgcmV0dXJuIHByZXNldC5kaW1lbnNpb25zLm1hcChkID0+IHtcbiAgICAgIHJldHVybiBjb252ZXJ0RGlzdGFuY2UoZCwgcHJlc2V0LnVuaXRzLCB1bml0c1RvLCBwaXhlbHNQZXJJbmNoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERpc3RhbmNlIChkaW1lbnNpb24sIHVuaXRzRnJvbSA9ICdweCcsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoZGltZW5zaW9uLCB1bml0c0Zyb20sIHVuaXRzVG8sIHtcbiAgICBwaXhlbHNQZXJJbmNoLFxuICAgIHByZWNpc2lvbjogNCxcbiAgICByb3VuZFBpeGVsOiB0cnVlXG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQsIGNvbnZlcnREaXN0YW5jZSB9IGZyb20gJy4uL2Rpc3RhbmNlcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIsIGRlZmluZWQgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY2hlY2tJZkhhc0RpbWVuc2lvbnMgKHNldHRpbmdzKSB7XG4gIGlmICghc2V0dGluZ3MuZGltZW5zaW9ucykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHNldHRpbmdzLmRpbWVuc2lvbnMgPT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2V0dGluZ3MuZGltZW5zaW9ucykgJiYgc2V0dGluZ3MuZGltZW5zaW9ucy5sZW5ndGggPj0gMikgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50U2l6ZSAocHJvcHMsIHNldHRpbmdzKSB7XG4gIC8vIFdoZW4gbm8geyBkaW1lbnNpb24gfSBpcyBwYXNzZWQgaW4gbm9kZSwgd2UgZGVmYXVsdCB0byBIVE1MIGNhbnZhcyBzaXplXG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICByZXR1cm4gWyAzMDAsIDE1MCBdO1xuICB9XG5cbiAgbGV0IGVsZW1lbnQgPSBzZXR0aW5ncy5wYXJlbnQgfHwgd2luZG93O1xuXG4gIGlmIChlbGVtZW50ID09PSB3aW5kb3cgfHxcbiAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIFsgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCBdO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gWyB3aWR0aCwgaGVpZ2h0IF07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzaXplQ2FudmFzIChwcm9wcywgc2V0dGluZ3MpIHtcbiAgbGV0IHdpZHRoLCBoZWlnaHQ7XG4gIGxldCBzdHlsZVdpZHRoLCBzdHlsZUhlaWdodDtcbiAgbGV0IGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQ7XG5cbiAgY29uc3QgYnJvd3NlciA9IGlzQnJvd3NlcigpO1xuICBjb25zdCBkaW1lbnNpb25zID0gc2V0dGluZ3MuZGltZW5zaW9ucztcbiAgY29uc3QgaGFzRGltZW5zaW9ucyA9IGNoZWNrSWZIYXNEaW1lbnNpb25zKHNldHRpbmdzKTtcbiAgY29uc3QgZXhwb3J0aW5nID0gcHJvcHMuZXhwb3J0aW5nO1xuICBsZXQgc2NhbGVUb0ZpdCA9IGhhc0RpbWVuc2lvbnMgPyBzZXR0aW5ncy5zY2FsZVRvRml0ICE9PSBmYWxzZSA6IGZhbHNlO1xuICBsZXQgc2NhbGVUb1ZpZXcgPSAoIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSA/IHNldHRpbmdzLnNjYWxlVG9WaWV3IDogdHJ1ZTtcbiAgLy8gaW4gbm9kZSwgY2FuY2VsIGJvdGggb2YgdGhlc2Ugb3B0aW9uc1xuICBpZiAoIWJyb3dzZXIpIHNjYWxlVG9GaXQgPSBzY2FsZVRvVmlldyA9IGZhbHNlO1xuICBjb25zdCB1bml0cyA9IHNldHRpbmdzLnVuaXRzO1xuICBjb25zdCBwaXhlbHNQZXJJbmNoID0gKHR5cGVvZiBzZXR0aW5ncy5waXhlbHNQZXJJbmNoID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbHNQZXJJbmNoKSkgPyBzZXR0aW5ncy5waXhlbHNQZXJJbmNoIDogNzI7XG4gIGNvbnN0IGJsZWVkID0gZGVmaW5lZChzZXR0aW5ncy5ibGVlZCwgMCk7XG5cbiAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IGJyb3dzZXIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG4gIGNvbnN0IGJhc2VQaXhlbFJhdGlvID0gc2NhbGVUb1ZpZXcgPyBkZXZpY2VQaXhlbFJhdGlvIDogMTtcblxuICBsZXQgcGl4ZWxSYXRpbywgZXhwb3J0UGl4ZWxSYXRpbztcblxuICAvLyBJZiBhIHBpeGVsIHJhdGlvIGlzIHNwZWNpZmllZCwgd2Ugd2lsbCB1c2UgaXQuXG4gIC8vIE90aGVyd2lzZTpcbiAgLy8gIC0+IElmIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBiYXNlIHJhdGlvIChpLmUuIHNpemUgZm9yIGV4cG9ydClcbiAgLy8gIC0+IElmIG5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBkZXZpY2UgcmF0aW8gKGkuZS4gc2l6ZSBmb3Igc2NyZWVuKVxuICBpZiAodHlwZW9mIHNldHRpbmdzLnBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLnBpeGVsUmF0aW8pKSB7XG4gICAgLy8gV2hlbiB7IHBpeGVsUmF0aW8gfSBpcyBzcGVjaWZpZWQsIGl0J3MgYWxzbyB1c2VkIGFzIGRlZmF1bHQgZXhwb3J0UGl4ZWxSYXRpby5cbiAgICBwaXhlbFJhdGlvID0gc2V0dGluZ3MucGl4ZWxSYXRpbztcbiAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgICAgLy8gV2hlbiBhIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSB0aGUgYmFzZSByYXRpbyByYXRoZXIgdGhhbiBzY3JlZW4gcmF0aW9cbiAgICAgIHBpeGVsUmF0aW8gPSBiYXNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gYSBwaXhlbCByYXRpbyBvZiAxIHNvIHRoYXQgeW91IGVuZCB1cCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvblxuICAgICAgLy8geW91IHNwZWNpZmllZCwgaS5lLiBbIDUwMCwgNTAwIF0gaXMgZXhwb3J0ZWQgYXMgNTAweDUwMCBweFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIGFzc3VtZSBmdWxsLXNjcmVlbiByZXRpbmEgc2l6aW5nXG4gICAgICBwaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gc2NyZWVuIHBpeGVsIHJhdGlvLCBzbyB0aGF0IGl0J3MgbGlrZSB0YWtpbmcgYSBkZXZpY2Ugc2NyZWVuc2hvdFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xhbXAgcGl4ZWwgcmF0aW9cbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5tYXhQaXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5tYXhQaXhlbFJhdGlvKSkge1xuICAgIHBpeGVsUmF0aW8gPSBNYXRoLm1pbihzZXR0aW5ncy5tYXhQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBleHBvcnQgcGl4ZWwgcmF0aW9cbiAgaWYgKGV4cG9ydGluZykge1xuICAgIHBpeGVsUmF0aW8gPSBleHBvcnRQaXhlbFJhdGlvO1xuICB9XG5cbiAgLy8gcGFyZW50V2lkdGggPSB0eXBlb2YgcGFyZW50V2lkdGggPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzBdIDogcGFyZW50V2lkdGg7XG4gIC8vIHBhcmVudEhlaWdodCA9IHR5cGVvZiBwYXJlbnRIZWlnaHQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzFdIDogcGFyZW50SGVpZ2h0O1xuXG4gIGxldCBbIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQgXSA9IGdldFBhcmVudFNpemUocHJvcHMsIHNldHRpbmdzKTtcbiAgbGV0IHRyaW1XaWR0aCwgdHJpbUhlaWdodDtcblxuICAvLyBZb3UgY2FuIHNwZWNpZnkgYSBkaW1lbnNpb25zIGluIHBpeGVscyBvciBjbS9tL2luL2V0Y1xuICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0KGRpbWVuc2lvbnMsIHVuaXRzLCBwaXhlbHNQZXJJbmNoKTtcbiAgICBjb25zdCBoaWdoZXN0ID0gTWF0aC5tYXgocmVzdWx0WzBdLCByZXN1bHRbMV0pO1xuICAgIGNvbnN0IGxvd2VzdCA9IE1hdGgubWluKHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGxhbmRzY2FwZSA9IHNldHRpbmdzLm9yaWVudGF0aW9uID09PSAnbGFuZHNjYXBlJztcbiAgICAgIHdpZHRoID0gbGFuZHNjYXBlID8gaGlnaGVzdCA6IGxvd2VzdDtcbiAgICAgIGhlaWdodCA9IGxhbmRzY2FwZSA/IGxvd2VzdCA6IGhpZ2hlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gcmVzdWx0WzBdO1xuICAgICAgaGVpZ2h0ID0gcmVzdWx0WzFdO1xuICAgIH1cblxuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvLyBBcHBseSBibGVlZCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGluIHRoZSBzYW1lIHVuaXRzXG4gICAgd2lkdGggKz0gYmxlZWQgKiAyO1xuICAgIGhlaWdodCArPSBibGVlZCAqIDI7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBwYXJlbnRXaWR0aDtcbiAgICBoZWlnaHQgPSBwYXJlbnRIZWlnaHQ7XG4gICAgdHJpbVdpZHRoID0gd2lkdGg7XG4gICAgdHJpbUhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIC8vIFJlYWwgc2l6ZSBpbiBwaXhlbHMgYWZ0ZXIgUFBJIGlzIHRha2VuIGludG8gYWNjb3VudFxuICBsZXQgcmVhbFdpZHRoID0gd2lkdGg7XG4gIGxldCByZWFsSGVpZ2h0ID0gaGVpZ2h0O1xuICBpZiAoaGFzRGltZW5zaW9ucyAmJiB1bml0cykge1xuICAgIC8vIENvbnZlcnQgdG8gZGlnaXRhbC9waXhlbCB1bml0cyBpZiBuZWNlc3NhcnlcbiAgICByZWFsV2lkdGggPSBjb252ZXJ0RGlzdGFuY2Uod2lkdGgsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgICByZWFsSGVpZ2h0ID0gY29udmVydERpc3RhbmNlKGhlaWdodCwgdW5pdHMsICdweCcsIHBpeGVsc1BlckluY2gpO1xuICB9XG5cbiAgLy8gSG93IGJpZyB0byBzZXQgdGhlICd2aWV3JyBvZiB0aGUgY2FudmFzIGluIHRoZSBicm93c2VyIChpLmUuIHN0eWxlKVxuICBzdHlsZVdpZHRoID0gTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQocmVhbEhlaWdodCk7XG5cbiAgLy8gSWYgd2Ugd2lzaCB0byBzY2FsZSB0aGUgdmlldyB0byB0aGUgYnJvd3NlciB3aW5kb3dcbiAgaWYgKHNjYWxlVG9GaXQgJiYgIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSB7XG4gICAgY29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgY29uc3Qgd2luZG93QXNwZWN0ID0gcGFyZW50V2lkdGggLyBwYXJlbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2NhbGVUb0ZpdFBhZGRpbmcgPSBkZWZpbmVkKHNldHRpbmdzLnNjYWxlVG9GaXRQYWRkaW5nLCA0MCk7XG4gICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLnJvdW5kKHBhcmVudFdpZHRoIC0gc2NhbGVUb0ZpdFBhZGRpbmcgKiAyKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLnJvdW5kKHBhcmVudEhlaWdodCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgaWYgKHN0eWxlV2lkdGggPiBtYXhXaWR0aCB8fCBzdHlsZUhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgaWYgKHdpbmRvd0FzcGVjdCA+IGFzcGVjdCkge1xuICAgICAgICBzdHlsZUhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQoc3R5bGVIZWlnaHQgKiBhc3BlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQoc3R5bGVXaWR0aCAvIGFzcGVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FudmFzV2lkdGggPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbFdpZHRoKTtcbiAgY2FudmFzSGVpZ2h0ID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiByZWFsSGVpZ2h0KTtcblxuICBjb25zdCB2aWV3cG9ydFdpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1dpZHRoIC8gd2lkdGg7XG4gIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0hlaWdodCAvIGhlaWdodDtcblxuICAvLyBBc3NpZ24gdG8gY3VycmVudCBwcm9wc1xuICByZXR1cm4ge1xuICAgIGJsZWVkLFxuICAgIHBpeGVsUmF0aW8sXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGRpbWVuc2lvbnM6IFsgd2lkdGgsIGhlaWdodCBdLFxuICAgIHVuaXRzOiB1bml0cyB8fCAncHgnLFxuICAgIHNjYWxlWCxcbiAgICBzY2FsZVksXG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICB2aWV3cG9ydFdpZHRoLFxuICAgIHZpZXdwb3J0SGVpZ2h0LFxuICAgIGNhbnZhc1dpZHRoLFxuICAgIGNhbnZhc0hlaWdodCxcbiAgICB0cmltV2lkdGgsXG4gICAgdHJpbUhlaWdodCxcbiAgICBzdHlsZVdpZHRoLFxuICAgIHN0eWxlSGVpZ2h0XG4gIH07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGdldENhbnZhc0NvbnRleHRcbmZ1bmN0aW9uIGdldENhbnZhc0NvbnRleHQgKHR5cGUsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3Qgc3BlY2lmeSB0eXBlIHN0cmluZycpXG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnICYmICFvcHRzLmNhbnZhcykge1xuICAgIHJldHVybiBudWxsIC8vIGNoZWNrIGZvciBOb2RlXG4gIH1cblxuICB2YXIgY2FudmFzID0gb3B0cy5jYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcbiAgaWYgKHR5cGVvZiBvcHRzLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy53aWR0aCA9IG9wdHMud2lkdGhcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy5oZWlnaHQgPSBvcHRzLmhlaWdodFxuICB9XG5cbiAgdmFyIGF0dHJpYnMgPSBvcHRzXG4gIHZhciBnbFxuICB0cnkge1xuICAgIHZhciBuYW1lcyA9IFsgdHlwZSBdXG4gICAgLy8gcHJlZml4IEdMIGNvbnRleHRzXG4gICAgaWYgKHR5cGUuaW5kZXhPZignd2ViZ2wnKSA9PT0gMCkge1xuICAgICAgbmFtZXMucHVzaCgnZXhwZXJpbWVudGFsLScgKyB0eXBlKVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQobmFtZXNbaV0sIGF0dHJpYnMpXG4gICAgICBpZiAoZ2wpIHJldHVybiBnbFxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGdsID0gbnVsbFxuICB9XG4gIHJldHVybiAoZ2wgfHwgbnVsbCkgLy8gZW5zdXJlIG51bGwgb24gZmFpbFxufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBnZXRDYW52YXNDb250ZXh0IGZyb20gJ2dldC1jYW52YXMtY29udGV4dCc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzRWxlbWVudCAoKSB7XG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGFwcGVhcnMgeW91IGFyZSBydW5pbmcgZnJvbSBOb2RlLmpzIG9yIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuIFRyeSBwYXNzaW5nIGluIGFuIGV4aXN0aW5nIHsgY2FudmFzIH0gaW50ZXJmYWNlIGluc3RlYWQuJyk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDYW52YXMgKHNldHRpbmdzID0ge30pIHtcbiAgbGV0IGNvbnRleHQsIGNhbnZhcztcbiAgbGV0IG93bnNDYW52YXMgPSBmYWxzZTtcbiAgaWYgKHNldHRpbmdzLmNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAvLyBEZXRlcm1pbmUgdGhlIGNhbnZhcyBhbmQgY29udGV4dCB0byBjcmVhdGVcbiAgICBjb250ZXh0ID0gc2V0dGluZ3MuY29udGV4dDtcbiAgICBpZiAoIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbmV3Q2FudmFzID0gc2V0dGluZ3MuY2FudmFzO1xuICAgICAgaWYgKCFuZXdDYW52YXMpIHtcbiAgICAgICAgbmV3Q2FudmFzID0gY3JlYXRlQ2FudmFzRWxlbWVudCgpO1xuICAgICAgICBvd25zQ2FudmFzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0IHx8ICcyZCc7XG4gICAgICBpZiAodHlwZW9mIG5ld0NhbnZhcy5nZXRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNwZWNpZmllZCB7IGNhbnZhcyB9IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIGdldENvbnRleHQoKSBmdW5jdGlvbiwgbWF5YmUgaXQgaXMgbm90IGEgPGNhbnZhcz4gdGFnP2ApO1xuICAgICAgfVxuICAgICAgY29udGV4dCA9IGdldENhbnZhc0NvbnRleHQodHlwZSwgYXNzaWduKHt9LCBzZXR0aW5ncy5hdHRyaWJ1dGVzLCB7IGNhbnZhczogbmV3Q2FudmFzIH0pKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCBhdCBjYW52YXMuZ2V0Q29udGV4dCgnJHt0eXBlfScpIC0gdGhlIGJyb3dzZXIgbWF5IG5vdCBzdXBwb3J0IHRoaXMgY29udGV4dCwgb3IgYSBkaWZmZXJlbnQgY29udGV4dCBtYXkgYWxyZWFkeSBiZSBpbiB1c2Ugd2l0aCB0aGlzIGNhbnZhcy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYW52YXMgPSBjb250ZXh0LmNhbnZhcztcbiAgICAvLyBFbnN1cmUgY29udGV4dCBtYXRjaGVzIHVzZXIncyBjYW52YXMgZXhwZWN0YXRpb25zXG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyAmJiBjYW52YXMgIT09IHNldHRpbmdzLmNhbnZhcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgeyBjYW52YXMgfSBhbmQgeyBjb250ZXh0IH0gc2V0dGluZ3MgbXVzdCBwb2ludCB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGNhbnZhcyBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcGl4ZWxhdGlvbiB0byBjYW52YXMgaWYgbmVjZXNzYXJ5LCB0aGlzIGlzIG1vc3RseSBhIGNvbnZlbmllbmNlIHV0aWxpdHlcbiAgICBpZiAoc2V0dGluZ3MucGl4ZWxhdGVkKSB7XG4gICAgICBjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQub0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNhbnZhcy5zdHlsZVsnaW1hZ2UtcmVuZGVyaW5nJ10gPSAncGl4ZWxhdGVkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY2FudmFzLCBjb250ZXh0LCBvd25zQ2FudmFzIH07XG59XG4iLCJpbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IHJpZ2h0Tm93IGZyb20gJ3JpZ2h0LW5vdyc7XG5pbXBvcnQgaXNQcm9taXNlIGZyb20gJ2lzLXByb21pc2UnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkLCBpc1dlYkdMQ29udGV4dCwgaXNDYW52YXMsIGdldENsaWVudEFQSSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tICdkZWVwLWVxdWFsJztcbmltcG9ydCB7XG4gIHJlc29sdmVGaWxlbmFtZSxcbiAgc2F2ZUZpbGUsXG4gIHNhdmVEYXRhVVJMLFxuICBnZXRUaW1lU3RhbXAsXG4gIGV4cG9ydENhbnZhcyxcbiAgc3RyZWFtU3RhcnQsXG4gIHN0cmVhbUVuZFxufSBmcm9tICcuLi9zYXZlJztcbmltcG9ydCB7IGNoZWNrU2V0dGluZ3MgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcblxuaW1wb3J0IGtleWJvYXJkU2hvcnRjdXRzIGZyb20gJy4va2V5Ym9hcmRTaG9ydGN1dHMnO1xuaW1wb3J0IHJlc2l6ZUNhbnZhcyBmcm9tICcuL3Jlc2l6ZUNhbnZhcyc7XG5pbXBvcnQgY3JlYXRlQ2FudmFzIGZyb20gJy4vY3JlYXRlQ2FudmFzJztcblxuY2xhc3MgU2tldGNoTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHt9O1xuICAgIHRoaXMuX3Byb3BzID0ge307XG4gICAgdGhpcy5fc2tldGNoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JhZiA9IG51bGw7XG4gICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG5cbiAgICAvLyBTb21lIGhhY2t5IHRoaW5ncyByZXF1aXJlZCB0byBnZXQgYXJvdW5kIHA1LmpzIHN0cnVjdHVyZVxuICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faXNQNVJlc2l6aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cyA9IGtleWJvYXJkU2hvcnRjdXRzKHtcbiAgICAgIGVuYWJsZWQ6ICgpID0+IHRoaXMuc2V0dGluZ3MuaG90a2V5cyAhPT0gZmFsc2UsXG4gICAgICBzYXZlOiAoZXYpID0+IHtcbiAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJlY29yZCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5yZWNvcmQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHRoaXMucGF1c2UoKTtcbiAgICAgICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgICAgIH0sXG4gICAgICBjb21taXQ6IChldikgPT4ge1xuICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKHsgY29tbWl0OiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYW5pbWF0ZUhhbmRsZXIgPSAoKSA9PiB0aGlzLmFuaW1hdGUoKTtcblxuICAgIHRoaXMuX3Jlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5yZXNpemUoKTtcbiAgICAgIC8vIE9ubHkgcmUtcmVuZGVyIHdoZW4gc2l6ZSBhY3R1YWxseSBjaGFuZ2VzXG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgc2tldGNoICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tldGNoO1xuICB9XG5cbiAgZ2V0IHNldHRpbmdzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XG4gIH1cblxuICBnZXQgcHJvcHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgfVxuXG4gIF9jb21wdXRlUGxheWhlYWQgKGN1cnJlbnRUaW1lLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgcmV0dXJuIGhhc0R1cmF0aW9uID8gY3VycmVudFRpbWUgLyBkdXJhdGlvbiA6IDA7XG4gIH1cblxuICBfY29tcHV0ZUZyYW1lIChwbGF5aGVhZCwgdGltZSwgdG90YWxGcmFtZXMsIGZwcykge1xuICAgIHJldHVybiAoaXNGaW5pdGUodG90YWxGcmFtZXMpICYmIHRvdGFsRnJhbWVzID4gMSlcbiAgICAgID8gTWF0aC5mbG9vcihwbGF5aGVhZCAqICh0b3RhbEZyYW1lcyAtIDEpKVxuICAgICAgOiBNYXRoLmZsb29yKGZwcyAqIHRpbWUpO1xuICB9XG5cbiAgX2NvbXB1dGVDdXJyZW50RnJhbWUgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wdXRlRnJhbWUoXG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkLCB0aGlzLnByb3BzLnRpbWUsXG4gICAgICB0aGlzLnByb3BzLnRvdGFsRnJhbWVzLCB0aGlzLnByb3BzLmZwc1xuICAgICk7XG4gIH1cblxuICBfZ2V0U2l6ZVByb3BzICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICAgICAgcGl4ZWxSYXRpbzogcHJvcHMucGl4ZWxSYXRpbyxcbiAgICAgIGNhbnZhc1dpZHRoOiBwcm9wcy5jYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodDogcHJvcHMuY2FudmFzSGVpZ2h0LFxuICAgICAgdmlld3BvcnRXaWR0aDogcHJvcHMudmlld3BvcnRXaWR0aCxcbiAgICAgIHZpZXdwb3J0SGVpZ2h0OiBwcm9wcy52aWV3cG9ydEhlaWdodFxuICAgIH07XG4gIH1cblxuICBydW4gKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignc2hvdWxkIHdhaXQgdW50aWwgc2tldGNoIGlzIGxvYWRlZCBiZWZvcmUgdHJ5aW5nIHRvIHBsYXkoKScpO1xuXG4gICAgLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyYW1lIGxvb3AgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucGxheWluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucGxheSgpO1xuICAgIH1cblxuICAgIC8vIExldCdzIGxldCB0aGlzIHdhcm5pbmcgaGFuZyBhcm91bmQgZm9yIGEgZmV3IHZlcnNpb25zLi4uXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0luIGNhbnZhcy1za2V0Y2hAMC4wLjIzIHRoZSBkaXNwb3NlKCkgZXZlbnQgaGFzIGJlZW4gcmVuYW1lZCB0byB1bmxvYWQoKScpO1xuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugd2UgYXJlbid0IHBsYXlpbmcgb3IgYW5pbWF0ZWQsIG1ha2Ugc3VyZSB3ZSBzdGlsbCB0cmlnZ2VyIGJlZ2luIG1lc3NhZ2UuLi5cbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGFuIGluaXRpYWwgZnJhbWVcbiAgICB0aGlzLnRpY2soKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2NhbmNlbFRpbWVvdXRzICgpIHtcbiAgICBpZiAodGhpcy5fcmFmICE9IG51bGwgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZik7XG4gICAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVjb3JkVGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVjb3JkVGltZW91dCk7XG4gICAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwbGF5ICgpIHtcbiAgICBsZXQgYW5pbWF0ZSA9IHRoaXMuc2V0dGluZ3MuYW5pbWF0ZTtcbiAgICBpZiAoJ2FuaW1hdGlvbicgaW4gdGhpcy5zZXR0aW5ncykge1xuICAgICAgYW5pbWF0ZSA9IHRydWU7XG4gICAgICBjb25zb2xlLndhcm4oJ1tjYW52YXMtc2tldGNoXSB7IGFuaW1hdGlvbiB9IGhhcyBiZWVuIHJlbmFtZWQgdG8geyBhbmltYXRlIH0nKTtcbiAgICB9XG4gICAgaWYgKCFhbmltYXRlKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IFVzaW5nIHsgYW5pbWF0ZSB9IGluIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygncGxheScsIHRoaXMucHJvcHMudGltZSlcblxuICAgIC8vIFN0YXJ0IGEgcmVuZGVyIGxvb3BcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5fbGFzdFRpbWUgPSByaWdodE5vdygpO1xuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuICB9XG5cbiAgcGF1c2UgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gIH1cblxuICB0b2dnbGVQbGF5ICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgfVxuXG4gIC8vIFN0b3AgYW5kIHJlc2V0IHRvIGZyYW1lIHplcm9cbiAgc3RvcCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMucHJvcHMuZnJhbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSAwO1xuICAgIHRoaXMucHJvcHMudGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZWNvcmQgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBSZWNvcmRpbmcgZnJvbSBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByb3BzLnJlY29yZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBleHBvcnRPcHRzID0gdGhpcy5fY3JlYXRlRXhwb3J0T3B0aW9ucyh7IHNlcXVlbmNlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEgLyB0aGlzLnByb3BzLmZwcztcbiAgICAvLyBSZW5kZXIgZWFjaCBmcmFtZSBpbiB0aGUgc2VxdWVuY2VcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICB0aGlzLnRpY2soKTtcbiAgICAgIHJldHVybiB0aGlzLmV4cG9ydEZyYW1lKGV4cG9ydE9wdHMpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm47IC8vIHdhcyBjYW5jZWxsZWQgYmVmb3JlXG4gICAgICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgICAgICAgIHRoaXMucHJvcHMuZnJhbWUrKztcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5mcmFtZSA8IHRoaXMucHJvcHMudG90YWxGcmFtZXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGltZSArPSBmcmFtZUludGVydmFsO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aGlzLnByb3BzLnRpbWUsIHRoaXMucHJvcHMuZHVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IHNldFRpbWVvdXQodGljaywgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaW5pc2hlZCByZWNvcmRpbmcnKTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBUcmlnZ2VyIGEgc3RhcnQgZXZlbnQgYmVmb3JlIHdlIGJlZ2luIHJlY29yZGluZ1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyICdiZWdpbiByZWNvcmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZChwcm9wcykpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYXRlIGEgc3RyZWFtaW5nIHN0YXJ0IGlmIG5lY2Vzc2FyeVxuICAgIHN0cmVhbVN0YXJ0KGV4cG9ydE9wdHMpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX3NpZ25hbEJlZ2luICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmJlZ2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmJlZ2luKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgX3NpZ25hbEVuZCAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guZW5kKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgZW5kUmVjb3JkICgpIHtcbiAgICBjb25zdCB3YXNSZWNvcmRpbmcgPSB0aGlzLnByb3BzLnJlY29yZGluZztcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICAvLyB0ZWxsIENMSSB0aGF0IHN0cmVhbSBoYXMgZmluaXNoZWRcbiAgICByZXR1cm4gc3RyZWFtRW5kKClcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBUcmlnZ2VyICdlbmQgcmVjb3JkJyBldmVudFxuICAgICAgICBpZiAod2FzUmVjb3JkaW5nICYmIHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZFJlY29yZChwcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVFeHBvcnRPcHRpb25zIChvcHQgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXF1ZW5jZTogb3B0LnNlcXVlbmNlLFxuICAgICAgc2F2ZTogb3B0LnNhdmUsXG4gICAgICBmcHM6IHRoaXMucHJvcHMuZnBzLFxuICAgICAgZnJhbWU6IG9wdC5zZXF1ZW5jZSA/IHRoaXMucHJvcHMuZnJhbWUgOiB1bmRlZmluZWQsXG4gICAgICBmaWxlOiB0aGlzLnNldHRpbmdzLmZpbGUsXG4gICAgICBuYW1lOiB0aGlzLnNldHRpbmdzLm5hbWUsXG4gICAgICBwcmVmaXg6IHRoaXMuc2V0dGluZ3MucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLnNldHRpbmdzLnN1ZmZpeCxcbiAgICAgIGVuY29kaW5nOiB0aGlzLnNldHRpbmdzLmVuY29kaW5nLFxuICAgICAgZW5jb2RpbmdRdWFsaXR5OiB0aGlzLnNldHRpbmdzLmVuY29kaW5nUXVhbGl0eSxcbiAgICAgIHRpbWVTdGFtcDogb3B0LnRpbWVTdGFtcCB8fCBnZXRUaW1lU3RhbXAoKSxcbiAgICAgIHRvdGFsRnJhbWVzOiBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA/IE1hdGgubWF4KDAsIHRoaXMucHJvcHMudG90YWxGcmFtZXMpIDogMTAwMFxuICAgIH07XG4gIH1cblxuICBleHBvcnRGcmFtZSAob3B0ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm4gUHJvbWlzZS5hbGwoW10pO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucHJlRXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnNrZXRjaC5wcmVFeHBvcnQoKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zIGZvciBleHBvcnQgZnVuY3Rpb25cbiAgICBsZXQgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMob3B0KTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGxldCBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGNsaWVudCAmJiBvcHQuY29tbWl0ICYmIHR5cGVvZiBjbGllbnQuY29tbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBjb21taXRPcHRzID0gYXNzaWduKHt9LCBleHBvcnRPcHRzKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBjbGllbnQuY29tbWl0KGNvbW1pdE9wdHMpO1xuICAgICAgaWYgKGlzUHJvbWlzZShoYXNoKSkgcCA9IGhhc2g7XG4gICAgICBlbHNlIHAgPSBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAudGhlbihoYXNoID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9kb0V4cG9ydEZyYW1lKGFzc2lnbih7fSwgZXhwb3J0T3B0cywgeyBoYXNoOiBoYXNoIHx8ICcnIH0pKTtcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAvLyBNb3N0IGNvbW1vbiB1c2VjYXNlIGlzIHRvIGV4cG9ydCBhIHNpbmdsZSBsYXllcixcbiAgICAgIC8vIHNvIGxldCdzIG9wdGltaXplIHRoZSB1c2VyIGV4cGVyaWVuY2UgZm9yIHRoYXQuXG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIHJlc3VsdFswXTtcbiAgICAgIGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIF9kb0V4cG9ydEZyYW1lIChleHBvcnRPcHRzID0ge30pIHtcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSB0cnVlO1xuXG4gICAgLy8gUmVzaXplIHRvIG91dHB1dCByZXNvbHV0aW9uXG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIC8vIERyYXcgYXQgdGhpcyBvdXRwdXQgcmVzb2x1dGlvblxuICAgIGxldCBkcmF3UmVzdWx0ID0gdGhpcy5yZW5kZXIoKTtcblxuICAgIC8vIFRoZSBzZWxmIG93bmVkIGNhbnZhcyAobWF5IGJlIHVuZGVmaW5lZC4uLiEpXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5wcm9wcy5jYW52YXM7XG5cbiAgICAvLyBHZXQgbGlzdCBvZiByZXN1bHRzIGZyb20gcmVuZGVyXG4gICAgaWYgKHR5cGVvZiBkcmF3UmVzdWx0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IFsgY2FudmFzIF07XG4gICAgfVxuICAgIGRyYXdSZXN1bHQgPSBbXS5jb25jYXQoZHJhd1Jlc3VsdCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBjYW52YXMvZmlsZSBkZXNjcmlwdG9ycyBpbnRvIGEgY29uc2lzdGVudCBmb3JtYXQsXG4gICAgLy8gYW5kIHB1bGwgb3V0IGFueSBkYXRhIFVSTHMgZnJvbSBjYW52YXMgZWxlbWVudHNcbiAgICBkcmF3UmVzdWx0ID0gZHJhd1Jlc3VsdC5tYXAocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGhhc0RhdGFPYmplY3QgPSB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgKCdkYXRhJyBpbiByZXN1bHQgfHwgJ2RhdGFVUkwnIGluIHJlc3VsdCk7XG4gICAgICBjb25zdCBkYXRhID0gaGFzRGF0YU9iamVjdCA/IHJlc3VsdC5kYXRhIDogcmVzdWx0O1xuICAgICAgY29uc3Qgb3B0cyA9IGhhc0RhdGFPYmplY3QgPyBhc3NpZ24oe30sIHJlc3VsdCwgeyBkYXRhIH0pIDogeyBkYXRhIH07XG4gICAgICBpZiAoaXNDYW52YXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nIHx8IGV4cG9ydE9wdHMuZW5jb2Rpbmc7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nUXVhbGl0eSA9IGRlZmluZWQob3B0cy5lbmNvZGluZ1F1YWxpdHksIGV4cG9ydE9wdHMuZW5jb2RpbmdRdWFsaXR5LCAwLjk1KTtcbiAgICAgICAgY29uc3QgeyBkYXRhVVJMLCBleHRlbnNpb24sIHR5cGUgfSA9IGV4cG9ydENhbnZhcyhkYXRhLCB7IGVuY29kaW5nLCBlbmNvZGluZ1F1YWxpdHkgfSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9wdHMsIHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBOb3cgcmV0dXJuIHRvIHJlZ3VsYXIgcmVuZGVyaW5nIG1vZGVcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBBbmQgbm93IHdlIGNhbiBzYXZlIGVhY2ggcmVzdWx0XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRyYXdSZXN1bHQubWFwKChyZXN1bHQsIGksIGxheWVyTGlzdCkgPT4ge1xuICAgICAgLy8gQnkgZGVmYXVsdCwgaWYgcmVuZGVyaW5nIG11bHRpcGxlIGxheWVycyB3ZSB3aWxsIGdpdmUgdGhlbSBpbmRpY2VzXG4gICAgICBjb25zdCBjdXJPcHQgPSBhc3NpZ24oe1xuICAgICAgICBleHRlbnNpb246ICcnLFxuICAgICAgICBwcmVmaXg6ICcnLFxuICAgICAgICBzdWZmaXg6ICcnXG4gICAgICB9LCBleHBvcnRPcHRzLCByZXN1bHQsIHtcbiAgICAgICAgbGF5ZXI6IGksXG4gICAgICAgIHRvdGFsTGF5ZXJzOiBsYXllckxpc3QubGVuZ3RoXG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgZXhwb3J0IGlzIGV4cGxpY2l0bHkgbm90IHNhdmluZywgbWFrZSBzdXJlIG5vdGhpbmcgc2F2ZXNcbiAgICAgIC8vIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBsYXllciBzYXZlIG9wdGlvbiwgb3IgZmFsbGJhY2sgdG8gdHJ1ZVxuICAgICAgY29uc3Qgc2F2ZVBhcmFtID0gZXhwb3J0T3B0cy5zYXZlID09PSBmYWxzZSA/IGZhbHNlIDogcmVzdWx0LnNhdmU7XG4gICAgICBjdXJPcHQuc2F2ZSA9IHNhdmVQYXJhbSAhPT0gZmFsc2U7XG5cbiAgICAgIC8vIFJlc29sdmUgYSBmdWxsIGZpbGVuYW1lIGZyb20gYWxsIHRoZSBvcHRpb25zXG4gICAgICBjdXJPcHQuZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoY3VyT3B0KTtcblxuICAgICAgLy8gQ2xlYW4gdXAgc29tZSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIGFtYmlndW91cyB0byB0aGUgdXNlclxuICAgICAgZGVsZXRlIGN1ck9wdC5lbmNvZGluZztcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2RpbmdRdWFsaXR5O1xuXG4gICAgICAvLyBDbGVhbiBpdCB1cCBmdXJ0aGVyIGJ5IGp1c3QgcmVtb3ZpbmcgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgZm9yIChsZXQgayBpbiBjdXJPcHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJPcHRba10gPT09ICd1bmRlZmluZWQnKSBkZWxldGUgY3VyT3B0W2tdO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2F2ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgaWYgKGN1ck9wdC5zYXZlKSB7XG4gICAgICAgIC8vIFdoZXRoZXIgdG8gYWN0dWFsbHkgc2F2ZSAoZG93bmxvYWQpIHRoaXMgZnJhZ21lbnRcbiAgICAgICAgY29uc3QgZGF0YSA9IGN1ck9wdC5kYXRhO1xuICAgICAgICBpZiAoY3VyT3B0LmRhdGFVUkwpIHtcbiAgICAgICAgICBjb25zdCBkYXRhVVJMID0gY3VyT3B0LmRhdGFVUkw7XG4gICAgICAgICAgc2F2ZVByb21pc2UgPSBzYXZlRGF0YVVSTChkYXRhVVJMLCBjdXJPcHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZUZpbGUoZGF0YSwgY3VyT3B0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNhdmVQcm9taXNlLnRoZW4oc2F2ZVJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjdXJPcHQsIHNhdmVSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSkpLnRoZW4oZXYgPT4ge1xuICAgICAgY29uc3Qgc2F2ZWRFdmVudHMgPSBldi5maWx0ZXIoZSA9PiBlLnNhdmUpO1xuICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gTG9nIHRoZSBzYXZlZCBleHBvcnRzXG4gICAgICAgIGNvbnN0IGV2ZW50V2l0aE91dHB1dCA9IHNhdmVkRXZlbnRzLmZpbmQoZSA9PiBlLm91dHB1dE5hbWUpO1xuICAgICAgICBjb25zdCBpc0NsaWVudCA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLmNsaWVudCk7XG4gICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gc2F2ZWRFdmVudHMuc29tZShlID0+IGUuc3RyZWFtKTtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIC8vIG1hbnkgZmlsZXMsIGp1c3QgbG9nIGhvdyBtYW55IHdlcmUgZXhwb3J0ZWRcbiAgICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDEpIGl0ZW0gPSBzYXZlZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgIC8vIGluIENMSSwgd2Uga25vdyBleGFjdCBwYXRoIGRpcm5hbWVcbiAgICAgICAgZWxzZSBpZiAoZXZlbnRXaXRoT3V0cHV0KSBpdGVtID0gYCR7ZXZlbnRXaXRoT3V0cHV0Lm91dHB1dE5hbWV9LyR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgLy8gaW4gYnJvd3Nlciwgd2UgY2FuIG9ubHkga25vdyBpdCB3ZW50IHRvIFwiYnJvd3NlciBkb3dubG9hZCBmb2xkZXJcIlxuICAgICAgICBlbHNlIGl0ZW0gPSBgJHtzYXZlZEV2ZW50c1swXS5maWxlbmFtZX1gO1xuICAgICAgICBsZXQgb2ZTZXEgPSAnJztcbiAgICAgICAgaWYgKGV4cG9ydE9wdHMuc2VxdWVuY2UpIHtcbiAgICAgICAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IGlzRmluaXRlKHRoaXMucHJvcHMudG90YWxGcmFtZXMpO1xuICAgICAgICAgIG9mU2VxID0gaGFzVG90YWxGcmFtZXMgPyBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWUgKyAxfSAvICR7dGhpcy5wcm9wcy50b3RhbEZyYW1lc30pYCA6IGAgKGZyYW1lICR7ZXhwb3J0T3B0cy5mcmFtZX0pYDtcbiAgICAgICAgfSBlbHNlIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgb2ZTZXEgPSBgIGZpbGVzYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnQgPSBpc0NsaWVudCA/ICdjYW52YXMtc2tldGNoLWNsaScgOiAnY2FudmFzLXNrZXRjaCc7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGlzU3RyZWFtaW5nID8gJ1N0cmVhbWluZyBpbnRvJyA6ICdFeHBvcnRlZCc7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1ske2NsaWVudH1dJWMgJHthY3Rpb259ICVjJHtpdGVtfSVjJHtvZlNlcX1gLCAnY29sb3I6ICM4ZThlOGU7JywgJ2NvbG9yOiBpbml0aWFsOycsICdmb250LXdlaWdodDogYm9sZDsnLCAnZm9udC13ZWlnaHQ6IGluaXRpYWw7Jyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5za2V0Y2gucG9zdEV4cG9ydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2O1xuICAgIH0pO1xuICB9XG5cbiAgX3dyYXBDb250ZXh0U2NhbGUgKGNiKSB7XG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICB9XG5cbiAgX3ByZVJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gU2NhbGUgY29udGV4dCBmb3IgdW5pdCBzaXppbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuZ2wgJiYgcHJvcHMuY29udGV4dCAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2NhbGVDb250ZXh0ICE9PSBmYWxzZSkge1xuICAgICAgICBwcm9wcy5jb250ZXh0LnNjYWxlKHByb3BzLnNjYWxlWCwgcHJvcHMuc2NhbGVZKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5wNS5zY2FsZShwcm9wcy5zY2FsZVggLyBwcm9wcy5waXhlbFJhdGlvLCBwcm9wcy5zY2FsZVkgLyBwcm9wcy5waXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICBfcG9zdFJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICAvLyBGbHVzaCBieSBkZWZhdWx0LCB0aGlzIG1heSBiZSByZXZpc2l0ZWQgYXQgYSBsYXRlciBwb2ludC5cbiAgICAvLyBXZSBkbyB0aGlzIHRvIGVuc3VyZSB0b0RhdGFVUkwgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlci5cbiAgICAvLyBNb3N0IGxpa2VseSBicm93c2VycyBhbHJlYWR5IGhhbmRsZSB0aGlzLCBzbyB3ZSBtYXkgcmV2aXNpdCB0aGlzIGFuZFxuICAgIC8vIHJlbW92ZSBpdCBpZiBpdCBpbXByb3ZlcyBwZXJmb3JtYW5jZSB3aXRob3V0IGFueSB1c2FiaWxpdHkgaXNzdWVzLlxuICAgIGlmIChwcm9wcy5nbCAmJiB0aGlzLnNldHRpbmdzLmZsdXNoICE9PSBmYWxzZSAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmdsLmZsdXNoKCk7XG4gICAgfVxuICB9XG5cbiAgdGljayAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC50aWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl9wcmVSZW5kZXIoKTtcbiAgICAgIHRoaXMuc2tldGNoLnRpY2sodGhpcy5wcm9wcyk7XG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wNSkge1xuICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMucDUucmVkcmF3KCk7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXREcmF3Q2FsbCAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IGRyYXdSZXN1bHQ7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gdGhpcy5za2V0Y2gocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoLnJlbmRlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgcmV0dXJuIGRyYXdSZXN1bHQ7XG4gIH1cblxuICB1cGRhdGUgKG9wdCA9IHt9KSB7XG4gICAgLy8gQ3VycmVudGx5IHVwZGF0ZSgpIGlzIG9ubHkgZm9jdXNlZCBvbiByZXNpemluZyxcbiAgICAvLyBidXQgbGF0ZXIgd2Ugd2lsbCBzdXBwb3J0IG90aGVyIG9wdGlvbnMgbGlrZSBzd2l0Y2hpbmdcbiAgICAvLyBmcmFtZXMgYW5kIHN1Y2guXG4gICAgY29uc3Qgbm90WWV0U3VwcG9ydGVkID0gW1xuICAgICAgJ2FuaW1hdGUnXG4gICAgXTtcblxuICAgIE9iamVjdC5rZXlzKG9wdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKG5vdFlldFN1cHBvcnRlZC5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvcnJ5LCB0aGUgeyAke2tleX0gfSBvcHRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCB1cGRhdGUoKS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9sZENhbnZhcyA9IHRoaXMuX3NldHRpbmdzLmNhbnZhcztcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5fc2V0dGluZ3MuY29udGV4dDtcblxuICAgIC8vIE1lcmdlIG5ldyBvcHRpb25zIGludG8gc2V0dGluZ3NcbiAgICBmb3IgKGxldCBrZXkgaW4gb3B0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdFtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gaWdub3JlIHVuZGVmaW5lZFxuICAgICAgICB0aGlzLl9zZXR0aW5nc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgaW4gdGltZSBwcm9wc1xuICAgIGNvbnN0IHRpbWVPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fc2V0dGluZ3MsIG9wdCk7XG4gICAgaWYgKCd0aW1lJyBpbiBvcHQgJiYgJ2ZyYW1lJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgdGltZSB9IG9yIHsgZnJhbWUgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgndGltZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZnJhbWU7XG4gICAgZWxzZSBpZiAoJ2ZyYW1lJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50aW1lO1xuICAgIGlmICgnZHVyYXRpb24nIGluIG9wdCAmJiAndG90YWxGcmFtZXMnIGluIG9wdCkgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgeyBkdXJhdGlvbiB9IG9yIHsgdG90YWxGcmFtZXMgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgnZHVyYXRpb24nIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLnRvdGFsRnJhbWVzO1xuICAgIGVsc2UgaWYgKCd0b3RhbEZyYW1lcycgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZHVyYXRpb247XG5cbiAgICAvLyBNZXJnZSBpbiB1c2VyIGRhdGEgd2l0aG91dCBjb3B5aW5nXG4gICAgaWYgKCdkYXRhJyBpbiBvcHQpIHRoaXMuX3Byb3BzLmRhdGEgPSBvcHQuZGF0YTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRpbWVPcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCB0aW1lUHJvcHMpO1xuXG4gICAgLy8gSWYgZWl0aGVyIGNhbnZhcyBvciBjb250ZXh0IGlzIGNoYW5nZWQsIHdlIHNob3VsZCByZS11cGRhdGVcbiAgICBpZiAob2xkQ2FudmFzICE9PSB0aGlzLl9zZXR0aW5ncy5jYW52YXMgfHwgb2xkQ29udGV4dCAhPT0gdGhpcy5fc2V0dGluZ3MuY29udGV4dCkge1xuICAgICAgY29uc3QgeyBjYW52YXMsIGNvbnRleHQgfSA9IGNyZWF0ZUNhbnZhcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMucHJvcHMuY2FudmFzID0gY2FudmFzO1xuICAgICAgdGhpcy5wcm9wcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgLy8gRGVsZXRlIG9yIGFkZCBhICdnbCcgcHJvcCBmb3IgY29udmVuaWVuY2VcbiAgICAgIHRoaXMuX3NldHVwR0xLZXkoKTtcblxuICAgICAgLy8gUmUtbW91bnQgdGhlIG5ldyBjYW52YXMgaWYgaXQgaGFzIG5vIHBhcmVudFxuICAgICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gc3VwcG9ydCBQNS5qc1xuICAgIGlmIChvcHQucDUgJiYgdHlwZW9mIG9wdC5wNSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5wNSA9IG9wdC5wNTtcbiAgICAgIHRoaXMucHJvcHMucDUuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUDVSZXNpemluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdGhpcy5zdWJtaXREcmF3Q2FsbCgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGxheWluZyBzdGF0ZSBpZiBuZWNlc3NhcnlcbiAgICBpZiAoJ3BsYXlpbmcnIGluIG9wdCkge1xuICAgICAgaWYgKG9wdC5wbGF5aW5nKSB0aGlzLnBsYXkoKTtcbiAgICAgIGVsc2UgdGhpcy5wYXVzZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gRHJhdyBuZXcgZnJhbWVcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XG4gIH1cblxuICByZXNpemUgKCkge1xuICAgIGNvbnN0IG9sZFNpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3M7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gUmVjb21wdXRlIG5ldyBwcm9wZXJ0aWVzIGJhc2VkIG9uIGN1cnJlbnQgc2V0dXBcbiAgICBjb25zdCBuZXdQcm9wcyA9IHJlc2l6ZUNhbnZhcyhwcm9wcywgc2V0dGluZ3MpO1xuXG4gICAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAvLyBOb3cgd2UgYWN0dWFsbHkgdXBkYXRlIHRoZSBjYW52YXMgd2lkdGgvaGVpZ2h0IGFuZCBzdHlsZSBwcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIHBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodCxcbiAgICAgIHN0eWxlV2lkdGgsXG4gICAgICBzdHlsZUhlaWdodFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gVXBkYXRlIGNhbnZhcyBzZXR0aW5nc1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuICAgIGlmIChjYW52YXMgJiYgc2V0dGluZ3MucmVzaXplQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHByb3BzLnA1KSB7XG4gICAgICAgIC8vIFA1LmpzIHNwZWNpZmljIGVkZ2UgY2FzZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCB8fCBjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSB0cnVlO1xuICAgICAgICAgIC8vIFRoaXMgY2F1c2VzIGEgcmUtZHJhdyA6XFwgc28gd2UgaWdub3JlIGRyYXdzIGluIHRoZSBtZWFuIHRpbWUuLi4gc29ydGEgaGFja3lcbiAgICAgICAgICBwcm9wcy5wNS5waXhlbERlbnNpdHkocGl4ZWxSYXRpbyk7XG4gICAgICAgICAgcHJvcHMucDUucmVzaXplQ2FudmFzKGNhbnZhc1dpZHRoIC8gcGl4ZWxSYXRpbywgY2FudmFzSGVpZ2h0IC8gcGl4ZWxSYXRpbywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JjZSBjYW52YXMgc2l6ZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCkgY2FudmFzLndpZHRoID0gY2FudmFzV2lkdGg7XG4gICAgICAgIGlmIChjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgICB9XG4gICAgICAvLyBVcGRhdGUgY2FudmFzIHN0eWxlXG4gICAgICBpZiAoaXNCcm93c2VyKCkgJiYgc2V0dGluZ3Muc3R5bGVDYW52YXMgIT09IGZhbHNlKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3N0eWxlV2lkdGh9cHhgO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7c3R5bGVIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1NpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG4gICAgbGV0IGNoYW5nZWQgPSAhZGVlcEVxdWFsKG9sZFNpemVzLCBuZXdTaXplcyk7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgX3NpemVDaGFuZ2VkICgpIHtcbiAgICAvLyBTZW5kIHJlc2l6ZSBldmVudCB0byBza2V0Y2hcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLnJlc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucmVzaXplKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGUgKCkge1xuICAgIGlmICghdGhpcy5wcm9wcy5wbGF5aW5nKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IEFuaW1hdGlvbiBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuXG4gICAgbGV0IG5vdyA9IHJpZ2h0Tm93KCk7XG5cbiAgICBjb25zdCBmcHMgPSB0aGlzLnByb3BzLmZwcztcbiAgICBjb25zdCBmcmFtZUludGVydmFsTVMgPSAxMDAwIC8gZnBzO1xuICAgIGxldCBkZWx0YVRpbWVNUyA9IG5vdyAtIHRoaXMuX2xhc3RUaW1lO1xuXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLnByb3BzLmR1cmF0aW9uO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG5cbiAgICBsZXQgaXNOZXdGcmFtZSA9IHRydWU7XG4gICAgY29uc3QgcGxheWJhY2tSYXRlID0gdGhpcy5zZXR0aW5ncy5wbGF5YmFja1JhdGU7XG4gICAgaWYgKHBsYXliYWNrUmF0ZSA9PT0gJ2ZpeGVkJykge1xuICAgICAgZGVsdGFUaW1lTVMgPSBmcmFtZUludGVydmFsTVM7XG4gICAgfSBlbHNlIGlmIChwbGF5YmFja1JhdGUgPT09ICd0aHJvdHRsZScpIHtcbiAgICAgIGlmIChkZWx0YVRpbWVNUyA+IGZyYW1lSW50ZXJ2YWxNUykge1xuICAgICAgICBub3cgPSBub3cgLSAoZGVsdGFUaW1lTVMgJSBmcmFtZUludGVydmFsTVMpO1xuICAgICAgICB0aGlzLl9sYXN0VGltZSA9IG5vdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gZGVsdGFUaW1lTVMgLyAxMDAwO1xuICAgIGxldCBuZXdUaW1lID0gdGhpcy5wcm9wcy50aW1lICsgZGVsdGFUaW1lICogdGhpcy5wcm9wcy50aW1lU2NhbGU7XG5cbiAgICAvLyBIYW5kbGUgcmV2ZXJzZSB0aW1lIHNjYWxlXG4gICAgaWYgKG5ld1RpbWUgPCAwICYmIGhhc0R1cmF0aW9uKSB7XG4gICAgICBuZXdUaW1lID0gZHVyYXRpb24gKyBuZXdUaW1lO1xuICAgIH1cblxuICAgIC8vIFJlLXN0YXJ0IGFuaW1hdGlvblxuICAgIGxldCBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IGlzTG9vcFN0YXJ0ID0gZmFsc2U7XG5cbiAgICBjb25zdCBsb29waW5nID0gdGhpcy5zZXR0aW5ncy5sb29wICE9PSBmYWxzZTtcblxuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBuZXdUaW1lID49IGR1cmF0aW9uKSB7XG4gICAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICAgIGlmIChsb29waW5nKSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgICAgICBuZXdUaW1lID0gbmV3VGltZSAlIGR1cmF0aW9uO1xuICAgICAgICBpc0xvb3BTdGFydCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICAgIG5ld1RpbWUgPSBkdXJhdGlvbjtcbiAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgIH1cblxuICAgIGlmIChpc05ld0ZyYW1lKSB7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGRlbHRhVGltZTtcbiAgICAgIHRoaXMucHJvcHMudGltZSA9IG5ld1RpbWU7XG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKG5ld1RpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGNvbnN0IGxhc3RGcmFtZSA9IHRoaXMucHJvcHMuZnJhbWU7XG4gICAgICB0aGlzLnByb3BzLmZyYW1lID0gdGhpcy5fY29tcHV0ZUN1cnJlbnRGcmFtZSgpO1xuICAgICAgaWYgKGlzTG9vcFN0YXJ0KSB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgaWYgKGxhc3RGcmFtZSAhPT0gdGhpcy5wcm9wcy5mcmFtZSkgdGhpcy50aWNrKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIH1cblxuICAgIGlmIChpc0ZpbmlzaGVkKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2ggKGNiKSB7XG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHBhc3MgZnVuY3Rpb24gaW50byBkaXNwYXRjaCgpJyk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdW50ICgpIHtcbiAgICB0aGlzLl9hcHBlbmRDYW52YXNJZk5lZWRlZCgpO1xuICB9XG5cbiAgdW5tb3VudCAoKSB7XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplSGFuZGxlcik7XG4gICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5kZXRhY2goKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm9wcy5jYW52YXMpO1xuICAgIH1cbiAgfVxuXG4gIF9hcHBlbmRDYW52YXNJZk5lZWRlZCAoKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnBhcmVudCAhPT0gZmFsc2UgJiYgKHRoaXMucHJvcHMuY2FudmFzICYmICF0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSkge1xuICAgICAgY29uc3QgZGVmYXVsdFBhcmVudCA9IHRoaXMuc2V0dGluZ3MucGFyZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICBkZWZhdWx0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfc2V0dXBHTEtleSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY29udGV4dCkge1xuICAgICAgaWYgKGlzV2ViR0xDb250ZXh0KHRoaXMucHJvcHMuY29udGV4dCkpIHtcbiAgICAgICAgdGhpcy5fcHJvcHMuZ2wgPSB0aGlzLnByb3BzLmNvbnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJvcHMuZ2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGltZVByb3BzIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgLy8gR2V0IHRpbWluZyBkYXRhXG4gICAgbGV0IGR1cmF0aW9uID0gc2V0dGluZ3MuZHVyYXRpb247XG4gICAgbGV0IHRvdGFsRnJhbWVzID0gc2V0dGluZ3MudG90YWxGcmFtZXM7XG4gICAgY29uc3QgdGltZVNjYWxlID0gZGVmaW5lZChzZXR0aW5ncy50aW1lU2NhbGUsIDEpO1xuICAgIGNvbnN0IGZwcyA9IGRlZmluZWQoc2V0dGluZ3MuZnBzLCAyNCk7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IHR5cGVvZiB0b3RhbEZyYW1lcyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodG90YWxGcmFtZXMpO1xuXG4gICAgY29uc3QgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gPSBoYXNEdXJhdGlvbiA/IE1hdGguZmxvb3IoZnBzICogZHVyYXRpb24pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzID0gaGFzVG90YWxGcmFtZXMgPyAodG90YWxGcmFtZXMgLyBmcHMpIDogdW5kZWZpbmVkO1xuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBoYXNUb3RhbEZyYW1lcyAmJiB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiAhPT0gdG90YWxGcmFtZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBkdXJhdGlvbiBvciB0b3RhbEZyYW1lcywgYnV0IG5vdCBib3RoLiBPciwgdGhleSBtdXN0IG1hdGNoIGV4YWN0bHkuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2V0dGluZ3MudW5pdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFlvdSd2ZSBzcGVjaWZpZWQgYSB7IHVuaXRzIH0gc2V0dGluZyBidXQgbm8geyBkaW1lbnNpb24gfSwgc28gdGhlIHVuaXRzIHdpbGwgYmUgaWdub3JlZC5gKTtcbiAgICB9XG5cbiAgICB0b3RhbEZyYW1lcyA9IGRlZmluZWQodG90YWxGcmFtZXMsIHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uLCBJbmZpbml0eSk7XG4gICAgZHVyYXRpb24gPSBkZWZpbmVkKGR1cmF0aW9uLCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcywgSW5maW5pdHkpO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gc2V0dGluZ3MudGltZTtcbiAgICBjb25zdCBzdGFydEZyYW1lID0gc2V0dGluZ3MuZnJhbWU7XG4gICAgY29uc3QgaGFzU3RhcnRUaW1lID0gdHlwZW9mIHN0YXJ0VGltZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc3RhcnRUaW1lKTtcbiAgICBjb25zdCBoYXNTdGFydEZyYW1lID0gdHlwZW9mIHN0YXJ0RnJhbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0RnJhbWUpO1xuXG4gICAgLy8gc3RhcnQgYXQgemVybyB1bmxlc3MgdXNlciBzcGVjaWZpZXMgZnJhbWUgb3IgdGltZSAoYnV0IG5vdCBib3RoIG1pc21hdGNoZWQpXG4gICAgbGV0IHRpbWUgPSAwO1xuICAgIGxldCBmcmFtZSA9IDA7XG4gICAgbGV0IHBsYXloZWFkID0gMDtcbiAgICBpZiAoaGFzU3RhcnRUaW1lICYmIGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBzdGFydCBmcmFtZSBvciB0aW1lLCBidXQgbm90IGJvdGguJyk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydFRpbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIHRpbWUsIHdlIGluZmVyIGZyYW1lcyBmcm9tIEZQU1xuICAgICAgdGltZSA9IHN0YXJ0VGltZTtcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGZyYW1lID0gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgICBwbGF5aGVhZCwgdGltZSxcbiAgICAgICAgdG90YWxGcmFtZXMsIGZwc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIGZyYW1lIG51bWJlciwgd2UgaW5mZXIgdGltZSBmcm9tIEZQU1xuICAgICAgZnJhbWUgPSBzdGFydEZyYW1lO1xuICAgICAgdGltZSA9IGZyYW1lIC8gZnBzO1xuICAgICAgcGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGltZSwgZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwbGF5aGVhZCxcbiAgICAgIHRpbWUsXG4gICAgICBmcmFtZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdG90YWxGcmFtZXMsXG4gICAgICBmcHMsXG4gICAgICB0aW1lU2NhbGVcbiAgICB9O1xuICB9XG5cbiAgc2V0dXAgKHNldHRpbmdzID0ge30pIHtcbiAgICBpZiAodGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc2V0dXAoKSBjYWxscyBub3QgeWV0IHN1cHBvcnRlZC4nKTtcblxuICAgIHRoaXMuX3NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gR2V0IGluaXRpYWwgY2FudmFzICYgY29udGV4dFxuICAgIGNvbnN0IHsgY29udGV4dCwgY2FudmFzIH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgY29uc3QgdGltZVByb3BzID0gdGhpcy5nZXRUaW1lUHJvcHModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gSW5pdGlhbCByZW5kZXIgc3RhdGUgZmVhdHVyZXNcbiAgICB0aGlzLl9wcm9wcyA9IHtcbiAgICAgIC4uLnRpbWVQcm9wcyxcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWx0YVRpbWU6IDAsXG4gICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgICBwbGF5aW5nOiBmYWxzZSxcbiAgICAgIHJlY29yZGluZzogZmFsc2UsXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgIGRhdGE6IHRoaXMuc2V0dGluZ3MuZGF0YSxcblxuICAgICAgLy8gRXhwb3J0IHNvbWUgc3BlY2lmaWMgYWN0aW9ucyB0byB0aGUgc2tldGNoXG4gICAgICByZW5kZXI6ICgpID0+IHRoaXMucmVuZGVyKCksXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB0aGlzLnRvZ2dsZVBsYXkoKSxcbiAgICAgIGRpc3BhdGNoOiAoY2IpID0+IHRoaXMuZGlzcGF0Y2goY2IpLFxuICAgICAgdGljazogKCkgPT4gdGhpcy50aWNrKCksXG4gICAgICByZXNpemU6ICgpID0+IHRoaXMucmVzaXplKCksXG4gICAgICB1cGRhdGU6IChvcHQpID0+IHRoaXMudXBkYXRlKG9wdCksXG4gICAgICBleHBvcnRGcmFtZTogb3B0ID0+IHRoaXMuZXhwb3J0RnJhbWUob3B0KSxcbiAgICAgIHJlY29yZDogKCkgPT4gdGhpcy5yZWNvcmQoKSxcbiAgICAgIHBsYXk6ICgpID0+IHRoaXMucGxheSgpLFxuICAgICAgcGF1c2U6ICgpID0+IHRoaXMucGF1c2UoKSxcbiAgICAgIHN0b3A6ICgpID0+IHRoaXMuc3RvcCgpXG4gICAgfTtcblxuICAgIC8vIEZvciBXZWJHTCBza2V0Y2hlcywgYSBnbCB2YXJpYWJsZSByZWFkcyBhIGJpdCBiZXR0ZXJcbiAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAvLyBUcmlnZ2VyIGluaXRpYWwgcmVzaXplIG5vdyBzbyB0aGF0IGNhbnZhcyBpcyBhbHJlYWR5IHNpemVkXG4gICAgLy8gYnkgdGhlIHRpbWUgd2UgbG9hZCB0aGUgc2tldGNoXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgfVxuXG4gIGxvYWRBbmRSdW4gKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5ydW4oKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkICgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gudW5sb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLnVubG9hZChwcm9wcykpO1xuICAgIH1cbiAgICB0aGlzLl9za2V0Y2ggPSBudWxsO1xuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgICB0aGlzLnVubW91bnQoKTtcbiAgfVxuXG4gIGxvYWQgKGNyZWF0ZVNrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICAvLyBVc2VyIGRpZG4ndCBzcGVjaWZ5IGEgZnVuY3Rpb25cbiAgICBpZiAodHlwZW9mIGNyZWF0ZVNrZXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIGluIGEgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gRXhhbXBsZTpcXG4gIGNhbnZhc1NrZXRjaGVyKCgpID0+IHsgLi4uIH0sIHNldHRpbmdzKScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNrZXRjaCkge1xuICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld1NldHRpbmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy51cGRhdGUobmV3U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSB0cmlja3kgY2FzZTsgd2Ugc2V0IHVwIHRoZSBhdXRvLXNjYWxpbmcgaGVyZVxuICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZGVjaWRlcyB0byByZW5kZXIgYW55dGhpbmcgdG8gdGhlIGNvbnRleHQgKmJlZm9yZSogdGhlXG4gICAgLy8gcmVuZGVyKCkgZnVuY3Rpb24uLi4gSG93ZXZlciwgdXNlcnMgc2hvdWxkIGluc3RlYWQgdXNlIGJlZ2luKCkgZnVuY3Rpb24gZm9yIHRoYXQuXG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG5cbiAgICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgLy8gQmVjYXVzZSBvZiBQNS5qcydzIHVudXN1YWwgc3RydWN0dXJlLCB3ZSBoYXZlIHRvIGRvIGEgYml0IG9mXG4gICAgLy8gbGlicmFyeS1zcGVjaWZpYyBjaGFuZ2VzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHkuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucDUpIHtcbiAgICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbY2FudmFzLXNrZXRjaF0gRVJST1I6IFVzaW5nIHA1LmpzIGluIE5vZGUuanMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfVxuICAgICAgcHJlbG9hZCA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBsZXQgUDVDb25zdHJ1Y3RvciA9IHRoaXMuc2V0dGluZ3MucDU7XG4gICAgICAgIGxldCBwcmVsb2FkO1xuICAgICAgICBpZiAoUDVDb25zdHJ1Y3Rvci5wNSkge1xuICAgICAgICAgIHByZWxvYWQgPSBQNUNvbnN0cnVjdG9yLnByZWxvYWQ7XG4gICAgICAgICAgUDVDb25zdHJ1Y3RvciA9IFA1Q29uc3RydWN0b3IucDU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2tldGNoIHNldHVwOyBkaXNhYmxlIGxvb3AsIHNldCBzaXppbmcsIGV0Yy5cbiAgICAgICAgY29uc3QgcDVTa2V0Y2ggPSBwNSA9PiB7XG4gICAgICAgICAgLy8gSG9vayBpbiBwcmVsb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChwcmVsb2FkKSBwNS5wcmVsb2FkID0gKCkgPT4gcHJlbG9hZChwNSk7XG4gICAgICAgICAgcDUuc2V0dXAgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgICBjb25zdCBpc0dMID0gdGhpcy5zZXR0aW5ncy5jb250ZXh0ID09PSAnd2ViZ2wnO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBpc0dMID8gcDUuV0VCR0wgOiBwNS5QMkQ7XG4gICAgICAgICAgICBwNS5ub0xvb3AoKTtcbiAgICAgICAgICAgIHA1LnBpeGVsRGVuc2l0eShwcm9wcy5waXhlbFJhdGlvKTtcbiAgICAgICAgICAgIHA1LmNyZWF0ZUNhbnZhcyhwcm9wcy52aWV3cG9ydFdpZHRoLCBwcm9wcy52aWV3cG9ydEhlaWdodCwgcmVuZGVyZXIpO1xuICAgICAgICAgICAgaWYgKGlzR0wgJiYgdGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIHA1LnNldEF0dHJpYnV0ZXModGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBwNSwgY2FudmFzOiBwNS5jYW52YXMsIGNvbnRleHQ6IHA1Ll9yZW5kZXJlci5kcmF3aW5nQ29udGV4dCB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN1cHBvcnQgZ2xvYmFsIGFuZCBpbnN0YW5jZSBQNS5qcyBtb2Rlc1xuICAgICAgICBpZiAodHlwZW9mIFA1Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBuZXcgUDVDb25zdHJ1Y3RvcihwNVNrZXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuY3JlYXRlQ2FudmFzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ7IHA1IH0gc2V0dGluZyBpcyBwYXNzZWQgYnV0IGNhbid0IGZpbmQgcDUuanMgaW4gZ2xvYmFsICh3aW5kb3cpIHNjb3BlLiBNYXliZSB5b3UgZGlkIG5vdCBjcmVhdGUgaXQgZ2xvYmFsbHk/XFxubmV3IHA1KCk7IC8vIDwtLSBhdHRhY2hlcyB0byBnbG9iYWwgc2NvcGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHA1U2tldGNoKHdpbmRvdyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVsb2FkLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gTG9hZCB0aGUgdXNlcidzIHNrZXRjaFxuICAgICAgbGV0IGxvYWRlciA9IGNyZWF0ZVNrZXRjaCh0aGlzLnByb3BzKTtcbiAgICAgIGlmICghaXNQcm9taXNlKGxvYWRlcikpIHtcbiAgICAgICAgbG9hZGVyID0gUHJvbWlzZS5yZXNvbHZlKGxvYWRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9hZGVyO1xuICAgIH0pLnRoZW4oc2tldGNoID0+IHtcbiAgICAgIGlmICghc2tldGNoKSBza2V0Y2ggPSB7fTtcbiAgICAgIHRoaXMuX3NrZXRjaCA9IHNrZXRjaDtcblxuICAgICAgLy8gT25jZSB0aGUgc2tldGNoIGlzIGxvYWRlZCB3ZSBjYW4gYWRkIHRoZSBldmVudHNcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5hdHRhY2goKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG5cbiAgICAgIC8vIFRoZSBpbml0aWFsIHJlc2l6ZSgpIGluIHRoZSBjb25zdHJ1Y3RvciB3aWxsIG5vdCBoYXZlXG4gICAgICAvLyB0cmlnZ2VyZWQgYSByZXNpemUoKSBldmVudCBvbiB0aGUgc2tldGNoLCBzaW5jZSBpdCB3YXMgYmVmb3JlXG4gICAgICAvLyB0aGUgc2tldGNoIHdhcyBsb2FkZWQuIFNvIHdlIHNlbmQgdGhlIHNpZ25hbCBoZXJlLCBhbGxvd2luZ1xuICAgICAgLy8gdXNlcnMgdG8gcmVhY3QgdG8gdGhlIGluaXRpYWwgc2l6ZSBiZWZvcmUgZmlyc3QgcmVuZGVyLlxuICAgICAgdGhpcy5fc2l6ZUNoYW5nZWQoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzdGFydCBza2V0Y2gsIHRoZSBhc3luYyBsb2FkaW5nIGZ1bmN0aW9uIHJlamVjdGVkIHdpdGggYW4gZXJyb3I6XFxuICAgIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNrZXRjaE1hbmFnZXI7XG4iLCJpbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdCA9IHt9KSB7XG4gIGNvbnN0IGhhbmRsZXIgPSBldiA9PiB7XG4gICAgaWYgKCFvcHQuZW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoZXYua2V5Q29kZSA9PT0gODMgJiYgIWV2LmFsdEtleSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgU1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5zYXZlKGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAvLyBTcGFjZVxuICAgICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIHRoaXM/IGtlZXAgaXQsIG9yIHJlbW92ZSBpdD9cbiAgICAgIG9wdC50b2dnbGVQbGF5KGV2KTtcbiAgICB9IGVsc2UgaWYgKGNsaWVudCAmJiAhZXYuYWx0S2V5ICYmIGV2LmtleUNvZGUgPT09IDc1ICYmIChldi5tZXRhS2V5IHx8IGV2LmN0cmxLZXkpKSB7XG4gICAgICAvLyBDbWQgKyBLLCBvbmx5IHdoZW4gY2FudmFzLXNrZXRjaC1jbGkgaXMgdXNlZFxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5jb21taXQoZXYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdHRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGF0dGFjaCxcbiAgICBkZXRhY2hcbiAgfTtcbn1cbiIsImltcG9ydCBTa2V0Y2hNYW5hZ2VyIGZyb20gJy4vY29yZS9Ta2V0Y2hNYW5hZ2VyJztcbmltcG9ydCBQYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QVBJLCBkZWZpbmVkIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgQ0FDSEUgPSAnaG90LWlkLWNhY2hlJztcbmNvbnN0IHJ1bnRpbWVDb2xsaXNpb25zID0gW107XG5cbmZ1bmN0aW9uIGlzSG90UmVsb2FkICgpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIHJldHVybiBjbGllbnQgJiYgY2xpZW50LmhvdDtcbn1cblxuZnVuY3Rpb24gY2FjaGVHZXQgKGlkKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIHJldHVybiBjbGllbnRbQ0FDSEVdW2lkXTtcbn1cblxuZnVuY3Rpb24gY2FjaGVQdXQgKGlkLCBkYXRhKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIGNsaWVudFtDQUNIRV1baWRdID0gZGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZVByb3AgKG9sZE1hbmFnZXIsIG5ld1NldHRpbmdzKSB7XG4gIC8vIFN0YXRpYyBza2V0Y2hlcyBpZ25vcmUgdGhlIHRpbWUgcGVyc2lzdGVuY3lcbiAgcmV0dXJuIG5ld1NldHRpbmdzLmFuaW1hdGUgPyB7IHRpbWU6IG9sZE1hbmFnZXIucHJvcHMudGltZSB9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYW52YXNTa2V0Y2ggKHNrZXRjaCwgc2V0dGluZ3MgPSB7fSkge1xuICBpZiAoc2V0dGluZ3MucDUpIHtcbiAgICBpZiAoc2V0dGluZ3MuY2FudmFzIHx8IChzZXR0aW5ncy5jb250ZXh0ICYmIHR5cGVvZiBzZXR0aW5ncy5jb250ZXh0ICE9PSAnc3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW4geyBwNSB9IG1vZGUsIHlvdSBjYW4ndCBwYXNzIHlvdXIgb3duIGNhbnZhcyBvciBjb250ZXh0LCB1bmxlc3MgdGhlIGNvbnRleHQgaXMgYSBcIndlYmdsXCIgb3IgXCIyZFwiIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIC8vIERvIG5vdCBjcmVhdGUgYSBjYW52YXMgb24gc3RhcnR1cCwgc2luY2UgUDUuanMgZG9lcyB0aGF0IGZvciB1c1xuICAgIGNvbnN0IGNvbnRleHQgPSB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCA9PT0gJ3N0cmluZycgPyBzZXR0aW5ncy5jb250ZXh0IDogZmFsc2U7XG4gICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgeyBjYW52YXM6IGZhbHNlLCBjb250ZXh0IH0pO1xuICB9XG5cbiAgY29uc3QgaXNIb3QgPSBpc0hvdFJlbG9hZCgpO1xuICBsZXQgaG90SUQ7XG4gIGlmIChpc0hvdCkge1xuICAgIC8vIFVzZSBhIG1hZ2ljIG5hbWUgYnkgZGVmYXVsdCwgZm9yY2UgdXNlciB0byBkZWZpbmUgZWFjaCBza2V0Y2ggaWYgdGhleVxuICAgIC8vIHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBpbiBhbiBhcHBsaWNhdGlvbi4gT3BlbiB0byBvdGhlciBpZGVhcyBvbiBob3cgdG8gdGFja2xlXG4gICAgLy8gdGhpcyBhcyB3ZWxsLi4uXG4gICAgaG90SUQgPSBkZWZpbmVkKHNldHRpbmdzLmlkLCAnJF9fREVGQVVMVF9DQU5WQVNfU0tFVENIX0lEX18kJyk7XG4gIH1cbiAgbGV0IGlzSW5qZWN0aW5nID0gaXNIb3QgJiYgdHlwZW9mIGhvdElEID09PSAnc3RyaW5nJztcblxuICBpZiAoaXNJbmplY3RpbmcgJiYgcnVudGltZUNvbGxpc2lvbnMuaW5jbHVkZXMoaG90SUQpKSB7XG4gICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBZb3UgaGF2ZSBtdWx0aXBsZSBjYWxscyB0byBjYW52YXNTa2V0Y2goKSBpbiAtLWhvdCBtb2RlLiBZb3UgbXVzdCBwYXNzIHVuaXF1ZSB7IGlkIH0gc3RyaW5ncyBpbiBzZXR0aW5ncyB0byBlbmFibGUgaG90IHJlbG9hZCBhY3Jvc3MgbXVsdGlwbGUgc2tldGNoZXMuIGAsIGhvdElEKTtcbiAgICBpc0luamVjdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAvLyBNYXJrIHRoaXMgYXMgYWxyZWFkeSBzcG90dGVkIGluIHRoaXMgcnVudGltZSBpbnN0YW5jZVxuICAgIHJ1bnRpbWVDb2xsaXNpb25zLnB1c2goaG90SUQpO1xuXG4gICAgY29uc3QgcHJldmlvdXNEYXRhID0gY2FjaGVHZXQoaG90SUQpO1xuICAgIGlmIChwcmV2aW91c0RhdGEpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vIEdyYWIgbmV3IHByb3BzIGZyb20gb2xkIHNrZXRjaCBpbnN0YW5jZVxuICAgICAgICBjb25zdCBuZXdQcm9wcyA9IGdldFRpbWVQcm9wKHByZXZpb3VzRGF0YS5tYW5hZ2VyLCBzZXR0aW5ncyk7XG4gICAgICAgIC8vIERlc3Ryb3kgdGhlIG9sZCBpbnN0YW5jZVxuICAgICAgICBwcmV2aW91c0RhdGEubWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIC8vIFBhc3MgYWxvbmcgbmV3IHByb3BzXG4gICAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vdmUgYWxvbmcgdGhlIG5leHQgZGF0YS4uLlxuICAgICAgcHJlbG9hZCA9IHByZXZpb3VzRGF0YS5sb2FkLnRoZW4obmV4dCkuY2F0Y2gobmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZWxvYWQudGhlbihuZXdQcm9wcyA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTa2V0Y2hNYW5hZ2VyKCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2tldGNoKSB7XG4gICAgICAvLyBNZXJnZSB3aXRoIGluY29taW5nIGRhdGFcbiAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIG5ld1Byb3BzKTtcblxuICAgICAgLy8gQXBwbHkgc2V0dGluZ3MgYW5kIGNyZWF0ZSBhIGNhbnZhc1xuICAgICAgbWFuYWdlci5zZXR1cChzZXR0aW5ncyk7XG5cbiAgICAgIC8vIE1vdW50IHRvIERPTVxuICAgICAgbWFuYWdlci5tb3VudCgpO1xuXG4gICAgICAvLyBsb2FkIHRoZSBza2V0Y2ggZmlyc3RcbiAgICAgIHJlc3VsdCA9IG1hbmFnZXIubG9hZEFuZFJ1bihza2V0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBQcm9taXNlLnJlc29sdmUobWFuYWdlcik7XG4gICAgfVxuICAgIGlmIChpc0luamVjdGluZykge1xuICAgICAgY2FjaGVQdXQoaG90SUQsIHsgbG9hZDogcmVzdWx0LCBtYW5hZ2VyIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuLy8gVE9ETzogRmlndXJlIG91dCBhIG5pY2Ugd2F5IHRvIGV4cG9ydCB0aGluZ3MuXG5jYW52YXNTa2V0Y2guY2FudmFzU2tldGNoID0gY2FudmFzU2tldGNoO1xuY2FudmFzU2tldGNoLlBhcGVyU2l6ZXMgPSBQYXBlclNpemVzO1xuXG5leHBvcnQgZGVmYXVsdCBjYW52YXNTa2V0Y2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lZCgpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHNbaV07XG5cdFx0fVxuXHR9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHdpZHRoID0gMjU2Oy8vIGVhY2ggUkM0IG91dHB1dCBpcyAwIDw9IHggPCAyNTZcclxudmFyIGNodW5rcyA9IDY7Ly8gYXQgbGVhc3Qgc2l4IFJDNCBvdXRwdXRzIGZvciBlYWNoIGRvdWJsZVxyXG52YXIgZGlnaXRzID0gNTI7Ly8gdGhlcmUgYXJlIDUyIHNpZ25pZmljYW50IGRpZ2l0cyBpbiBhIGRvdWJsZVxyXG52YXIgcG9vbCA9IFtdOy8vIHBvb2w6IGVudHJvcHkgcG9vbCBzdGFydHMgZW1wdHlcclxudmFyIEdMT0JBTCA9IHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xyXG5cclxuLy9cclxuLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlbGF0ZWQgdG8gSUVFRSA3NTQgbGltaXRzLlxyXG4vL1xyXG52YXIgc3RhcnRkZW5vbSA9IE1hdGgucG93KHdpZHRoLCBjaHVua3MpLFxyXG4gICAgc2lnbmlmaWNhbmNlID0gTWF0aC5wb3coMiwgZGlnaXRzKSxcclxuICAgIG92ZXJmbG93ID0gc2lnbmlmaWNhbmNlICogMixcclxuICAgIG1hc2sgPSB3aWR0aCAtIDE7XHJcblxyXG5cclxudmFyIG9sZFJhbmRvbSA9IE1hdGgucmFuZG9tO1xyXG5cclxuLy9cclxuLy8gc2VlZHJhbmRvbSgpXHJcbi8vIFRoaXMgaXMgdGhlIHNlZWRyYW5kb20gZnVuY3Rpb24gZGVzY3JpYmVkIGFib3ZlLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHNlZWQsIG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdsb2JhbCA9PT0gdHJ1ZSkge1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSBmYWxzZTtcclxuICAgIE1hdGgucmFuZG9tID0gbW9kdWxlLmV4cG9ydHMoc2VlZCwgb3B0aW9ucyk7XHJcbiAgICBvcHRpb25zLmdsb2JhbCA9IHRydWU7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb207XHJcbiAgfVxyXG4gIHZhciB1c2VfZW50cm9weSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW50cm9weSkgfHwgZmFsc2U7XHJcbiAgdmFyIGtleSA9IFtdO1xyXG5cclxuICAvLyBGbGF0dGVuIHRoZSBzZWVkIHN0cmluZyBvciBidWlsZCBvbmUgZnJvbSBsb2NhbCBlbnRyb3B5IGlmIG5lZWRlZC5cclxuICB2YXIgc2hvcnRzZWVkID0gbWl4a2V5KGZsYXR0ZW4oXHJcbiAgICB1c2VfZW50cm9weSA/IFtzZWVkLCB0b3N0cmluZyhwb29sKV0gOlxyXG4gICAgMCBpbiBhcmd1bWVudHMgPyBzZWVkIDogYXV0b3NlZWQoKSwgMyksIGtleSk7XHJcblxyXG4gIC8vIFVzZSB0aGUgc2VlZCB0byBpbml0aWFsaXplIGFuIEFSQzQgZ2VuZXJhdG9yLlxyXG4gIHZhciBhcmM0ID0gbmV3IEFSQzQoa2V5KTtcclxuXHJcbiAgLy8gTWl4IHRoZSByYW5kb21uZXNzIGludG8gYWNjdW11bGF0ZWQgZW50cm9weS5cclxuICBtaXhrZXkodG9zdHJpbmcoYXJjNC5TKSwgcG9vbCk7XHJcblxyXG4gIC8vIE92ZXJyaWRlIE1hdGgucmFuZG9tXHJcblxyXG4gIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHJhbmRvbSBkb3VibGUgaW4gWzAsIDEpIHRoYXQgY29udGFpbnNcclxuICAvLyByYW5kb21uZXNzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgbWFudGlzc2Egb2YgdGhlIElFRUUgNzU0IHZhbHVlLlxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgLy8gQ2xvc3VyZSB0byByZXR1cm4gYSByYW5kb20gZG91YmxlOlxyXG4gICAgdmFyIG4gPSBhcmM0LmcoY2h1bmtzKSwgICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG51bWVyYXRvciBuIDwgMiBeIDQ4XHJcbiAgICAgICAgZCA9IHN0YXJ0ZGVub20sICAgICAgICAgICAgICAgICAvLyAgIGFuZCBkZW5vbWluYXRvciBkID0gMiBeIDQ4LlxyXG4gICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhbmQgbm8gJ2V4dHJhIGxhc3QgYnl0ZScuXHJcbiAgICB3aGlsZSAobiA8IHNpZ25pZmljYW5jZSkgeyAgICAgICAgICAvLyBGaWxsIHVwIGFsbCBzaWduaWZpY2FudCBkaWdpdHMgYnlcclxuICAgICAgbiA9IChuICsgeCkgKiB3aWR0aDsgICAgICAgICAgICAgIC8vICAgc2hpZnRpbmcgbnVtZXJhdG9yIGFuZFxyXG4gICAgICBkICo9IHdpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBkZW5vbWluYXRvciBhbmQgZ2VuZXJhdGluZyBhXHJcbiAgICAgIHggPSBhcmM0LmcoMSk7ICAgICAgICAgICAgICAgICAgICAvLyAgIG5ldyBsZWFzdC1zaWduaWZpY2FudC1ieXRlLlxyXG4gICAgfVxyXG4gICAgd2hpbGUgKG4gPj0gb3ZlcmZsb3cpIHsgICAgICAgICAgICAgLy8gVG8gYXZvaWQgcm91bmRpbmcgdXAsIGJlZm9yZSBhZGRpbmdcclxuICAgICAgbiAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbGFzdCBieXRlLCBzaGlmdCBldmVyeXRoaW5nXHJcbiAgICAgIGQgLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHJpZ2h0IHVzaW5nIGludGVnZXIgTWF0aCB1bnRpbFxyXG4gICAgICB4ID4+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3ZSBoYXZlIGV4YWN0bHkgdGhlIGRlc2lyZWQgYml0cy5cclxuICAgIH1cclxuICAgIHJldHVybiAobiArIHgpIC8gZDsgICAgICAgICAgICAgICAgIC8vIEZvcm0gdGhlIG51bWJlciB3aXRoaW4gWzAsIDEpLlxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZXNldEdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcclxuICBNYXRoLnJhbmRvbSA9IG9sZFJhbmRvbTtcclxufTtcclxuXHJcbi8vXHJcbi8vIEFSQzRcclxuLy9cclxuLy8gQW4gQVJDNCBpbXBsZW1lbnRhdGlvbi4gIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhIGtleSBpbiB0aGUgZm9ybSBvZlxyXG4vLyBhbiBhcnJheSBvZiBhdCBtb3N0ICh3aWR0aCkgaW50ZWdlcnMgdGhhdCBzaG91bGQgYmUgMCA8PSB4IDwgKHdpZHRoKS5cclxuLy9cclxuLy8gVGhlIGcoY291bnQpIG1ldGhvZCByZXR1cm5zIGEgcHNldWRvcmFuZG9tIGludGVnZXIgdGhhdCBjb25jYXRlbmF0ZXNcclxuLy8gdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGZyb20gQVJDNC4gIEl0cyByZXR1cm4gdmFsdWUgaXMgYSBudW1iZXIgeFxyXG4vLyB0aGF0IGlzIGluIHRoZSByYW5nZSAwIDw9IHggPCAod2lkdGggXiBjb3VudCkuXHJcbi8vXHJcbi8qKiBAY29uc3RydWN0b3IgKi9cclxuZnVuY3Rpb24gQVJDNChrZXkpIHtcclxuICB2YXIgdCwga2V5bGVuID0ga2V5Lmxlbmd0aCxcclxuICAgICAgbWUgPSB0aGlzLCBpID0gMCwgaiA9IG1lLmkgPSBtZS5qID0gMCwgcyA9IG1lLlMgPSBbXTtcclxuXHJcbiAgLy8gVGhlIGVtcHR5IGtleSBbXSBpcyB0cmVhdGVkIGFzIFswXS5cclxuICBpZiAoIWtleWxlbikgeyBrZXkgPSBba2V5bGVuKytdOyB9XHJcblxyXG4gIC8vIFNldCB1cCBTIHVzaW5nIHRoZSBzdGFuZGFyZCBrZXkgc2NoZWR1bGluZyBhbGdvcml0aG0uXHJcbiAgd2hpbGUgKGkgPCB3aWR0aCkge1xyXG4gICAgc1tpXSA9IGkrKztcclxuICB9XHJcbiAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcclxuICAgIHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyBrZXlbaSAlIGtleWxlbl0gKyAodCA9IHNbaV0pKV07XHJcbiAgICBzW2pdID0gdDtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBcImdcIiBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgYXMgb25lIG51bWJlci5cclxuICAobWUuZyA9IGZ1bmN0aW9uKGNvdW50KSB7XHJcbiAgICAvLyBVc2luZyBpbnN0YW5jZSBtZW1iZXJzIGluc3RlYWQgb2YgY2xvc3VyZSBzdGF0ZSBuZWFybHkgZG91YmxlcyBzcGVlZC5cclxuICAgIHZhciB0LCByID0gMCxcclxuICAgICAgICBpID0gbWUuaSwgaiA9IG1lLmosIHMgPSBtZS5TO1xyXG4gICAgd2hpbGUgKGNvdW50LS0pIHtcclxuICAgICAgdCA9IHNbaSA9IG1hc2sgJiAoaSArIDEpXTtcclxuICAgICAgciA9IHIgKiB3aWR0aCArIHNbbWFzayAmICgoc1tpXSA9IHNbaiA9IG1hc2sgJiAoaiArIHQpXSkgKyAoc1tqXSA9IHQpKV07XHJcbiAgICB9XHJcbiAgICBtZS5pID0gaTsgbWUuaiA9IGo7XHJcbiAgICByZXR1cm4gcjtcclxuICAgIC8vIEZvciByb2J1c3QgdW5wcmVkaWN0YWJpbGl0eSBkaXNjYXJkIGFuIGluaXRpYWwgYmF0Y2ggb2YgdmFsdWVzLlxyXG4gICAgLy8gU2VlIGh0dHA6Ly93d3cucnNhLmNvbS9yc2FsYWJzL25vZGUuYXNwP2lkPTIwMDlcclxuICB9KSh3aWR0aCk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIGZsYXR0ZW4oKVxyXG4vLyBDb252ZXJ0cyBhbiBvYmplY3QgdHJlZSB0byBuZXN0ZWQgYXJyYXlzIG9mIHN0cmluZ3MuXHJcbi8vXHJcbmZ1bmN0aW9uIGZsYXR0ZW4ob2JqLCBkZXB0aCkge1xyXG4gIHZhciByZXN1bHQgPSBbXSwgdHlwID0gKHR5cGVvZiBvYmopWzBdLCBwcm9wO1xyXG4gIGlmIChkZXB0aCAmJiB0eXAgPT0gJ28nKSB7XHJcbiAgICBmb3IgKHByb3AgaW4gb2JqKSB7XHJcbiAgICAgIHRyeSB7IHJlc3VsdC5wdXNoKGZsYXR0ZW4ob2JqW3Byb3BdLCBkZXB0aCAtIDEpKTsgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIChyZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogdHlwID09ICdzJyA/IG9iaiA6IG9iaiArICdcXDAnKTtcclxufVxyXG5cclxuLy9cclxuLy8gbWl4a2V5KClcclxuLy8gTWl4ZXMgYSBzdHJpbmcgc2VlZCBpbnRvIGEga2V5IHRoYXQgaXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGFuZFxyXG4vLyByZXR1cm5zIGEgc2hvcnRlbmVkIHN0cmluZyBzZWVkIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgcmVzdWx0IGtleS5cclxuLy9cclxuZnVuY3Rpb24gbWl4a2V5KHNlZWQsIGtleSkge1xyXG4gIHZhciBzdHJpbmdzZWVkID0gc2VlZCArICcnLCBzbWVhciwgaiA9IDA7XHJcbiAgd2hpbGUgKGogPCBzdHJpbmdzZWVkLmxlbmd0aCkge1xyXG4gICAga2V5W21hc2sgJiBqXSA9XHJcbiAgICAgIG1hc2sgJiAoKHNtZWFyIF49IGtleVttYXNrICYgal0gKiAxOSkgKyBzdHJpbmdzZWVkLmNoYXJDb2RlQXQoaisrKSk7XHJcbiAgfVxyXG4gIHJldHVybiB0b3N0cmluZyhrZXkpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBhdXRvc2VlZCgpXHJcbi8vIFJldHVybnMgYW4gb2JqZWN0IGZvciBhdXRvc2VlZGluZywgdXNpbmcgd2luZG93LmNyeXB0byBpZiBhdmFpbGFibGUuXHJcbi8vXHJcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXk9fSBzZWVkICovXHJcbmZ1bmN0aW9uIGF1dG9zZWVkKHNlZWQpIHtcclxuICB0cnkge1xyXG4gICAgR0xPQkFMLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoc2VlZCA9IG5ldyBVaW50OEFycmF5KHdpZHRoKSk7XHJcbiAgICByZXR1cm4gdG9zdHJpbmcoc2VlZCk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIFsrbmV3IERhdGUsIEdMT0JBTCwgR0xPQkFMLm5hdmlnYXRvciAmJiBHTE9CQUwubmF2aWdhdG9yLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIEdMT0JBTC5zY3JlZW4sIHRvc3RyaW5nKHBvb2wpXTtcclxuICB9XHJcbn1cclxuXHJcbi8vXHJcbi8vIHRvc3RyaW5nKClcclxuLy8gQ29udmVydHMgYW4gYXJyYXkgb2YgY2hhcmNvZGVzIHRvIGEgc3RyaW5nXHJcbi8vXHJcbmZ1bmN0aW9uIHRvc3RyaW5nKGEpIHtcclxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLCBhKTtcclxufVxyXG5cclxuLy9cclxuLy8gV2hlbiBzZWVkcmFuZG9tLmpzIGlzIGxvYWRlZCwgd2UgaW1tZWRpYXRlbHkgbWl4IGEgZmV3IGJpdHNcclxuLy8gZnJvbSB0aGUgYnVpbHQtaW4gUk5HIGludG8gdGhlIGVudHJvcHkgcG9vbC4gIEJlY2F1c2Ugd2UgZG9cclxuLy8gbm90IHdhbnQgdG8gaW50ZWZlcmUgd2l0aCBkZXRlcm1pbnN0aWMgUFJORyBzdGF0ZSBsYXRlcixcclxuLy8gc2VlZHJhbmRvbSB3aWxsIG5vdCBjYWxsIE1hdGgucmFuZG9tIG9uIGl0cyBvd24gYWdhaW4gYWZ0ZXJcclxuLy8gaW5pdGlhbGl6YXRpb24uXHJcbi8vXHJcbm1peGtleShNYXRoLnJhbmRvbSgpLCBwb29sKTtcclxuIiwiLypcbiAqIEEgZmFzdCBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHNpbXBsZXggbm9pc2UgYnkgSm9uYXMgV2FnbmVyXG5cbkJhc2VkIG9uIGEgc3BlZWQtaW1wcm92ZWQgc2ltcGxleCBub2lzZSBhbGdvcml0aG0gZm9yIDJELCAzRCBhbmQgNEQgaW4gSmF2YS5cbldoaWNoIGlzIGJhc2VkIG9uIGV4YW1wbGUgY29kZSBieSBTdGVmYW4gR3VzdGF2c29uIChzdGVndUBpdG4ubGl1LnNlKS5cbldpdGggT3B0aW1pc2F0aW9ucyBieSBQZXRlciBFYXN0bWFuIChwZWFzdG1hbkBkcml6emxlLnN0YW5mb3JkLmVkdSkuXG5CZXR0ZXIgcmFuayBvcmRlcmluZyBtZXRob2QgYnkgU3RlZmFuIEd1c3RhdnNvbiBpbiAyMDEyLlxuXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTggSm9uYXMgV2FnbmVyXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIEYyID0gMC41ICogKE1hdGguc3FydCgzLjApIC0gMS4wKTtcbiAgdmFyIEcyID0gKDMuMCAtIE1hdGguc3FydCgzLjApKSAvIDYuMDtcbiAgdmFyIEYzID0gMS4wIC8gMy4wO1xuICB2YXIgRzMgPSAxLjAgLyA2LjA7XG4gIHZhciBGNCA9IChNYXRoLnNxcnQoNS4wKSAtIDEuMCkgLyA0LjA7XG4gIHZhciBHNCA9ICg1LjAgLSBNYXRoLnNxcnQoNS4wKSkgLyAyMC4wO1xuXG4gIGZ1bmN0aW9uIFNpbXBsZXhOb2lzZShyYW5kb21PclNlZWQpIHtcbiAgICB2YXIgcmFuZG9tO1xuICAgIGlmICh0eXBlb2YgcmFuZG9tT3JTZWVkID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJhbmRvbSA9IHJhbmRvbU9yU2VlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZG9tT3JTZWVkKSB7XG4gICAgICByYW5kb20gPSBhbGVhKHJhbmRvbU9yU2VlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgIH1cbiAgICB0aGlzLnAgPSBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKTtcbiAgICB0aGlzLnBlcm0gPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgIHRoaXMucGVybU1vZDEyID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgICB0aGlzLnBlcm1baV0gPSB0aGlzLnBbaSAmIDI1NV07XG4gICAgICB0aGlzLnBlcm1Nb2QxMltpXSA9IHRoaXMucGVybVtpXSAlIDEyO1xuICAgIH1cblxuICB9XG4gIFNpbXBsZXhOb2lzZS5wcm90b3R5cGUgPSB7XG4gICAgZ3JhZDM6IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDAsXG4gICAgICAtMSwgMSwgMCxcbiAgICAgIDEsIC0xLCAwLFxuXG4gICAgICAtMSwgLTEsIDAsXG4gICAgICAxLCAwLCAxLFxuICAgICAgLTEsIDAsIDEsXG5cbiAgICAgIDEsIDAsIC0xLFxuICAgICAgLTEsIDAsIC0xLFxuICAgICAgMCwgMSwgMSxcblxuICAgICAgMCwgLTEsIDEsXG4gICAgICAwLCAxLCAtMSxcbiAgICAgIDAsIC0xLCAtMV0pLFxuICAgIGdyYWQ0OiBuZXcgRmxvYXQzMkFycmF5KFswLCAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSxcbiAgICAgIDAsIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSxcbiAgICAgIDEsIDAsIDEsIDEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgMSwgMSwgMCwgLTEsIC0xLFxuICAgICAgLTEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLCAxLCAtMSwgMCwgLTEsIC0xLFxuICAgICAgMSwgMSwgMCwgMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAxLCAxLCAtMSwgMCwgLTEsXG4gICAgICAtMSwgMSwgMCwgMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDAsIDEsIC0xLCAtMSwgMCwgLTEsXG4gICAgICAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSwgMCxcbiAgICAgIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSwgMF0pLFxuICAgIG5vaXNlMkQ6IGZ1bmN0aW9uKHhpbiwgeWluKSB7XG4gICAgICB2YXIgcGVybU1vZDEyID0gdGhpcy5wZXJtTW9kMTI7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkMyA9IHRoaXMuZ3JhZDM7XG4gICAgICB2YXIgbjAgPSAwOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciBuMSA9IDA7XG4gICAgICB2YXIgbjIgPSAwO1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluKSAqIEYyOyAvLyBIYWlyeSBmYWN0b3IgZm9yIDJEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaikgKiBHMjtcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSkgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIHgwID0geGluIC0gWDA7IC8vIFRoZSB4LHkgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIC8vIEZvciB0aGUgMkQgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgKG1pZGRsZSkgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaikgY29vcmRzXG4gICAgICBpZiAoeDAgPiB5MCkge1xuICAgICAgICBpMSA9IDE7XG4gICAgICAgIGoxID0gMDtcbiAgICAgIH0gLy8gbG93ZXIgdHJpYW5nbGUsIFhZIG9yZGVyOiAoMCwwKS0+KDEsMCktPigxLDEpXG4gICAgICBlbHNlIHtcbiAgICAgICAgaTEgPSAwO1xuICAgICAgICBqMSA9IDE7XG4gICAgICB9IC8vIHVwcGVyIHRyaWFuZ2xlLCBZWCBvcmRlcjogKDAsMCktPigwLDEpLT4oMSwxKVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDApIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoMS1jLC1jKSBpbiAoeCx5KSwgYW5kXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSkgaW4gKGksaikgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMpIGluICh4LHkpLCB3aGVyZVxuICAgICAgLy8gYyA9ICgzLXNxcnQoMykpLzZcbiAgICAgIHZhciB4MSA9IHgwIC0gaTEgKyBHMjsgLy8gT2Zmc2V0cyBmb3IgbWlkZGxlIGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMjtcbiAgICAgIHZhciB4MiA9IHgwIC0gMS4wICsgMi4wICogRzI7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkpIHVuc2tld2VkIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSAxLjAgKyAyLjAgKiBHMjtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgdGhyZWUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNSAtIHgwICogeDAgLSB5MCAqIHkwO1xuICAgICAgaWYgKHQwID49IDApIHtcbiAgICAgICAgdmFyIGdpMCA9IHBlcm1Nb2QxMltpaSArIHBlcm1bampdXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCk7IC8vICh4LHkpIG9mIGdyYWQzIHVzZWQgZm9yIDJEIGdyYWRpZW50XG4gICAgICB9XG4gICAgICB2YXIgdDEgPSAwLjUgLSB4MSAqIHgxIC0geTEgKiB5MTtcbiAgICAgIGlmICh0MSA+PSAwKSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNSAtIHgyICogeDIgLSB5MiAqIHkyO1xuICAgICAgaWYgKHQyID49IDApIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIDEgKyBwZXJtW2pqICsgMV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHJldHVybiB2YWx1ZXMgaW4gdGhlIGludGVydmFsIFstMSwxXS5cbiAgICAgIHJldHVybiA3MC4wICogKG4wICsgbjEgKyBuMik7XG4gICAgfSxcbiAgICAvLyAzRCBzaW1wbGV4IG5vaXNlXG4gICAgbm9pc2UzRDogZnVuY3Rpb24oeGluLCB5aW4sIHppbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wLCBuMSwgbjIsIG4zOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluICsgemluKSAqIEYzOyAvLyBWZXJ5IG5pY2UgYW5kIHNpbXBsZSBza2V3IGZhY3RvciBmb3IgM0RcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4aW4gKyBzKTtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcih5aW4gKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6aW4gKyBzKTtcbiAgICAgIHZhciB0ID0gKGkgKyBqICsgaykgKiBHMztcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6KSBzcGFjZVxuICAgICAgdmFyIFkwID0gaiAtIHQ7XG4gICAgICB2YXIgWjAgPSBrIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5LHogZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIHZhciB6MCA9IHppbiAtIFowO1xuICAgICAgLy8gRm9yIHRoZSAzRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhIHNsaWdodGx5IGlycmVndWxhciB0ZXRyYWhlZHJvbi5cbiAgICAgIC8vIERldGVybWluZSB3aGljaCBzaW1wbGV4IHdlIGFyZSBpbi5cbiAgICAgIHZhciBpMSwgajEsIGsxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIHZhciBpMiwgajIsIGsyOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqLGspIGNvb3Jkc1xuICAgICAgaWYgKHgwID49IHkwKSB7XG4gICAgICAgIGlmICh5MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAwO1xuICAgICAgICB9IC8vIFggWSBaIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwID49IHowKSB7XG4gICAgICAgICAgaTEgPSAxO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWCBaIFkgb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDE7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWiBYIFkgb3JkZXJcbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyB4MDx5MFxuICAgICAgICBpZiAoeTAgPCB6MCkge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMDtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWSBYIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBZIFogWCBvcmRlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBZIFggWiBvcmRlclxuICAgICAgfVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDAsMCkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYywtYykgaW4gKHgseSx6KSxcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwxLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMsLWMpIGluICh4LHkseiksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDAsMSkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKC1jLC1jLDEtYykgaW4gKHgseSx6KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAxLzYuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzM7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMztcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHMztcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTIgPSB5MCAtIGoyICsgMi4wICogRzM7XG4gICAgICB2YXIgejIgPSB6MCAtIGsyICsgMi4wICogRzM7XG4gICAgICB2YXIgeDMgPSB4MCAtIDEuMCArIDMuMCAqIEczOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkzID0geTAgLSAxLjAgKyAzLjAgKiBHMztcbiAgICAgIHZhciB6MyA9IHowIC0gMS4wICsgMy4wICogRzM7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZvdXIgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MDtcbiAgICAgIGlmICh0MCA8IDApIG4wID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqICsgcGVybVtra11dXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCArIGdyYWQzW2dpMCArIDJdICogejApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxO1xuICAgICAgaWYgKHQxIDwgMCkgbjEgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMSA9IHBlcm1Nb2QxMltpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxXV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxICsgZ3JhZDNbZ2kxICsgMl0gKiB6MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gcGVybU1vZDEyW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazJdXV0gKiAzO1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIgKyBncmFkM1tnaTIgKyAyXSAqIHoyKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MyA9IDAuNiAtIHgzICogeDMgLSB5MyAqIHkzIC0gejMgKiB6MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMV1dXSAqIDM7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDNbZ2kzXSAqIHgzICsgZ3JhZDNbZ2kzICsgMV0gKiB5MyArIGdyYWQzW2dpMyArIDJdICogejMpO1xuICAgICAgfVxuICAgICAgLy8gQWRkIGNvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGNvcm5lciB0byBnZXQgdGhlIGZpbmFsIG5vaXNlIHZhbHVlLlxuICAgICAgLy8gVGhlIHJlc3VsdCBpcyBzY2FsZWQgdG8gc3RheSBqdXN0IGluc2lkZSBbLTEsMV1cbiAgICAgIHJldHVybiAzMi4wICogKG4wICsgbjEgKyBuMiArIG4zKTtcbiAgICB9LFxuICAgIC8vIDREIHNpbXBsZXggbm9pc2UsIGJldHRlciBzaW1wbGV4IHJhbmsgb3JkZXJpbmcgbWV0aG9kIDIwMTItMDMtMDlcbiAgICBub2lzZTREOiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkNCA9IHRoaXMuZ3JhZDQ7XG5cbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMywgbjQ7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICAvLyBTa2V3IHRoZSAoeCx5LHosdykgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNlbGwgb2YgMjQgc2ltcGxpY2VzIHdlJ3JlIGluXG4gICAgICB2YXIgcyA9ICh4ICsgeSArIHogKyB3KSAqIEY0OyAvLyBGYWN0b3IgZm9yIDREIHNrZXdpbmdcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4ICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeSArIHMpO1xuICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHogKyBzKTtcbiAgICAgIHZhciBsID0gTWF0aC5mbG9vcih3ICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGsgKyBsKSAqIEc0OyAvLyBGYWN0b3IgZm9yIDREIHVuc2tld2luZ1xuICAgICAgdmFyIFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHosdykgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgVzAgPSBsIC0gdDtcbiAgICAgIHZhciB4MCA9IHggLSBYMDsgLy8gVGhlIHgseSx6LHcgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5IC0gWTA7XG4gICAgICB2YXIgejAgPSB6IC0gWjA7XG4gICAgICB2YXIgdzAgPSB3IC0gVzA7XG4gICAgICAvLyBGb3IgdGhlIDREIGNhc2UsIHRoZSBzaW1wbGV4IGlzIGEgNEQgc2hhcGUgSSB3b24ndCBldmVuIHRyeSB0byBkZXNjcmliZS5cbiAgICAgIC8vIFRvIGZpbmQgb3V0IHdoaWNoIG9mIHRoZSAyNCBwb3NzaWJsZSBzaW1wbGljZXMgd2UncmUgaW4sIHdlIG5lZWQgdG9cbiAgICAgIC8vIGRldGVybWluZSB0aGUgbWFnbml0dWRlIG9yZGVyaW5nIG9mIHgwLCB5MCwgejAgYW5kIHcwLlxuICAgICAgLy8gU2l4IHBhaXItd2lzZSBjb21wYXJpc29ucyBhcmUgcGVyZm9ybWVkIGJldHdlZW4gZWFjaCBwb3NzaWJsZSBwYWlyXG4gICAgICAvLyBvZiB0aGUgZm91ciBjb29yZGluYXRlcywgYW5kIHRoZSByZXN1bHRzIGFyZSB1c2VkIHRvIHJhbmsgdGhlIG51bWJlcnMuXG4gICAgICB2YXIgcmFua3ggPSAwO1xuICAgICAgdmFyIHJhbmt5ID0gMDtcbiAgICAgIHZhciByYW5reiA9IDA7XG4gICAgICB2YXIgcmFua3cgPSAwO1xuICAgICAgaWYgKHgwID4geTApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt5Kys7XG4gICAgICBpZiAoeDAgPiB6MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3orKztcbiAgICAgIGlmICh4MCA+IHcwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgaWYgKHkwID4gejApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeTAgPiB3MCkgcmFua3krKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh6MCA+IHcwKSByYW5reisrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgdmFyIGkxLCBqMSwgazEsIGwxOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgc2Vjb25kIHNpbXBsZXggY29ybmVyXG4gICAgICB2YXIgaTIsIGoyLCBrMiwgbDI7IC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSB0aGlyZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkzLCBqMywgazMsIGwzOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgZm91cnRoIHNpbXBsZXggY29ybmVyXG4gICAgICAvLyBzaW1wbGV4W2NdIGlzIGEgNC12ZWN0b3Igd2l0aCB0aGUgbnVtYmVycyAwLCAxLCAyIGFuZCAzIGluIHNvbWUgb3JkZXIuXG4gICAgICAvLyBNYW55IHZhbHVlcyBvZiBjIHdpbGwgbmV2ZXIgb2NjdXIsIHNpbmNlIGUuZy4geD55Pno+dyBtYWtlcyB4PHosIHk8dyBhbmQgeDx3XG4gICAgICAvLyBpbXBvc3NpYmxlLiBPbmx5IHRoZSAyNCBpbmRpY2VzIHdoaWNoIGhhdmUgbm9uLXplcm8gZW50cmllcyBtYWtlIGFueSBzZW5zZS5cbiAgICAgIC8vIFdlIHVzZSBhIHRocmVzaG9sZGluZyB0byBzZXQgdGhlIGNvb3JkaW5hdGVzIGluIHR1cm4gZnJvbSB0aGUgbGFyZ2VzdCBtYWduaXR1ZGUuXG4gICAgICAvLyBSYW5rIDMgZGVub3RlcyB0aGUgbGFyZ2VzdCBjb29yZGluYXRlLlxuICAgICAgaTEgPSByYW5reCA+PSAzID8gMSA6IDA7XG4gICAgICBqMSA9IHJhbmt5ID49IDMgPyAxIDogMDtcbiAgICAgIGsxID0gcmFua3ogPj0gMyA/IDEgOiAwO1xuICAgICAgbDEgPSByYW5rdyA+PSAzID8gMSA6IDA7XG4gICAgICAvLyBSYW5rIDIgZGVub3RlcyB0aGUgc2Vjb25kIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkyID0gcmFua3ggPj0gMiA/IDEgOiAwO1xuICAgICAgajIgPSByYW5reSA+PSAyID8gMSA6IDA7XG4gICAgICBrMiA9IHJhbmt6ID49IDIgPyAxIDogMDtcbiAgICAgIGwyID0gcmFua3cgPj0gMiA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAxIGRlbm90ZXMgdGhlIHNlY29uZCBzbWFsbGVzdCBjb29yZGluYXRlLlxuICAgICAgaTMgPSByYW5reCA+PSAxID8gMSA6IDA7XG4gICAgICBqMyA9IHJhbmt5ID49IDEgPyAxIDogMDtcbiAgICAgIGszID0gcmFua3ogPj0gMSA/IDEgOiAwO1xuICAgICAgbDMgPSByYW5rdyA+PSAxID8gMSA6IDA7XG4gICAgICAvLyBUaGUgZmlmdGggY29ybmVyIGhhcyBhbGwgY29vcmRpbmF0ZSBvZmZzZXRzID0gMSwgc28gbm8gbmVlZCB0byBjb21wdXRlIHRoYXQuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzQ7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkxID0geTAgLSBqMSArIEc0O1xuICAgICAgdmFyIHoxID0gejAgLSBrMSArIEc0O1xuICAgICAgdmFyIHcxID0gdzAgLSBsMSArIEc0O1xuICAgICAgdmFyIHgyID0geDAgLSBpMiArIDIuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHcyID0gdzAgLSBsMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHgzID0geDAgLSBpMyArIDMuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBmb3VydGggY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gajMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB6MyA9IHowIC0gazMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB3MyA9IHcwIC0gbDMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB4NCA9IHgwIC0gMS4wICsgNC4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5NCA9IHkwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICB2YXIgejQgPSB6MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHc0ID0gdzAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgZml2ZSBzaW1wbGV4IGNvcm5lcnNcbiAgICAgIHZhciBpaSA9IGkgJiAyNTU7XG4gICAgICB2YXIgamogPSBqICYgMjU1O1xuICAgICAgdmFyIGtrID0gayAmIDI1NTtcbiAgICAgIHZhciBsbCA9IGwgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmaXZlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MCAtIHcwICogdzA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gKHBlcm1baWkgKyBwZXJtW2pqICsgcGVybVtrayArIHBlcm1bbGxdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDAgKj0gdDA7XG4gICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkNFtnaTBdICogeDAgKyBncmFkNFtnaTAgKyAxXSAqIHkwICsgZ3JhZDRbZ2kwICsgMl0gKiB6MCArIGdyYWQ0W2dpMCArIDNdICogdzApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxIC0gdzEgKiB3MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSAocGVybVtpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxICsgcGVybVtsbCArIGwxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDRbZ2kxXSAqIHgxICsgZ3JhZDRbZ2kxICsgMV0gKiB5MSArIGdyYWQ0W2dpMSArIDJdICogejEgKyBncmFkNFtnaTEgKyAzXSAqIHcxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNiAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MiAtIHcyICogdzI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gKHBlcm1baWkgKyBpMiArIHBlcm1bamogKyBqMiArIHBlcm1ba2sgKyBrMiArIHBlcm1bbGwgKyBsMl1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQ0W2dpMl0gKiB4MiArIGdyYWQ0W2dpMiArIDFdICogeTIgKyBncmFkNFtnaTIgKyAyXSAqIHoyICsgZ3JhZDRbZ2kyICsgM10gKiB3Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejMgLSB3MyAqIHczO1xuICAgICAgaWYgKHQzIDwgMCkgbjMgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMyA9IChwZXJtW2lpICsgaTMgKyBwZXJtW2pqICsgajMgKyBwZXJtW2trICsgazMgKyBwZXJtW2xsICsgbDNdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDMgKj0gdDM7XG4gICAgICAgIG4zID0gdDMgKiB0MyAqIChncmFkNFtnaTNdICogeDMgKyBncmFkNFtnaTMgKyAxXSAqIHkzICsgZ3JhZDRbZ2kzICsgMl0gKiB6MyArIGdyYWQ0W2dpMyArIDNdICogdzMpO1xuICAgICAgfVxuICAgICAgdmFyIHQ0ID0gMC42IC0geDQgKiB4NCAtIHk0ICogeTQgLSB6NCAqIHo0IC0gdzQgKiB3NDtcbiAgICAgIGlmICh0NCA8IDApIG40ID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTQgPSAocGVybVtpaSArIDEgKyBwZXJtW2pqICsgMSArIHBlcm1ba2sgKyAxICsgcGVybVtsbCArIDFdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDQgKj0gdDQ7XG4gICAgICAgIG40ID0gdDQgKiB0NCAqIChncmFkNFtnaTRdICogeDQgKyBncmFkNFtnaTQgKyAxXSAqIHk0ICsgZ3JhZDRbZ2k0ICsgMl0gKiB6NCArIGdyYWQ0W2dpNCArIDNdICogdzQpO1xuICAgICAgfVxuICAgICAgLy8gU3VtIHVwIGFuZCBzY2FsZSB0aGUgcmVzdWx0IHRvIGNvdmVyIHRoZSByYW5nZSBbLTEsMV1cbiAgICAgIHJldHVybiAyNy4wICogKG4wICsgbjEgKyBuMiArIG4zICsgbjQpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIHAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgcFtpXSA9IGk7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykge1xuICAgICAgdmFyIHIgPSBpICsgfn4ocmFuZG9tKCkgKiAoMjU2IC0gaSkpO1xuICAgICAgdmFyIGF1eCA9IHBbaV07XG4gICAgICBwW2ldID0gcFtyXTtcbiAgICAgIHBbcl0gPSBhdXg7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9XG4gIFNpbXBsZXhOb2lzZS5fYnVpbGRQZXJtdXRhdGlvblRhYmxlID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlO1xuXG4gIGZ1bmN0aW9uIGFsZWEoKSB7XG4gICAgLy8gSm9oYW5uZXMgQmFhZ8O4ZSA8YmFhZ29lQGJhYWdvZS5jb20+LCAyMDEwXG4gICAgdmFyIHMwID0gMDtcbiAgICB2YXIgczEgPSAwO1xuICAgIHZhciBzMiA9IDA7XG4gICAgdmFyIGMgPSAxO1xuXG4gICAgdmFyIG1hc2ggPSBtYXNoZXIoKTtcbiAgICBzMCA9IG1hc2goJyAnKTtcbiAgICBzMSA9IG1hc2goJyAnKTtcbiAgICBzMiA9IG1hc2goJyAnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzMCAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczAgPCAwKSB7XG4gICAgICAgIHMwICs9IDE7XG4gICAgICB9XG4gICAgICBzMSAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczEgPCAwKSB7XG4gICAgICAgIHMxICs9IDE7XG4gICAgICB9XG4gICAgICBzMiAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczIgPCAwKSB7XG4gICAgICAgIHMyICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIG1hc2ggPSBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgICBzMCA9IHMxO1xuICAgICAgczEgPSBzMjtcbiAgICAgIHJldHVybiBzMiA9IHQgLSAoYyA9IHQgfCAwKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1hc2hlcigpIHtcbiAgICB2YXIgbiA9IDB4ZWZjODI0OWQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbiArPSBkYXRhLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIGggKj0gbjtcbiAgICAgICAgbiA9IGggPj4+IDA7XG4gICAgICAgIGggLT0gbjtcbiAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcbiAgICAgIH1cbiAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgIH07XG4gIH1cblxuICAvLyBhbWRcbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQpIGRlZmluZShmdW5jdGlvbigpIHtyZXR1cm4gU2ltcGxleE5vaXNlO30pO1xuICAvLyBjb21tb24ganNcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgZXhwb3J0cy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIGJyb3dzZXJcbiAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIG5vZGVqc1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFNpbXBsZXhOb2lzZTtcbiAgfVxuXG59KSgpO1xuIiwiY29uc3QgY2FudmFzU2tldGNoID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaCcpO1xuY29uc3QgcmFuZG9tID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbScpO1xuY29uc3QgbWF0aCA9IHJlcXVpcmUoJ2NhbnZhcy1za2V0Y2gtdXRpbC9tYXRoJyk7XG5cblxuY29uc3Qgc2V0dGluZ3MgPSB7XG4gIGRpbWVuc2lvbnM6IFsgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCBdLFxuICBhbmltYXRlOiB0cnVlLFxuICBzY2FsZVRvRml0OiBmYWxzZSxcblxufTtcbmZ1bmN0aW9uIGNoYW5nZUJhY2tncm91bmQoY29sb3IpIHtcbiAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZCA9IGNvbG9yO1xufVxuY2hhbmdlQmFja2dyb3VuZCgnYmxhY2snKTtcbmRvY3VtZW50LnRpdGxlID0gXCJOSUdIVCBTS1lcIjtcbmxldCBtb3VzZXggPSAwO1xubGV0IG1vdXNleSA9IDA7XG5jb25zdCBza2V0Y2ggPSAoeyBjb250ZXh0LCB3aWR0aCwgaGVpZ2h0IH0pID0+IHtcbiAgXG5cbiAgY29uc3QgYWdlbnRzID0gW107XG4gIGZvcihsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKyl7XG4gICAgY29uc3QgeCA9IHJhbmRvbS5yYW5nZSgwLHdpZHRoKTtcbiAgICBjb25zdCB5ID0gcmFuZG9tLnJhbmdlKDAsaGVpZ2h0KTtcbiAgICBhZ2VudHMucHVzaChuZXcgQWdlbnQoeCx5LCB0cnVlKSk7XG4gIH1cblxuXG4gIHJldHVybiAoeyBjb250ZXh0LCB3aWR0aCwgaGVpZ2h0IH0pID0+IHtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuXG5cbiAgICAvLyBDcmVhdGUgZ3JhZGllbnRcbiAgICB2YXIgZ3JkID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLGhlaWdodCwwLDApO1xuICAgIGdyZC5hZGRDb2xvclN0b3AoMCxcIiM0MzAxNzVcIik7XG4gICAgZ3JkLmFkZENvbG9yU3RvcCgxLFwiIzAwMDIzMFwiKTtcblxuXG4gICAgLy8gRmlsbCB3aXRoIGdyYWRpZW50XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBncmQ7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLDAsd2lkdGgsaGVpZ2h0KTtcblxuXG4gICAgZm9yKGxldCBpID0gMDsgaTxhZ2VudHMubGVuZ3RoOyBpKyspe1xuICAgICAgY29uc3QgYWdlbnQgPSBhZ2VudHNbaV07XG4gICAgICBmb3IobGV0IGogPSBpKzE7IGo8IGFnZW50cy5sZW5ndGg7IGorKyl7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBvdGhlciA9IGFnZW50c1tqXTtcbiAgICAgICAgY29uc3QgZGlzdCA9IGFnZW50LnBvcy5nZXREaXN0YW5jZShvdGhlci5wb3MpXG4gICAgICAgIGNvbnN0IGxpbmVUaHJlc2hvbGQgPSAod2luZG93LmlubmVyV2lkdGgrd2luZG93LmlubmVySGVpZ2h0KS8yICowLjA4MDtcbiAgICAgICAgaWYoZGlzdD5saW5lVGhyZXNob2xkKXtcbiAgICAgICAgICBjb250aW51ZTsgIFxuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIzViZDFmNSc7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gbWF0aC5tYXBSYW5nZShkaXN0LCAwLCBsaW5lVGhyZXNob2xkLCA4ICwgMCk7XG5cbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgY29udGV4dC5tb3ZlVG8oYWdlbnQucG9zLngsIGFnZW50LnBvcy55KTtcbiAgICAgICAgY29udGV4dC5saW5lVG8ob3RoZXIucG9zLngsIG90aGVyLnBvcy55KTtcbiAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgIFxuXG4gICAgICB9XG4gICAgfVxuICAgICAgICBvbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKGUpe1xuICAgICAgbW91c2V4ID0gZS5jbGllbnRYO1xuICAgICAgbW91c2V5ID0gZS5jbGllbnRZO1xuICAgIH1cblxuICAgIC8vZHJhdyBtb3VzZVxuICAgIGlmKG1vdXNleSA+IDIwICYmIG1vdXNleCA+MjAgICYmIG1vdXNleCA8IHdpbmRvdy5pbm5lcldpZHRoIC0gMjAgJiYgbW91c2V5IDwgd2luZG93LmlubmVySGVpZ2h0IC0yMCl7XG4gICAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEFnZW50KG1vdXNleCxtb3VzZXkpO1xuICAgICAgICBmb3IobGV0IGogPSAwOyBqPCBhZ2VudHMubGVuZ3RoOyBqKyspe1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG90aGVyID0gYWdlbnRzW2pdO1xuICAgICAgICAgIGNvbnN0IGRpc3QgPSBhZ2VudC5wb3MuZ2V0RGlzdGFuY2Uob3RoZXIucG9zKVxuICAgICAgICAgIGNvbnN0IGxpbmVUaHJlc2hvbGQgPSAod2luZG93LmlubmVyV2lkdGgrd2luZG93LmlubmVySGVpZ2h0KS8yICowLjA4MDtcbiAgICAgICAgICBpZihkaXN0PmxpbmVUaHJlc2hvbGQgKXtcbiAgICAgICAgICAgIGNvbnRpbnVlOyAgXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIzViZDFmNSc7XG4gICAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBtYXRoLm1hcFJhbmdlKGRpc3QsIDAsIGxpbmVUaHJlc2hvbGQsIDggLCAwKTtcblxuICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgY29udGV4dC5tb3ZlVG8oYWdlbnQucG9zLngsIGFnZW50LnBvcy55KTtcbiAgICAgICAgICBjb250ZXh0LmxpbmVUbyhvdGhlci5wb3MueCwgb3RoZXIucG9zLnkpO1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICB9IFxuXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICd3aGl0ZSc7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gNDtcbiAgICAgICAgY29udGV4dC5zYXZlKCk7XG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKG1vdXNleCxtb3VzZXkpO1xuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICBjb250ZXh0LmFyYygwLDAsIDgsIDAgLCBNYXRoLlBJKjIpO1xuICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTtcbiAgICAgICAgICBjb250ZXh0LnNoYWRvd0NvbG9yID0gJyNlZmY1YzEnO1xuICAgICAgICAgIGNvbnRleHQuc2hhZG93Qmx1ciA9IDMwO1xuICAgICAgICAgIGNvbnRleHQuc2hhZG93T2Zmc2V0WCA9IDA7XG4gICAgICAgICAgY29udGV4dC5zaGFkb3dPZmZzZXRZID0gMDtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgYWdlbnRzLmZvckVhY2goYWdlbnQgPT57XG4gICAgICBhZ2VudC51cGRhdGUoKTtcbiAgICAgIGFnZW50LmRyYXcoY29udGV4dCk7XG4gICAgICBhZ2VudC5ib3VuY2Uod2lkdGgsIGhlaWdodCk7XG4gICAgfSlcblxuXG5cbiAgICBvbmNsaWNrID0gZnVuY3Rpb24oKXtcbiAgICAgIGNvbnNvbGUubG9nKFwibW91c2Vkb3duXCIpO1xuICAgICAgICAgIGFnZW50cy5wdXNoKG5ldyBBZ2VudChtb3VzZXgsbW91c2V5LCBmYWxzZSkpO1xuXG4gICAgfVxuXG5cblxuICB9O1xufTtcblxuXG4gIGNhbnZhc1NrZXRjaChza2V0Y2gsIHNldHRpbmdzKTtcblxuXG4gIGNsYXNzIFZlY3RvcntcblxuICAgIGNvbnN0cnVjdG9yKHgsIHkpe1xuICAgICAgdGhpcy54ID0geDtcbiAgICAgIHRoaXMueSA9IHk7XG4gICAgfSBcblxuICAgIGdldERpc3RhbmNlKHYpe1xuICAgICAgY29uc3QgZHggPSB0aGlzLnggLSB2Lng7XG4gICAgICBjb25zdCBkeSA9IHRoaXMueSAtIHYueTtcblxuXG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KGR4KmR4K2R5KmR5KTtcbiAgICB9XG5cbiAgfVxuXG5cblxuICBjbGFzcyBBZ2VudHtcbiAgICBjb25zdHJ1Y3Rvcih4LHksIG1vdmUpe1xuICAgICB0aGlzLnBvcyA9IG5ldyBWZWN0b3IoeCx5KTtcbiAgICAgaWYobW92ZSl7XG4gICAgICB0aGlzLnZlbCA9IG5ldyBWZWN0b3IocmFuZG9tLnJhbmdlKDAsMC41KSwgcmFuZG9tLnJhbmdlKDAsLTAuNSkpOyBcbiAgICAgfVxuICAgICBlbHNle1xuICAgICAgdGhpcy52ZWwgPSBuZXcgVmVjdG9yKDAsMCk7XG4gICAgIH1cbiAgICAgdGhpcy5yYWRpdXMgPSByYW5kb20ucmFuZ2UoMiw2KTtcbiAgIH1cblxuICAgYm91bmNlKHdpZHRoLCBoZWlnaHQpe1xuICAgIGNvbnN0IG1hcmdpbiA9IDIwO1xuICAgIGlmKHRoaXMucG9zLnggPD0gMCAtIG1hcmdpbil7XG4gICAgICB0aGlzLnBvcy54ID0gd2lkdGg7XG4gICAgfSBcbiAgICBpZiggdGhpcy5wb3MueD49IHdpZHRoICttYXJnaW4pe1xuICAgICAgdGhpcy5wb3MueCA9IDA7XG4gICAgfSBcbiAgICBpZih0aGlzLnBvcy55Pj0gaGVpZ2h0K21hcmdpbil7XG4gICAgICAgdGhpcy5wb3MueSA9IDA7XG4gICAgfVxuICAgIGlmKHRoaXMucG9zLnkgPD0gMCAtIG1hcmdpbiApe1xuICAgICAgdGhpcy5wb3MueSA9IGhlaWdodDtcbiAgICB9IFxuICAgfVxuXG4gICBkcmF3KGN0eCl7XG5cbiAgICBjdHguZmlsbFN0eWxlID0gJ3doaXRlJztcbiAgICBjdHgubGluZVdpZHRoID0gNDtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC50cmFuc2xhdGUodGhpcy5wb3MueCx0aGlzLnBvcy55KVxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKDAsMCwgdGhpcy5yYWRpdXMsIDAgLCBNYXRoLlBJKjIpO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSAnI2VmZjVjMSc7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IDMwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgY3R4LmZpbGwoKTtcbiAgICBjdHguZmlsbCgpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgcHVsbCh4LHkpe1xuICAgIHRoaXMudmVsLnggPSB0aGlzLnBvcy54LXg7XG4gIH1cblxuICB1cGRhdGUoKXtcbiAgICB0aGlzLnBvcy54ICs9IHRoaXMudmVsLng7XG4gICAgdGhpcy5wb3MueSArPSB0aGlzLnZlbC55O1xuICB9XG5cbn0iLCJcbmdsb2JhbC5DQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBQUEsRUFBQUMsRUFBQUMsRUFBQUMsR0FBQSxTQUFBQyxFQUFBQyxFQUFBQyxHQUFBLElBQUFKLEVBQUFHLEdBQUEsS0FBQUosRUFBQUksR0FBQSxLQUFBRSxFQUFBLG1CQUFBQyxpQkFBQSxJQUFBRixHQUFBQyxFQUFBLE9BQUFBLEVBQUFGLEdBQUEsTUFBQUksRUFBQSxPQUFBQSxFQUFBSixHQUFBLE9BQUFLLEVBQUEsSUFBQUMsTUFBQSx1QkFBQU4sRUFBQSxXQUFBSyxFQUFBRSxLQUFBLG1CQUFBRixDQUFBLEtBQUFHLEVBQUFYLEVBQUFHLEdBQUEsQ0FBQVMsUUFBQSxJQUFBYixFQUFBSSxHQUFBLEdBQUFVLEtBQUFGLEVBQUFDLFNBQUEsU0FBQWQsR0FBQSxPQUFBSSxFQUFBSCxFQUFBSSxHQUFBLEdBQUFMLE1BQUEsR0FBQWEsSUFBQUMsUUFBQWQsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxRQUFBRCxFQUFBRyxHQUFBUyxPQUFBLFNBQUFMLEVBQUEsbUJBQUFELGlCQUFBSCxFQUFBLEVBQUFBLEVBQUFGLEVBQUFhLE9BQUFYLElBQUFELEVBQUFELEVBQUFFLElBQUEsT0FBQUQsQ0FBQSxlQUFBSSxFQUFBUyxFQUFBSCxHQ0FB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</script>