@turnai/turn-shared 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/README.md +1 -1
- package/lib/turn-shared.js +8323 -13337
- package/lib/turn-shared.min.js +7 -19
- package/package.json +7 -4
package/lib/turn-shared.min.js
CHANGED
|
@@ -1,23 +1,11 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("turn-shared",[],e):"object"==typeof exports?exports["turn-shared"]=e():t["turn-shared"]=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=307)}([function(t,e,n){var r=n(1),o=n(19);t.exports=function(t){return function e(n,i){switch(arguments.length){case 0:return e;case 1:return o(n)?e:r((function(e){return t(n,e)}));default:return o(n)&&o(i)?e:o(n)?r((function(e){return t(e,i)})):o(i)?r((function(e){return t(n,e)})):t(n,i)}}}},function(t,e,n){var r=n(19);t.exports=function(t){return function e(n){return 0===arguments.length||r(n)?e:t.apply(this,arguments)}}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(74),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e,n){"use strict";var r=n(65),o=n(172),i=Object.prototype.toString;function u(t){return"[object Array]"===i.call(t)}function a(t){return null!==t&&"object"==typeof t}function s(t){return"[object Function]"===i.call(t)}function c(t,e){if(null!=t)if("object"==typeof t||u(t)||(t=[t]),u(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.call(null,t[o],o,t)}t.exports={isArray:u,isArrayBuffer:function(t){return"[object ArrayBuffer]"===i.call(t)},isBuffer:o,isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:a,isUndefined:function(t){return void 0===t},isDate:function(t){return"[object Date]"===i.call(t)},isFile:function(t){return"[object File]"===i.call(t)},isBlob:function(t){return"[object Blob]"===i.call(t)},isFunction:s,isStream:function(t){return a(t)&&s(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:c,merge:function t(){var e={};function n(n,r){"object"==typeof e[r]&&"object"==typeof n?e[r]=t(e[r],n):e[r]=n}for(var r=0,o=arguments.length;r<o;r++)c(arguments[r],n);return e},extend:function(t,e,n){return c(e,(function(e,o){t[o]=n&&"function"==typeof e?r(e,n):e})),t},trim:function(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}}},function(t,e,n){var r=n(11),o=n(2),i=n(8);t.exports=function(t){return"string"==typeof t||!o(t)&&i(t)&&"[object String]"==r(t)}},function(t,e,n){var r=n(202),o=n(207);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",o="minute",i="hour",u="day",a="week",s="month",c="quarter",f="year",l="date",p="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,d=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},y=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},g={s:y,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(o,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),o=e.clone().add(r,s),i=n-o<0,u=e.clone().add(r+(i?-1:1),s);return+(-(r+(n-o)/(i?o-u:u-o))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:s,y:f,w:a,d:u,D:l,h:i,m:o,s:r,ms:n,Q:c}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},b="en",m={};m[b]=v;var x="$isDayjsObject",w=function(t){return t instanceof N||!(!t||!t[x])},_=function t(e,n,r){var o;if(!e)return b;if("string"==typeof e){var i=e.toLowerCase();m[i]&&(o=i),n&&(m[i]=n,o=i);var u=e.split("-");if(!o&&u.length>1)return t(u[0])}else{var a=e.name;m[a]=e,o=a}return!r&&o&&(b=o),o||!r&&b},O=function(t,e){if(w(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new N(n)},A=g;A.l=_,A.i=w,A.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var N=function(){function v(t){this.$L=_(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[x]=!0}var y=v.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(A.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r){var o=r[2]-1||0,i=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return A},y.isValid=function(){return!(this.$d.toString()===p)},y.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},y.isAfter=function(t,e){return O(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<O(t)},y.$g=function(t,e,n){return A.u(t)?this[e]:this.set(n,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var n=this,c=!!A.u(e)||e,p=A.p(t),h=function(t,e){var r=A.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return c?r:r.endOf(u)},d=function(t,e){return A.w(n.toDate()[t].apply(n.toDate("s"),(c?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},v=this.$W,y=this.$M,g=this.$D,b="set"+(this.$u?"UTC":"");switch(p){case f:return c?h(1,0):h(31,11);case s:return c?h(1,y):h(0,y+1);case a:var m=this.$locale().weekStart||0,x=(v<m?v+7:v)-m;return h(c?g-x:g+(6-x),y);case u:case l:return d(b+"Hours",0);case i:return d(b+"Minutes",1);case o:return d(b+"Seconds",2);case r:return d(b+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var a,c=A.p(t),p="set"+(this.$u?"UTC":""),h=(a={},a[u]=p+"Date",a[l]=p+"Date",a[s]=p+"Month",a[f]=p+"FullYear",a[i]=p+"Hours",a[o]=p+"Minutes",a[r]=p+"Seconds",a[n]=p+"Milliseconds",a)[c],d=c===u?this.$D+(e-this.$W):e;if(c===s||c===f){var v=this.clone().set(l,1);v.$d[h](d),v.init(),this.$d=v.set(l,Math.min(this.$D,v.daysInMonth())).$d}else h&&this.$d[h](d);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[A.p(t)]()},y.add=function(n,c){var l,p=this;n=Number(n);var h=A.p(c),d=function(t){var e=O(p);return A.w(e.date(e.date()+Math.round(t*n)),p)};if(h===s)return this.set(s,this.$M+n);if(h===f)return this.set(f,this.$y+n);if(h===u)return d(1);if(h===a)return d(7);var v=(l={},l[o]=t,l[i]=e,l[r]=1e3,l)[h]||1,y=this.$d.getTime()+n*v;return A.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=t||"YYYY-MM-DDTHH:mm:ssZ",o=A.z(this),i=this.$H,u=this.$m,a=this.$M,s=n.weekdays,c=n.months,f=n.meridiem,l=function(t,n,o,i){return t&&(t[n]||t(e,r))||o[n].slice(0,i)},h=function(t){return A.s(i%12||12,t,"0")},v=f||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(d,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return A.s(e.$y,4,"0");case"M":return a+1;case"MM":return A.s(a+1,2,"0");case"MMM":return l(n.monthsShort,a,c,3);case"MMMM":return l(c,a);case"D":return e.$D;case"DD":return A.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return l(n.weekdaysMin,e.$W,s,2);case"ddd":return l(n.weekdaysShort,e.$W,s,3);case"dddd":return s[e.$W];case"H":return String(i);case"HH":return A.s(i,2,"0");case"h":return h(1);case"hh":return h(2);case"a":return v(i,u,!0);case"A":return v(i,u,!1);case"m":return String(u);case"mm":return A.s(u,2,"0");case"s":return String(e.$s);case"ss":return A.s(e.$s,2,"0");case"SSS":return A.s(e.$ms,3,"0");case"Z":return o}return null}(t)||o.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(n,l,p){var h,d=this,v=A.p(l),y=O(n),g=(y.utcOffset()-this.utcOffset())*t,b=this-y,m=function(){return A.m(d,y)};switch(v){case f:h=m()/12;break;case s:h=m();break;case c:h=m()/3;break;case a:h=(b-g)/6048e5;break;case u:h=(b-g)/864e5;break;case i:h=b/e;break;case o:h=b/t;break;case r:h=b/1e3;break;default:h=b}return p?h:A.a(h)},y.daysInMonth=function(){return this.endOf(s).$D},y.$locale=function(){return m[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=_(t,e,!0);return r&&(n.$L=r),n},y.clone=function(){return A.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},v}(),S=N.prototype;return O.prototype=S,[["$ms",n],["$s",r],["$m",o],["$H",i],["$W",u],["$M",s],["$y",f],["$D",l]].forEach((function(t){S[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,N,O),t.$i=!0),O},O.locale=_,O.isDayjs=w,O.unix=function(t){return O(1e3*t)},O.en=m[b],O.Ls=m,O.p={},O}()},function(t,e){t.exports=function(t,e){switch(t){case 0:return function(){return e.apply(this,arguments)};case 1:return function(t){return e.apply(this,arguments)};case 2:return function(t,n){return e.apply(this,arguments)};case 3:return function(t,n,r){return e.apply(this,arguments)};case 4:return function(t,n,r,o){return e.apply(this,arguments)};case 5:return function(t,n,r,o,i){return e.apply(this,arguments)};case 6:return function(t,n,r,o,i,u){return e.apply(this,arguments)};case 7:return function(t,n,r,o,i,u,a){return e.apply(this,arguments)};case 8:return function(t,n,r,o,i,u,a,s){return e.apply(this,arguments)};case 9:return function(t,n,r,o,i,u,a,s,c){return e.apply(this,arguments)};case 10:return function(t,n,r,o,i,u,a,s,c,f){return e.apply(this,arguments)};default:throw new Error("First argument to _arity must be a non-negative integer no greater than ten")}}},function(t,e,n){var r=n(25),o=n(203),i=n(204),u=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?o(t):i(t)}},function(t,e,n){var r=n(93);function o(t,e,n){var i=r(t,8,void 0,void 0,void 0,void 0,void 0,e=n?void 0:e);return i.placeholder=o.placeholder,i}o.placeholder={},t.exports=o},function(t,e){t.exports=function(t,e){return Object.prototype.hasOwnProperty.call(e,t)}},function(t,e,n){var r=n(1),o=n(0),i=n(19);t.exports=function(t){return function e(n,u,a){switch(arguments.length){case 0:return e;case 1:return i(n)?e:o((function(e,r){return t(n,e,r)}));case 2:return i(n)&&i(u)?e:i(n)?o((function(e,n){return t(e,u,n)})):i(u)?o((function(e,r){return t(n,e,r)})):r((function(e){return t(n,u,e)}));default:return i(n)&&i(u)&&i(a)?e:i(n)&&i(u)?o((function(e,n){return t(e,n,a)})):i(n)&&i(a)?o((function(e,n){return t(e,u,n)})):i(u)&&i(a)?o((function(e,r){return t(n,e,r)})):i(n)?r((function(e){return t(e,u,a)})):i(u)?r((function(e){return t(n,e,a)})):i(a)?r((function(e){return t(n,u,e)})):t(n,u,a)}}}},function(t,e,n){var r=n(10),o=n(1),i=n(0),u=n(144);t.exports=i((function(t,e){return 1===t?o(e):r(t,u(t,[],e))}))},function(t,e,n){var r=n(73),o=n(46);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},function(t,e){var n,r,o=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(t){n=i}try{r="function"==typeof clearTimeout?clearTimeout:u}catch(t){r=u}}();var s,c=[],f=!1,l=-1;function p(){f&&s&&(f=!1,s.length?c=s.concat(c):l=-1,c.length&&h())}function h(){if(!f){var t=a(p);f=!0;for(var e=c.length;e;){for(s=c,c=[];++l<e;)s&&s[l].run();l=-1,e=c.length}s=null,f=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===u||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function d(t,e){this.fun=t,this.array=e}function v(){}o.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new d(t,e)),1!==c.length||f||a(h)},d.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=v,o.addListener=v,o.once=v,o.off=v,o.removeListener=v,o.removeAllListeners=v,o.emit=v,o.prependListener=v,o.prependOnceListener=v,o.listeners=function(t){return[]},o.binding=function(t){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(t){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t&&!0===t["@@functional/placeholder"]}},function(t,e,n){var r=n(133),o=n(134),i=n(135);t.exports=function(){function t(t,e,n){for(var r=n.next();!r.done;){if((e=t["@@transducer/step"](e,r.value))&&e["@@transducer/reduced"]){e=e["@@transducer/value"];break}r=n.next()}return t["@@transducer/result"](e)}var e="undefined"!=typeof Symbol?Symbol.iterator:"@@iterator";return function(n,u,a){if("function"==typeof n&&(n=r(n)),i(a))return function(t,e,n){for(var r=0,o=n.length;r<o;){if((e=t["@@transducer/step"](e,n[r]))&&e["@@transducer/reduced"]){e=e["@@transducer/value"];break}r+=1}return t["@@transducer/result"](e)}(n,u,a);if("function"==typeof a.reduce)return function(t,e,n){return t["@@transducer/result"](n.reduce(o(t["@@transducer/step"],t),e))}(n,u,a);if(null!=a[e])return t(n,u,a[e]());if("function"==typeof a.next)return t(n,u,a);throw new TypeError("reduce: list must be array or iterable")}}()},function(t,e){t.exports=Array.isArray||function(t){return null!=t&&t.length>=0&&"[object Array]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(0),o=n(152),i=n(154),u=n(20),a=n(155),s=n(15),c=n(35);t.exports=r(o(["map"],a,(function(t,e){switch(Object.prototype.toString.call(e)){case"[object Function]":return s(e.length,(function(){return t.call(this,e.apply(this,arguments))}));case"[object Object]":return u((function(n,r){return n[r]=t(e[r]),n}),{},c(e));default:return i(t,e)}})))},function(t,e,n){var r=n(192),o=n(193),i=n(194),u=n(195),a=n(196);function s(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=i,s.prototype.has=u,s.prototype.set=a,t.exports=s},function(t,e,n){var r=n(39);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},function(t,e,n){var r=n(4).Symbol;t.exports=r},function(t,e,n){var r=n(7)(Object,"create");t.exports=r},function(t,e,n){var r=n(216);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var r=n(11),o=n(8);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r=n(29);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(48),o=n(3);t.exports=function(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=r(t.prototype),i=t.apply(n,e);return o(i)?i:n}}},function(t,e){t.exports=function(t,e){for(var n=-1,r=t.length,o=0,i=[];++n<r;){var u=t[n];u!==e&&"__lodash_placeholder__"!==u||(t[n]="__lodash_placeholder__",i[o++]=n)}return i}},function(t,e){t.exports={AL:[{regex:/^\d{7,8}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 8"},{regex:/^[A-Z]\d{6,7}$/i,description:"ANNNNNNNN MinLength = 7 MaxLength = 8"}],AK:[{regex:/^\d{7}$/,description:"NNNNNNNN MinLength = 7 MaxLength = 7"}],AZ:[{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],AR:[{regex:/^[0-9]{9}$/,description:"NNNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],CA:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"}],CO:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]{1}[0-9]{3,6}$/i,description:"ANNNNNN min length 4 max 7"},{regex:/^[A-Z]{2}[0-9]{1,5}$/i,description:"AANNNNN min length 3 max 7"}],CT:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],DE:[{regex:/^\d{1,7}$/,description:"License must be 1-7 numbers"}],DC:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],FL:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"},{regex:/^[A-Z]\d{11}$/i,description:"ANNNNNNNNNNN MinLength = 12 MaxLength = 12"}],GA:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],GU:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],HI:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],ID:[{regex:/^[A-Z]{2}[0-9]{6}[A-Z]{1}$/i,description:"License must be 2 letters followed by 6 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],IL:[{regex:/^[A-Z]{1}[0-9]{11}$/i,description:"License must be 1 letter followed by 11 numbers"}],IN:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"}],IA:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{2}[0-9]{4}$/i,description:"License must be 3 numbers followed by 2 letters followed by 4 numbers"}],KS:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],KY:[{regex:/^[A-Z]{1}[0-9]{8,9}$/i,description:"License must be 1 letter followed by 8-9 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],LA:[{regex:/^[0-9]{1,9}$/i,description:"License must be 1-9 numbers"}],ME:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{7}[A-Z]{1}$/i,description:"License must be 7 numbers followed by 1 letter"},{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],MD:[{regex:/^[A-Z]{1,2}[0-9]{11,12}$/i,description:"License must be 1 or 2 letters followed by 11 or 12 numbers"}],MA:[{regex:/(^[A-Z]{1}[0-9]{8}$|^[A-Z]{2}[0-9]{7}$)/i,description:"License must be 1 letter followed by 8 numbers or 2 letters followed by 7 numbers"}],MI:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MN:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MS:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],MO:[{regex:/^[A-Z]{1}[0-9]{5,9}$/i,description:"License must be 1 letter followed by 5-9 numbers"},{regex:/^[A-Z]{1}[0-9]{6}[R]{1}$/i,description:'License must be 1 letter followed by 6 numbers followed by "R"'},{regex:/^[0-9]{9}[A-Z]{1}$/i,description:"License must be 9 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{1}[0-9]{6}$/i,description:"License must be 3 numbers + 1 alfanumeric + 6 numbers"},{regex:/^[A-Z]\d{5,6}[A-Z]$/i,description:"ANNNNNA MinLength = 7 MaxLength = 7 OR ANNNNNA MinLength = 8 MaxLength = 8"}],MT:[{regex:/^[0-9]{13}$/i,description:"License must be 13 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]\d(\d|[A-Z])\d{2}[A-Z]{3}\d$/i,description:"ANXNNAAAN MinLength = 9 MaxLength = 9"},{regex:/^[a-z]{3}\d{10}$/i,description:"Three letters and 10 digits"}],NE:[{regex:/^[A-Z]\d{3,8}$/i,description:"ANNNNNNNN MinLength = 4 MaxLength = 9"}],NV:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"},{regex:/^[0-9]{12}$/i,description:"License must be 12 numbers"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],NH:[{regex:/(^[0-9]{2}[A-Z]{3}[0-9]{5}$|^[A-Z]{3}[0-9]{8}$)/i,description:"License must be 2 numbers followed by 3 letters followed by 5 numbers OR 3 letters followed by 8 numbers"}],NJ:[{regex:/^[A-Z]{1}[0-9]{14}$/i,description:"License must be 1 letter followed by 14 numbers"}],NM:[{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NY:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"},{regex:/^[A-Z]{1}[0-9]{17,18}$/i,description:"License must be 1 letter followed by 17-18 numbers"},{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NC:[{regex:/^[0-9]{1,12}$/i,description:"License must be 1-12 numbers"}],ND:[{regex:/^[A-Z]{3}[0-9]{6}$/i,description:"License must be 3 letters followed by 6 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],OH:[{regex:/^[A-Z]{2}[0-9]{6}$/i,description:"License must be 2 letters followed by 6 numbers"}],OK:[{regex:/^[A-Z]{1}[0-9]{9}$/i,description:"License must be 1 letter followed by 9 numbers"},{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}],OR:[{regex:/^[0-9]{5,9}$/i,description:"License must be 5-9 numbers"},{regex:/^[A-Z]\d{7}$/i,description:"ANNNNNNN MinLength = 8 MaxLength = 8"},{regex:/^[A-Z0-9]{6,9}$/i,description:"XXXXXXXXX MinLength = 6 MaxLength = 9"}],PA:[{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],RI:[{regex:/^[0-9]{7,8}$/i,description:"License must be 7 or 8 numbers without letters"},{regex:/^[A-Z]{1}[0-9]{6}$/i,description:"License must be 1 letter followed by 6 numbers"}],SC:[{regex:/^[0-9]{6,11}$/i,description:"License must be 6-11 numbers (new: 9, old format: 6-11)"}],SD:[{regex:/^[0-9]{6,9}$/i,description:"License must be 6-9 numbers"}],TN:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],TX:[{regex:/^\d{5,8}$/,description:"NNNNNNNN MinLength = 5 MaxLength = 8"}],UT:[{regex:/^[0-9]{4,10}$/i,description:"License must be 4-10 numbers"}],VT:[{regex:/^[0-9]{7,}$/i,description:"License must be 7-8 numbers"},{regex:/^[0-9]{7}[A]$/i,description:'License must be 7 numbers followed by "A"'},{regex:/^\d{7}[A-Z]?$/i,description:"NNNNNNNA MinLength = 8 MaxLength = 8 OR NNNNNNN MinLength = 7 MaxLength = 7"}],VA:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],VI:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],WA:[{regex:/^(?=.{12}$)[A-Z]{1,7}[A-Z0-9\\*]{4,11}$/i,description:'License must be 1-7 letters followed by any combination of letters, numbers, or "*" for a total of 12 characters'},{regex:/^[A-Z0-9]{12}$/i,description:"XXXXXXXXXXXX MinLength = 12 MaxLength = 12"}],WV:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[A-Z]{2}[0-9]{5}$/i,description:"License must be 2 letters followed by 5 numbers"},{regex:/^[A-Z]{1,2}[0-9]{6}$/i,description:"License must be 1-2 letters followed by 6 numbers"},{regex:/^[A-Z]\d{6}$/i,description:"ANNNNNN MinLength = 7 MaxLength = 7"},{regex:/^[A-Z]{2}\d{5,6}$/i,description:"AANNNNN MinLength = 7 MaxLength = 7 OR AANNNNNN MinLength = 8 MaxLength = 8"},{regex:/^\d[A-Z]\d{5}$/i,description:"NANNNNN MinLength = 7 MaxLength = 7"}],WI:[{regex:/^[A-Z]{1}[0-9]{13}$/i,description:"License must be 1 letter followed by 13 numbers"}],WY:[{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],PR:[{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}]}},function(t,e,n){var r,o,i,u,a=n(1),s=n(13),c=n(58);t.exports=(r=!{toString:null}.propertyIsEnumerable("toString"),o=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],i=function(){"use strict";return arguments.propertyIsEnumerable("length")}(),u=function(t,e){for(var n=0;n<t.length;){if(t[n]===e)return!0;n+=1}return!1},"function"!=typeof Object.keys||i?a((function(t){if(Object(t)!==t)return[];var e,n,a=[],f=i&&c(t);for(e in t)!s(e,t)||f&&"length"===e||(a[a.length]=e);if(r)for(n=o.length-1;n>=0;)s(e=o[n],t)&&!u(a,e)&&(a[a.length]=e),n-=1;return a})):a((function(t){return Object(t)!==t?[]:Object.keys(t)})))},function(t,e,n){var r=n(14),o=n(20);t.exports=r(o)},function(t,e,n){var r=n(21);t.exports=function(t,e){return function(){var n=arguments.length;if(0===n)return e();var o=arguments[n-1];return r(o)||"function"!=typeof o[t]?e.apply(this,arguments):o[t].apply(o,Array.prototype.slice.call(arguments,0,n-1))}}},function(t,e,n){"use strict";(function(e){var r=n(5),o=n(174),i={"Content-Type":"application/x-www-form-urlencoded"};function u(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var a,s={adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==e)&&(a=n(66)),a),transformRequest:[function(t,e){return o(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t)?t:r.isArrayBufferView(t)?t.buffer:r.isURLSearchParams(t)?(u(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):r.isObject(t)?(u(e,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};s.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],(function(t){s.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){s.headers[t]=r.merge(i)})),t.exports=s}).call(this,n(17))},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(7)(n(4),"Map");t.exports=r},function(t,e,n){var r=n(208),o=n(215),i=n(217),u=n(218),a=n(219);function s(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=i,s.prototype.has=u,s.prototype.set=a,t.exports=s},function(t,e,n){var r=n(236),o=n(80),i=n(16);t.exports=function(t){return i(t)?r(t):o(t)}},function(t,e,n){var r=n(238),o=n(8),i=Object.prototype,u=i.hasOwnProperty,a=i.propertyIsEnumerable,s=r(function(){return arguments}())?r:function(t){return o(t)&&u.call(t,"callee")&&!a.call(t,"callee")};t.exports=s},function(t,e,n){(function(t){var r=n(4),o=n(239),i=e&&!e.nodeType&&e,u=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=u&&u.exports===i?r.Buffer:void 0,s=(a?a.isBuffer:void 0)||o;t.exports=s}).call(this,n(79)(t))},function(t,e,n){var r=n(240),o=n(241),i=n(242),u=i&&i.isTypedArray,a=u?o(u):r;t.exports=a},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(2),o=n(29),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(u.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(3),o=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(o)return o(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},function(t,e,n){var r=n(48),o=n(51);function i(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}i.prototype=r(o.prototype),i.prototype.constructor=i,t.exports=i},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t){return t.placeholder}},function(t,e,n){var r,o,i;!function(u){"use strict";if(null!=e&&"number"!=typeof e.nodeType)t.exports=u();else if(null!=n(189))o=[],void 0===(i="function"==typeof(r=u)?r.apply(e,o):r)||(t.exports=i);else{var a=u(),s="undefined"!=typeof self?self:$.global;"function"!=typeof s.btoa&&(s.btoa=a.btoa),"function"!=typeof s.atob&&(s.atob=a.atob)}}((function(){"use strict";var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function e(t){this.message=t}return e.prototype=new Error,e.prototype.name="InvalidCharacterError",{btoa:function(n){for(var r,o,i=String(n),u=0,a=t,s="";i.charAt(0|u)||(a="=",u%1);s+=a.charAt(63&r>>8-u%1*8)){if((o=i.charCodeAt(u+=3/4))>255)throw new e("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|o}return s},atob:function(n){var r=String(n).replace(/[=]+$/,"");if(r.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,i,u=0,a=0,s="";i=r.charAt(a++);~i&&(o=u%4?64*o+i:i,u++%4)?s+=String.fromCharCode(255&o>>(-2*u&6)):0)i=t.indexOf(i);return s}}}))},function(t,e,n){var r=n(293),o=n(93),i=n(52),u=n(33),a=r((function(t,e){var n=u(e,i(a));return o(t,32,void 0,e,n)}));a.placeholder={},t.exports=a},function(t,e,n){var r=n(34),o=n(301),i=n(302),u=n(303);t.exports={driversLicenseRegex:r,isValidUSLicense:o,validateUSDriversLicense:i,supportedStates:u}},function(t,e,n){"use strict";(function(t,r){n.d(e,"a",(function(){return _e}));var o=[];Object.freeze(o);var i={};function u(){return++Et.mobxGuid}function a(t){throw s(!1,t),"X"}function s(t,e){if(!t)throw new Error("[mobx] "+(e||"An invariant failed, however the error is obfuscated because this is a production build."))}Object.freeze(i);function c(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}var f=function(){};function l(t){return null!==t&&"object"==typeof t}function p(t){if(null===t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);return e===Object.prototype||null===e}function h(t,e,n){Object.defineProperty(t,e,{enumerable:!1,writable:!0,configurable:!0,value:n})}function d(t,e){var n="isMobX"+t;return e.prototype[n]=!0,function(t){return l(t)&&!0===t[n]}}function v(t){return t instanceof Map}function y(t){return t instanceof Set}function g(t){var e=new Set;for(var n in t)e.add(n);return Object.getOwnPropertySymbols(t).forEach((function(n){Object.getOwnPropertyDescriptor(t,n).enumerable&&e.add(n)})),Array.from(e)}function b(t){return t&&t.toString?t.toString():new String(t).toString()}function m(t){return null===t?null:"object"==typeof t?""+t:t}var x="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames,w=Symbol("mobx administration"),_=function(){function t(t){void 0===t&&(t="Atom@"+u()),this.name=t,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=new Set,this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=J.NOT_TRACKING}return t.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((function(t){return t()}))},t.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((function(t){return t()}))},t.prototype.reportObserved=function(){return Mt(this)},t.prototype.reportChanged=function(){$t(),function(t){if(t.lowestObserverState===J.STALE)return;t.lowestObserverState=J.STALE,t.observers.forEach((function(e){e.dependenciesState===J.UP_TO_DATE&&(e.isTracing!==Q.NONE&&Dt(e,t),e.onBecomeStale()),e.dependenciesState=J.STALE}))}(this),Ct()},t.prototype.toString=function(){return this.name},t}(),O=d("Atom",_);function A(t,e,n){void 0===e&&(e=f),void 0===n&&(n=f);var r,o=new _(t);return e!==f&&Yt("onBecomeObserved",o,e,r),n!==f&&Gt(o,n),o}var N={identity:function(t,e){return t===e},structural:function(t,e){return Ve(t,e)},default:function(t,e){return Object.is(t,e)},shallow:function(t,e){return Ve(t,e,1)}},S=function(t,e){return(S=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};
|
|
2
|
-
/*! *****************************************************************************
|
|
3
|
-
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
5
|
-
this file except in compliance with the License. You may obtain a copy of the
|
|
6
|
-
License at http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
-
|
|
8
|
-
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
9
|
-
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
|
10
|
-
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
|
11
|
-
MERCHANTABLITY OR NON-INFRINGEMENT.
|
|
12
|
-
|
|
13
|
-
See the Apache Version 2.0 License for specific language governing permissions
|
|
14
|
-
and limitations under the License.
|
|
15
|
-
***************************************************************************** */var j=function(){return(j=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)};function E(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}function R(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)u.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return u}function T(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(R(arguments[e]));return t}var L=Symbol("mobx did run lazy initializers"),$=Symbol("mobx pending decorators"),C={},M={};function D(t,e){var n=e?C:M;return n[t]||(n[t]={configurable:!0,enumerable:e,get:function(){return k(this),this[t]},set:function(e){k(this),this[t]=e}})}function k(t){var e,n;if(!0!==t[L]){var r=t[$];if(r){h(t,L,!0);var o=T(Object.getOwnPropertySymbols(r),Object.keys(r));try{for(var i=E(o),u=i.next();!u.done;u=i.next()){var a=r[u.value];a.propertyCreator(t,a.prop,a.descriptor,a.decoratorTarget,a.decoratorArguments)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}}}}function I(t,e){return function(){var n,r=function(r,o,i,u){if(!0===u)return e(r,o,i,r,n),null;if(!Object.prototype.hasOwnProperty.call(r,$)){var a=r[$];h(r,$,j({},a))}return r[$][o]={prop:o,propertyCreator:e,descriptor:i,decoratorTarget:r,decoratorArguments:n},D(o,t)};return P(arguments)?(n=o,r.apply(null,arguments)):(n=Array.prototype.slice.call(arguments),r)}}function P(t){return(2===t.length||3===t.length)&&("string"==typeof t[1]||"symbol"==typeof t[1])||4===t.length&&!0===t[3]}function U(t,e,n){return re(t)?t:Array.isArray(t)?Y.array(t,{name:n}):p(t)?Y.object(t,void 0,{name:n}):v(t)?Y.map(t,{name:n}):y(t)?Y.set(t,{name:n}):t}function V(t){return t}function B(e){s(e);var n=I(!0,(function(t,n,r,o,i){var u=r?r.initializer?r.initializer.call(t):r.value:void 0;Le(t).addObservableProp(n,u,e)})),r=(void 0!==t&&t.env,n);return r.enhancer=e,r}var z={deep:!0,name:void 0,defaultDecorator:void 0,proxy:!0};function Z(t){return null==t?z:"string"==typeof t?{name:t,deep:!0,proxy:!0}:t}Object.freeze(z);var F=B(U),q=B((function(t,e,n){return null==t||ke(t)||_e(t)||Se(t)||Re(t)?t:Array.isArray(t)?Y.array(t,{name:n,deep:!1}):p(t)?Y.object(t,void 0,{name:n,deep:!1}):v(t)?Y.map(t,{name:n,deep:!1}):y(t)?Y.set(t,{name:n,deep:!1}):a(!1)})),W=B(V),H=B((function(t,e,n){return Ve(t,e)?e:t}));function K(t){return t.defaultDecorator?t.defaultDecorator.enhancer:!1===t.deep?V:U}var G={box:function(t,e){arguments.length>2&&X("box");var n=Z(e);return new xt(t,K(n),n.name,!0,n.equals)},array:function(t,e){arguments.length>2&&X("array");var n=Z(e);return ge(t,K(n),n.name)},map:function(t,e){arguments.length>2&&X("map");var n=Z(e);return new Ne(t,K(n),n.name)},set:function(t,e){arguments.length>2&&X("set");var n=Z(e);return new Ee(t,K(n),n.name)},object:function(t,e,n){"string"==typeof arguments[1]&&X("object");var r=Z(n);if(!1===r.proxy)return Xt({},t,e,r);var o=Jt(r),i=Xt({},void 0,void 0,r),u=ce(i);return Qt(u,t,e,o),u},ref:W,shallow:q,deep:F,struct:H},Y=function(t,e,n){if("string"==typeof arguments[1]||"symbol"==typeof arguments[1])return F.apply(null,arguments);if(re(t))return t;var r=p(t)?Y.object(t,e,n):Array.isArray(t)?Y.array(t,e):v(t)?Y.map(t,e):y(t)?Y.set(t,e):t;if(r!==t)return r;a(!1)};function X(t){a("Expected one or two arguments to observable."+t+". Did you accidentally try to use observable."+t+" as decorator?")}Object.keys(G).forEach((function(t){return Y[t]=G[t]}));var J,Q,tt=I(!1,(function(t,e,n,r,o){var i=n.get,u=n.set,a=o[0]||{};Le(t).addComputedProp(t,e,j({get:i,set:u,context:t},a))}));tt({equals:N.structural});!function(t){t[t.NOT_TRACKING=-1]="NOT_TRACKING",t[t.UP_TO_DATE=0]="UP_TO_DATE",t[t.POSSIBLY_STALE=1]="POSSIBLY_STALE",t[t.STALE=2]="STALE"}(J||(J={})),function(t){t[t.NONE=0]="NONE",t[t.LOG=1]="LOG",t[t.BREAK=2]="BREAK"}(Q||(Q={}));var et=function(t){this.cause=t};function nt(t){return t instanceof et}function rt(t){switch(t.dependenciesState){case J.UP_TO_DATE:return!1;case J.NOT_TRACKING:case J.STALE:return!0;case J.POSSIBLY_STALE:for(var e=ft(!0),n=st(),r=t.observing,o=r.length,i=0;i<o;i++){var u=r[i];if(_t(u)){if(Et.disableErrorBoundaries)u.get();else try{u.get()}catch(t){return ct(n),lt(e),!0}if(t.dependenciesState===J.STALE)return ct(n),lt(e),!0}}return pt(t),ct(n),lt(e),!1}}function ot(t){var e=t.observers.size>0;Et.computationDepth>0&&e&&a(!1),Et.allowStateChanges||!e&&"strict"!==Et.enforceActions||a(!1)}function it(t,e,n){var r=ft(!0);pt(t),t.newObserving=new Array(t.observing.length+100),t.unboundDepsCount=0,t.runId=++Et.runId;var o,i=Et.trackingDerivation;if(Et.trackingDerivation=t,!0===Et.disableErrorBoundaries)o=e.call(n);else try{o=e.call(n)}catch(t){o=new et(t)}return Et.trackingDerivation=i,function(t){for(var e=t.observing,n=t.observing=t.newObserving,r=J.UP_TO_DATE,o=0,i=t.unboundDepsCount,u=0;u<i;u++){0===(a=n[u]).diffValue&&(a.diffValue=1,o!==u&&(n[o]=a),o++),a.dependenciesState>r&&(r=a.dependenciesState)}n.length=o,t.newObserving=null,i=e.length;for(;i--;){0===(a=e[i]).diffValue&&Tt(a,t),a.diffValue=0}for(;o--;){var a;1===(a=n[o]).diffValue&&(a.diffValue=0,Rt(a,t))}r!==J.UP_TO_DATE&&(t.dependenciesState=r,t.onBecomeStale())}(t),lt(r),o}function ut(t){var e=t.observing;t.observing=[];for(var n=e.length;n--;)Tt(e[n],t);t.dependenciesState=J.NOT_TRACKING}function at(t){var e=st();try{return t()}finally{ct(e)}}function st(){var t=Et.trackingDerivation;return Et.trackingDerivation=null,t}function ct(t){Et.trackingDerivation=t}function ft(t){var e=Et.allowStateReads;return Et.allowStateReads=t,e}function lt(t){Et.allowStateReads=t}function pt(t){if(t.dependenciesState!==J.UP_TO_DATE){t.dependenciesState=J.UP_TO_DATE;for(var e=t.observing,n=e.length;n--;)e[n].lowestObserverState=J.UP_TO_DATE}}var ht=0,dt=1,vt=Object.getOwnPropertyDescriptor((function(){}),"name");vt&&vt.configurable;function yt(t,e,n){var r=function(){return gt(t,e,n||this,arguments)};return r.isMobxAction=!0,r}function gt(t,e,n,r){var o=function(t,e,n){var r=0;var o=st();$t();var i=bt(!0),u=ft(!0),a={prevDerivation:o,prevAllowStateChanges:i,prevAllowStateReads:u,notifySpy:!1,startTime:r,actionId:dt++,parentActionId:ht};return ht=a.actionId,a}();try{return e.apply(n,r)}catch(t){throw o.error=t,t}finally{!function(t){ht!==t.actionId&&a("invalid action stack. did you forget to finish an action?");ht=t.parentActionId,void 0!==t.error&&(Et.suppressReactionErrors=!0);mt(t.prevAllowStateChanges),lt(t.prevAllowStateReads),Ct(),ct(t.prevDerivation),t.notifySpy&&!1;Et.suppressReactionErrors=!1}(o)}}function bt(t){var e=Et.allowStateChanges;return Et.allowStateChanges=t,e}function mt(t){Et.allowStateChanges=t}var xt=function(t){function e(e,n,r,o,i){void 0===r&&(r="ObservableValue@"+u()),void 0===o&&(o=!0),void 0===i&&(i=N.default);var a=t.call(this,r)||this;return a.enhancer=n,a.name=r,a.equals=i,a.hasUnreportedChange=!1,a.value=n(e,void 0,r),a}return function(t,e){function n(){this.constructor=t}S(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}(e,t),e.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},e.prototype.set=function(t){this.value;if((t=this.prepareNewValue(t))!==Et.UNCHANGED){0,this.setNewValue(t)}},e.prototype.prepareNewValue=function(t){if(ot(this),fe(this)){var e=pe(this,{object:this,type:"update",newValue:t});if(!e)return Et.UNCHANGED;t=e.newValue}return t=this.enhancer(t,this.value,this.name),this.equals(this.value,t)?Et.UNCHANGED:t},e.prototype.setNewValue=function(t){var e=this.value;this.value=t,this.reportChanged(),he(this)&&ve(this,{type:"update",object:this,newValue:t,oldValue:e})},e.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},e.prototype.intercept=function(t){return le(this,t)},e.prototype.observe=function(t,e){return e&&t({object:this,type:"update",newValue:this.value,oldValue:void 0}),de(this,t)},e.prototype.toJSON=function(){return this.get()},e.prototype.toString=function(){return this.name+"["+this.value+"]"},e.prototype.valueOf=function(){return m(this.get())},e.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},e}(_),wt=(d("ObservableValue",xt),function(){function t(t){this.dependenciesState=J.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=new Set,this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=J.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+u(),this.value=new et(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=Q.NONE,s(t.get,"missing option for computed: get"),this.derivation=t.get,this.name=t.name||"ComputedValue@"+u(),t.set&&(this.setter=yt(this.name+"-setter",t.set)),this.equals=t.equals||(t.compareStructural||t.struct?N.structural:N.default),this.scope=t.context,this.requiresReaction=!!t.requiresReaction,this.keepAlive=!!t.keepAlive}return t.prototype.onBecomeStale=function(){!function(t){if(t.lowestObserverState!==J.UP_TO_DATE)return;t.lowestObserverState=J.POSSIBLY_STALE,t.observers.forEach((function(e){e.dependenciesState===J.UP_TO_DATE&&(e.dependenciesState=J.POSSIBLY_STALE,e.isTracing!==Q.NONE&&Dt(e,t),e.onBecomeStale())}))}(this)},t.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((function(t){return t()}))},t.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((function(t){return t()}))},t.prototype.get=function(){this.isComputing&&a("Cycle detected in computation "+this.name+": "+this.derivation),0!==Et.inBatch||0!==this.observers.size||this.keepAlive?(Mt(this),rt(this)&&this.trackAndCompute()&&function(t){if(t.lowestObserverState===J.STALE)return;t.lowestObserverState=J.STALE,t.observers.forEach((function(e){e.dependenciesState===J.POSSIBLY_STALE?e.dependenciesState=J.STALE:e.dependenciesState===J.UP_TO_DATE&&(t.lowestObserverState=J.UP_TO_DATE)}))}(this)):rt(this)&&(this.warnAboutUntrackedRead(),$t(),this.value=this.computeValue(!1),Ct());var t=this.value;if(nt(t))throw t.cause;return t},t.prototype.peek=function(){var t=this.computeValue(!1);if(nt(t))throw t.cause;return t},t.prototype.set=function(t){if(this.setter){s(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,t)}finally{this.isRunningSetter=!1}}else s(!1,!1)},t.prototype.trackAndCompute=function(){var t=this.value,e=this.dependenciesState===J.NOT_TRACKING,n=this.computeValue(!0),r=e||nt(t)||nt(n)||!this.equals(t,n);return r&&(this.value=n),r},t.prototype.computeValue=function(t){var e;if(this.isComputing=!0,Et.computationDepth++,t)e=it(this,this.derivation,this.scope);else if(!0===Et.disableErrorBoundaries)e=this.derivation.call(this.scope);else try{e=this.derivation.call(this.scope)}catch(t){e=new et(t)}return Et.computationDepth--,this.isComputing=!1,e},t.prototype.suspend=function(){this.keepAlive||(ut(this),this.value=void 0)},t.prototype.observe=function(t,e){var n=this,r=!0,o=void 0;return Wt((function(){var i=n.get();if(!r||e){var u=st();t({type:"update",object:n,newValue:i,oldValue:o}),ct(u)}r=!1,o=i}))},t.prototype.warnAboutUntrackedRead=function(){},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},t.prototype.valueOf=function(){return m(this.get())},t.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},t}()),_t=d("ComputedValue",wt),Ot=function(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1},At={};function Nt(){return"undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:At}var St=!0,jt=!1,Et=function(){var t=Nt();return t.__mobxInstanceCount>0&&!t.__mobxGlobals&&(St=!1),t.__mobxGlobals&&t.__mobxGlobals.version!==(new Ot).version&&(St=!1),St?t.__mobxGlobals?(t.__mobxInstanceCount+=1,t.__mobxGlobals.UNCHANGED||(t.__mobxGlobals.UNCHANGED={}),t.__mobxGlobals):(t.__mobxInstanceCount=1,t.__mobxGlobals=new Ot):(setTimeout((function(){jt||a("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")}),1),new Ot)}();function Rt(t,e){t.observers.add(e),t.lowestObserverState>e.dependenciesState&&(t.lowestObserverState=e.dependenciesState)}function Tt(t,e){t.observers.delete(e),0===t.observers.size&&Lt(t)}function Lt(t){!1===t.isPendingUnobservation&&(t.isPendingUnobservation=!0,Et.pendingUnobservations.push(t))}function $t(){Et.inBatch++}function Ct(){if(0==--Et.inBatch){Pt();for(var t=Et.pendingUnobservations,e=0;e<t.length;e++){var n=t[e];n.isPendingUnobservation=!1,0===n.observers.size&&(n.isBeingObserved&&(n.isBeingObserved=!1,n.onBecomeUnobserved()),n instanceof wt&&n.suspend())}Et.pendingUnobservations=[]}}function Mt(t){var e=Et.trackingDerivation;return null!==e?(e.runId!==t.lastAccessedBy&&(t.lastAccessedBy=e.runId,e.newObserving[e.unboundDepsCount++]=t,t.isBeingObserved||(t.isBeingObserved=!0,t.onBecomeObserved())),!0):(0===t.observers.size&&Et.inBatch>0&&Lt(t),!1)}function Dt(t,e){if(console.log("[mobx.trace] '"+t.name+"' is invalidated due to a change in: '"+e.name+"'"),t.isTracing===Q.BREAK){var n=[];!function t(e,n,r){if(n.length>=1e3)return void n.push("(and many more)");n.push(""+new Array(r).join("\t")+e.name),e.dependencies&&e.dependencies.forEach((function(e){return t(e,n,r+1)}))}((r=t,te(Ie(r,o))),n,1),new Function("debugger;\n/*\nTracing '"+t.name+"'\n\nYou are entering this break point because derivation '"+t.name+"' is being traced and '"+e.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(t instanceof wt?t.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+n.join("\n")+"\n*/\n ")()}var r,o}var kt=function(){function t(t,e,n,r){void 0===t&&(t="Reaction@"+u()),void 0===r&&(r=!1),this.name=t,this.onInvalidate=e,this.errorHandler=n,this.requiresObservable=r,this.observing=[],this.newObserving=[],this.dependenciesState=J.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+u(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=Q.NONE}return t.prototype.onBecomeStale=function(){this.schedule()},t.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,Et.pendingReactions.push(this),Pt())},t.prototype.isScheduled=function(){return this._isScheduled},t.prototype.runReaction=function(){if(!this.isDisposed){if($t(),this._isScheduled=!1,rt(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending}catch(t){this.reportExceptionInDerivation(t)}}Ct()}},t.prototype.track=function(t){if(!this.isDisposed){$t();0,this._isRunning=!0;var e=it(this,t,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&ut(this),nt(e)&&this.reportExceptionInDerivation(e.cause),Ct()}},t.prototype.reportExceptionInDerivation=function(t){var e=this;if(this.errorHandler)this.errorHandler(t,this);else{if(Et.disableErrorBoundaries)throw t;var n="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";Et.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(n,t),Et.globalReactionErrorHandlers.forEach((function(n){return n(t,e)}))}},t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||($t(),ut(this),Ct()))},t.prototype.getDisposer=function(){var t=this.dispose.bind(this);return t[w]=this,t},t.prototype.toString=function(){return"Reaction["+this.name+"]"},t.prototype.trace=function(t){void 0===t&&(t=!1),function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=!1;"boolean"==typeof t[t.length-1]&&(n=t.pop());var r=oe(t);if(!r)return a(!1);r.isTracing===Q.NONE&&console.log("[mobx.trace] '"+r.name+"' tracing enabled");r.isTracing=n?Q.BREAK:Q.LOG}(this,t)},t}();var It=function(t){return t()};function Pt(){Et.inBatch>0||Et.isRunningReactions||It(Ut)}function Ut(){Et.isRunningReactions=!0;for(var t=Et.pendingReactions,e=0;t.length>0;){100==++e&&(console.error("Reaction doesn't converge to a stable state after 100 iterations. Probably there is a cycle in the reactive function: "+t[0]),t.splice(0));for(var n=t.splice(0),r=0,o=n.length;r<o;r++)n[r].runReaction()}Et.isRunningReactions=!1}var Vt=d("Reaction",kt);function Bt(){a(!1)}function zt(t){return function(e,n,r){if(r){if(r.value)return{value:yt(t,r.value),enumerable:!1,configurable:!0,writable:!0};var o=r.initializer;return{enumerable:!1,configurable:!0,writable:!0,initializer:function(){return yt(t,o.call(this))}}}return Zt(t).apply(this,arguments)}}function Zt(t){return function(e,n,r){Object.defineProperty(e,n,{configurable:!0,enumerable:!1,get:function(){},set:function(e){h(this,n,Ft(t,e))}})}}var Ft=function(t,e,n,r){return 1===arguments.length&&"function"==typeof t?yt(t.name||"<unnamed action>",t):2===arguments.length&&"function"==typeof e?yt(t,e):1===arguments.length&&"string"==typeof t?zt(t):!0!==r?zt(e).apply(null,arguments):void h(t,e,yt(t.name||e,n.value,this))};function qt(t,e,n){h(t,e,yt(e,n.bind(t)))}function Wt(t,e){void 0===e&&(e=i);var n,r=e&&e.name||t.name||"Autorun@"+u();if(!e.scheduler&&!e.delay)n=new kt(r,(function(){this.track(s)}),e.onError,e.requiresObservable);else{var o=Kt(e),a=!1;n=new kt(r,(function(){a||(a=!0,o((function(){a=!1,n.isDisposed||n.track(s)})))}),e.onError,e.requiresObservable)}function s(){t(n)}return n.schedule(),n.getDisposer()}Ft.bound=function(t,e,n,r){return!0===r?(qt(t,e,n.value),null):n?{configurable:!0,enumerable:!1,get:function(){return qt(this,e,n.value||n.initializer.call(this)),this[e]},set:Bt}:{enumerable:!1,configurable:!0,set:function(t){qt(this,e,t)},get:function(){}}};var Ht=function(t){return t()};function Kt(t){return t.scheduler?t.scheduler:t.delay?function(e){return setTimeout(e,t.delay)}:Ht}function Gt(t,e,n){return Yt("onBecomeUnobserved",t,e,n)}function Yt(t,e,n,r){var o="function"==typeof r?Ie(e,n):Ie(e),i="function"==typeof r?r:n,u=t+"Listeners";return o[u]?o[u].add(i):o[u]=new Set([i]),"function"!=typeof o[t]?a(!1):function(){var t=o[u];t&&(t.delete(i),0===t.size&&delete o[u])}}function Xt(t,e,n,r){var o=Jt(r=Z(r));return k(t),Le(t,r.name,o.enhancer),e&&Qt(t,e,n,o),t}function Jt(t){return t.defaultDecorator||(!1===t.deep?W:F)}function Qt(t,e,n,r){var o,i;$t();try{var u=x(e);try{for(var a=E(u),s=a.next();!s.done;s=a.next()){var c=s.value,f=Object.getOwnPropertyDescriptor(e,c);0;var l=(n&&c in n?n[c]:f.get?tt:r)(t,c,f,!0);l&&Object.defineProperty(t,c,l)}}catch(t){o={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}}finally{Ct()}}function te(t){var e,n,r={name:t.name};return t.observing&&t.observing.length>0&&(r.dependencies=(e=t.observing,n=[],e.forEach((function(t){-1===n.indexOf(t)&&n.push(t)})),n).map(te)),r}function ee(){this.message="FLOW_CANCELLED"}function ne(t,e){return null!=t&&(void 0!==e?!!ke(t)&&t[w].values.has(e):ke(t)||!!t[w]||O(t)||Vt(t)||_t(t))}function re(t){return 1!==arguments.length&&a(!1),ne(t)}ee.prototype=Object.create(Error.prototype);function oe(t){switch(t.length){case 0:return Et.trackingDerivation;case 1:return Ie(t[0]);case 2:return Ie(t[0],t[1])}}function ie(t,e){void 0===e&&(e=void 0),$t();try{return t.apply(e)}finally{Ct()}}function ue(t){return t[w]}function ae(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t}var se={has:function(t,e){if(e===w||"constructor"===e||e===L)return!0;var n=ue(t);return ae(e)?n.has(e):e in t},get:function(t,e){if(e===w||"constructor"===e||e===L)return t[e];var n=ue(t),r=n.values.get(e);if(r instanceof _){var o=r.get();return void 0===o&&n.has(e),o}return ae(e)&&n.has(e),t[e]},set:function(t,e,n){return!!ae(e)&&(function t(e,n,r){if(2!==arguments.length||Re(e))if(ke(e)){var o=e[w],i=o.values.get(n);i?o.write(n,r):o.addObservableProp(n,r,o.defaultEnhancer)}else if(Se(e))e.set(n,r);else if(Re(e))e.add(n);else{if(!_e(e))return a(!1);"number"!=typeof n&&(n=parseInt(n,10)),s(n>=0,"Not a valid index: '"+n+"'"),$t(),n>=e.length&&(e.length=n+1),e[n]=r,Ct()}else{$t();var u=n;try{for(var c in u)t(e,c,u[c])}finally{Ct()}}}(t,e,n),!0)},deleteProperty:function(t,e){return!!ae(e)&&(ue(t).remove(e),!0)},ownKeys:function(t){return ue(t).keysAtom.reportObserved(),Reflect.ownKeys(t)},preventExtensions:function(t){return a("Dynamic observable objects cannot be frozen"),!1}};function ce(t){var e=new Proxy(t,se);return t[w].proxy=e,e}function fe(t){return void 0!==t.interceptors&&t.interceptors.length>0}function le(t,e){var n=t.interceptors||(t.interceptors=[]);return n.push(e),c((function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)}))}function pe(t,e){var n=st();try{for(var r=T(t.interceptors||[]),o=0,i=r.length;o<i&&(s(!(e=r[o](e))||e.type,"Intercept handlers should return nothing or a change object"),e);o++);return e}finally{ct(n)}}function he(t){return void 0!==t.changeListeners&&t.changeListeners.length>0}function de(t,e){var n=t.changeListeners||(t.changeListeners=[]);return n.push(e),c((function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)}))}function ve(t,e){var n=st(),r=t.changeListeners;if(r){for(var o=0,i=(r=r.slice()).length;o<i;o++)r[o](e);ct(n)}}var ye={get:function(t,e){return e===w?t[w]:"length"===e?t[w].getArrayLength():"number"==typeof e?me.get.call(t,e):"string"!=typeof e||isNaN(e)?me.hasOwnProperty(e)?me[e]:t[e]:me.get.call(t,parseInt(e))},set:function(t,e,n){return"length"===e&&t[w].setArrayLength(n),"number"==typeof e&&me.set.call(t,e,n),"symbol"==typeof e||isNaN(e)?t[e]=n:me.set.call(t,parseInt(e),n),!0},preventExtensions:function(t){return a("Observable arrays cannot be frozen"),!1}};function ge(t,e,n,r){void 0===n&&(n="ObservableArray@"+u()),void 0===r&&(r=!1);var o,i,a,s=new be(n,e,r);o=s.values,i=w,a=s,Object.defineProperty(o,i,{enumerable:!1,writable:!1,configurable:!0,value:a});var c=new Proxy(s.values,ye);if(s.proxy=c,t&&t.length){var f=bt(!0);s.spliceWithArray(0,0,t),mt(f)}return c}var be=function(){function t(t,e,n){this.owned=n,this.values=[],this.proxy=void 0,this.lastKnownLength=0,this.atom=new _(t||"ObservableArray@"+u()),this.enhancer=function(n,r){return e(n,r,t+"[..]")}}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.dehanceValues=function(t){return void 0!==this.dehancer&&t.length>0?t.map(this.dehancer):t},t.prototype.intercept=function(t){return le(this,t)},t.prototype.observe=function(t,e){return void 0===e&&(e=!1),e&&t({object:this.proxy,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),de(this,t)},t.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},t.prototype.setArrayLength=function(t){if("number"!=typeof t||t<0)throw new Error("[mobx.array] Out of range: "+t);var e=this.values.length;if(t!==e)if(t>e){for(var n=new Array(t-e),r=0;r<t-e;r++)n[r]=void 0;this.spliceWithArray(e,0,n)}else this.spliceWithArray(t,e-t)},t.prototype.updateArrayLength=function(t,e){if(t!==this.lastKnownLength)throw new Error("[mobx] Modification exception: the internal structure of an observable array was changed.");this.lastKnownLength+=e},t.prototype.spliceWithArray=function(t,e,n){var r=this;ot(this.atom);var i=this.values.length;if(void 0===t?t=0:t>i?t=i:t<0&&(t=Math.max(0,i+t)),e=1===arguments.length?i-t:null==e?0:Math.max(0,Math.min(e,i-t)),void 0===n&&(n=o),fe(this)){var u=pe(this,{object:this.proxy,type:"splice",index:t,removedCount:e,added:n});if(!u)return o;e=u.removedCount,n=u.added}n=0===n.length?n:n.map((function(t){return r.enhancer(t,void 0)}));var a=this.spliceItemsIntoValues(t,e,n);return 0===e&&0===n.length||this.notifyArraySplice(t,n,a),this.dehanceValues(a)},t.prototype.spliceItemsIntoValues=function(t,e,n){var r;if(n.length<1e4)return(r=this.values).splice.apply(r,T([t,e],n));var o=this.values.slice(t,t+e);return this.values=this.values.slice(0,t).concat(n,this.values.slice(t+e)),o},t.prototype.notifyArrayChildUpdate=function(t,e,n){var r=!this.owned&&!1,o=he(this),i=o||r?{object:this.proxy,type:"update",index:t,newValue:e,oldValue:n}:null;this.atom.reportChanged(),o&&ve(this,i)},t.prototype.notifyArraySplice=function(t,e,n){var r=!this.owned&&!1,o=he(this),i=o||r?{object:this.proxy,type:"splice",index:t,removed:n,added:e,removedCount:n.length,addedCount:e.length}:null;this.atom.reportChanged(),o&&ve(this,i)},t}(),me={intercept:function(t){return this[w].intercept(t)},observe:function(t,e){return void 0===e&&(e=!1),this[w].observe(t,e)},clear:function(){return this.splice(0)},replace:function(t){var e=this[w];return e.spliceWithArray(0,e.values.length,t)},toJS:function(){return this.slice()},toJSON:function(){return this.toJS()},splice:function(t,e){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];var o=this[w];switch(arguments.length){case 0:return[];case 1:return o.spliceWithArray(t);case 2:return o.spliceWithArray(t,e)}return o.spliceWithArray(t,e,n)},spliceWithArray:function(t,e,n){return this[w].spliceWithArray(t,e,n)},push:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this[w];return n.spliceWithArray(n.values.length,0,t),n.values.length},pop:function(){return this.splice(Math.max(this[w].values.length-1,0),1)[0]},shift:function(){return this.splice(0,1)[0]},unshift:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this[w];return n.spliceWithArray(0,0,t),n.values.length},reverse:function(){var t=this.slice();return t.reverse.apply(t,arguments)},sort:function(t){var e=this.slice();return e.sort.apply(e,arguments)},remove:function(t){var e=this[w],n=e.dehanceValues(e.values).indexOf(t);return n>-1&&(this.splice(n,1),!0)},get:function(t){var e=this[w];if(e){if(t<e.values.length)return e.atom.reportObserved(),e.dehanceValue(e.values[t]);console.warn("[mobx.array] Attempt to read an array index ("+t+") that is out of bounds ("+e.values.length+"). Please check length first. Out of bound indices will not be tracked by MobX")}},set:function(t,e){var n=this[w],r=n.values;if(t<r.length){ot(n.atom);var o=r[t];if(fe(n)){var i=pe(n,{type:"update",object:n.proxy,index:t,newValue:e});if(!i)return;e=i.newValue}(e=n.enhancer(e,o))!==o&&(r[t]=e,n.notifyArrayChildUpdate(t,e,o))}else{if(t!==r.length)throw new Error("[mobx.array] Index out of bounds, "+t+" is larger than "+r.length);n.spliceWithArray(t,0,[e])}}};["concat","flat","includes","indexOf","join","lastIndexOf","slice","toString","toLocaleString"].forEach((function(t){"function"==typeof Array.prototype[t]&&(me[t]=function(){var e=this[w];e.atom.reportObserved();var n=e.dehanceValues(e.values);return n[t].apply(n,arguments)})})),["every","filter","find","findIndex","flatMap","forEach","map","some"].forEach((function(t){"function"==typeof Array.prototype[t]&&(me[t]=function(e,n){var r=this,o=this[w];return o.atom.reportObserved(),o.dehanceValues(o.values)[t]((function(t,o){return e.call(n,t,o,r)}),n)})})),["reduce","reduceRight"].forEach((function(t){me[t]=function(){var e=this,n=this[w];n.atom.reportObserved();var r=arguments[0];return arguments[0]=function(t,o,i){return o=n.dehanceValue(o),r(t,o,i,e)},n.values[t].apply(n.values,arguments)}}));var xe,we=d("ObservableArrayAdministration",be);function _e(t){return l(t)&&we(t[w])}var Oe,Ae={},Ne=function(){function t(t,e,n){if(void 0===e&&(e=U),void 0===n&&(n="ObservableMap@"+u()),this.enhancer=e,this.name=n,this[xe]=Ae,this._keysAtom=A(this.name+".keys()"),this[Symbol.toStringTag]="Map","function"!=typeof Map)throw new Error("mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js");this._data=new Map,this._hasMap=new Map,this.merge(t)}return t.prototype._has=function(t){return this._data.has(t)},t.prototype.has=function(t){var e=this;if(!Et.trackingDerivation)return this._has(t);var n=this._hasMap.get(t);if(!n){var r=n=new xt(this._has(t),V,this.name+"."+b(t)+"?",!1);this._hasMap.set(t,r),Gt(r,(function(){return e._hasMap.delete(t)}))}return n.get()},t.prototype.set=function(t,e){var n=this._has(t);if(fe(this)){var r=pe(this,{type:n?"update":"add",object:this,newValue:e,name:t});if(!r)return this;e=r.newValue}return n?this._updateValue(t,e):this._addValue(t,e),this},t.prototype.delete=function(t){var e=this;if((ot(this._keysAtom),fe(this))&&!(r=pe(this,{type:"delete",object:this,name:t})))return!1;if(this._has(t)){var n=he(this),r=n?{type:"delete",object:this,oldValue:this._data.get(t).value,name:t}:null;return ie((function(){e._keysAtom.reportChanged(),e._updateHasMapEntry(t,!1),e._data.get(t).setNewValue(void 0),e._data.delete(t)})),n&&ve(this,r),!0}return!1},t.prototype._updateHasMapEntry=function(t,e){var n=this._hasMap.get(t);n&&n.setNewValue(e)},t.prototype._updateValue=function(t,e){var n=this._data.get(t);if((e=n.prepareNewValue(e))!==Et.UNCHANGED){var r=he(this),o=r?{type:"update",object:this,oldValue:n.value,name:t,newValue:e}:null;0,n.setNewValue(e),r&&ve(this,o)}},t.prototype._addValue=function(t,e){var n=this;ot(this._keysAtom),ie((function(){var r=new xt(e,n.enhancer,n.name+"."+b(t),!1);n._data.set(t,r),e=r.value,n._updateHasMapEntry(t,!0),n._keysAtom.reportChanged()}));var r=he(this),o=r?{type:"add",object:this,name:t,newValue:e}:null;r&&ve(this,o)},t.prototype.get=function(t){return this.has(t)?this.dehanceValue(this._data.get(t).get()):this.dehanceValue(void 0)},t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.keys=function(){return this._keysAtom.reportObserved(),this._data.keys()},t.prototype.values=function(){var t=this,e=this.keys();return Ze({next:function(){var n=e.next(),r=n.done,o=n.value;return{done:r,value:r?void 0:t.get(o)}}})},t.prototype.entries=function(){var t=this,e=this.keys();return Ze({next:function(){var n=e.next(),r=n.done,o=n.value;return{done:r,value:r?void 0:[o,t.get(o)]}}})},t.prototype[(xe=w,Symbol.iterator)]=function(){return this.entries()},t.prototype.forEach=function(t,e){var n,r;try{for(var o=E(this),i=o.next();!i.done;i=o.next()){var u=R(i.value,2),a=u[0],s=u[1];t.call(e,s,a,this)}}catch(t){n={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}},t.prototype.merge=function(t){var e=this;return Se(t)&&(t=t.toJS()),ie((function(){var n=bt(!0);try{p(t)?g(t).forEach((function(n){return e.set(n,t[n])})):Array.isArray(t)?t.forEach((function(t){var n=R(t,2),r=n[0],o=n[1];return e.set(r,o)})):v(t)?(t.constructor!==Map&&a("Cannot initialize from classes that inherit from Map: "+t.constructor.name),t.forEach((function(t,n){return e.set(n,t)}))):null!=t&&a("Cannot initialize map from "+t)}finally{mt(n)}})),this},t.prototype.clear=function(){var t=this;ie((function(){at((function(){var e,n;try{for(var r=E(t.keys()),o=r.next();!o.done;o=r.next()){var i=o.value;t.delete(i)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}}))}))},t.prototype.replace=function(t){var e=this;return ie((function(){var n,r,o,i,u=function(t){if(v(t)||Se(t))return t;if(Array.isArray(t))return new Map(t);if(p(t)){var e=new Map;for(var n in t)e.set(n,t[n]);return e}return a("Cannot convert to map from '"+t+"'")}(t),s=new Map,c=!1;try{for(var f=E(e._data.keys()),l=f.next();!l.done;l=f.next()){var h=l.value;if(!u.has(h))if(e.delete(h))c=!0;else{var d=e._data.get(h);s.set(h,d)}}}catch(t){n={error:t}}finally{try{l&&!l.done&&(r=f.return)&&r.call(f)}finally{if(n)throw n.error}}try{for(var y=E(u.entries()),g=y.next();!g.done;g=y.next()){var b=R(g.value,2),m=(h=b[0],d=b[1],e._data.has(h));if(e.set(h,d),e._data.has(h)){var x=e._data.get(h);s.set(h,x),m||(c=!0)}}}catch(t){o={error:t}}finally{try{g&&!g.done&&(i=y.return)&&i.call(y)}finally{if(o)throw o.error}}if(!c)if(e._data.size!==s.size)e._keysAtom.reportChanged();else for(var w=e._data.keys(),_=s.keys(),O=w.next(),A=_.next();!O.done;){if(O.value!==A.value){e._keysAtom.reportChanged();break}O=w.next(),A=_.next()}e._data=s})),this},Object.defineProperty(t.prototype,"size",{get:function(){return this._keysAtom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),t.prototype.toPOJO=function(){var t,e,n={};try{for(var r=E(this),o=r.next();!o.done;o=r.next()){var i=R(o.value,2),u=i[0],a=i[1];n["symbol"==typeof u?u:b(u)]=a}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return n},t.prototype.toJS=function(){return new Map(this)},t.prototype.toJSON=function(){return this.toPOJO()},t.prototype.toString=function(){var t=this;return this.name+"[{ "+Array.from(this.keys()).map((function(e){return b(e)+": "+t.get(e)})).join(", ")+" }]"},t.prototype.observe=function(t,e){return de(this,t)},t.prototype.intercept=function(t){return le(this,t)},t}(),Se=d("ObservableMap",Ne),je={},Ee=function(){function t(t,e,n){if(void 0===e&&(e=U),void 0===n&&(n="ObservableSet@"+u()),this.name=n,this[Oe]=je,this._data=new Set,this._atom=A(this.name),this[Symbol.toStringTag]="Set","function"!=typeof Set)throw new Error("mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js");this.enhancer=function(t,r){return e(t,r,n)},t&&this.replace(t)}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.clear=function(){var t=this;ie((function(){at((function(){var e,n;try{for(var r=E(t._data.values()),o=r.next();!o.done;o=r.next()){var i=o.value;t.delete(i)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}}))}))},t.prototype.forEach=function(t,e){var n,r;try{for(var o=E(this),i=o.next();!i.done;i=o.next()){var u=i.value;t.call(e,u,u,this)}}catch(t){n={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}},Object.defineProperty(t.prototype,"size",{get:function(){return this._atom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),t.prototype.add=function(t){var e=this;if((ot(this._atom),fe(this))&&!(r=pe(this,{type:"add",object:this,newValue:t})))return this;if(!this.has(t)){ie((function(){e._data.add(e.enhancer(t,void 0)),e._atom.reportChanged()}));var n=he(this),r=n?{type:"add",object:this,newValue:t}:null;0,n&&ve(this,r)}return this},t.prototype.delete=function(t){var e=this;if(fe(this)&&!(r=pe(this,{type:"delete",object:this,oldValue:t})))return!1;if(this.has(t)){var n=he(this),r=n?{type:"delete",object:this,oldValue:t}:null;return ie((function(){e._atom.reportChanged(),e._data.delete(t)})),n&&ve(this,r),!0}return!1},t.prototype.has=function(t){return this._atom.reportObserved(),this._data.has(this.dehanceValue(t))},t.prototype.entries=function(){var t=0,e=Array.from(this.keys()),n=Array.from(this.values());return Ze({next:function(){var r=t;return t+=1,r<n.length?{value:[e[r],n[r]],done:!1}:{done:!0}}})},t.prototype.keys=function(){return this.values()},t.prototype.values=function(){this._atom.reportObserved();var t=this,e=0,n=Array.from(this._data.values());return Ze({next:function(){return e<n.length?{value:t.dehanceValue(n[e++]),done:!1}:{done:!0}}})},t.prototype.replace=function(t){var e=this;return Re(t)&&(t=t.toJS()),ie((function(){var n=bt(!0);try{Array.isArray(t)||y(t)?(e.clear(),t.forEach((function(t){return e.add(t)}))):null!=t&&a("Cannot initialize set from "+t)}finally{mt(n)}})),this},t.prototype.observe=function(t,e){return de(this,t)},t.prototype.intercept=function(t){return le(this,t)},t.prototype.toJS=function(){return new Set(this)},t.prototype.toString=function(){return this.name+"[ "+Array.from(this).join(", ")+" ]"},t.prototype[(Oe=w,Symbol.iterator)]=function(){return this.values()},t}(),Re=d("ObservableSet",Ee),Te=function(){function t(t,e,n,r){void 0===e&&(e=new Map),this.target=t,this.values=e,this.name=n,this.defaultEnhancer=r,this.keysAtom=new _(n+".keys")}return t.prototype.read=function(t){return this.values.get(t).get()},t.prototype.write=function(t,e){var n=this.target,r=this.values.get(t);if(r instanceof wt)r.set(e);else{if(fe(this)){if(!(i=pe(this,{type:"update",object:this.proxy||n,name:t,newValue:e})))return;e=i.newValue}if((e=r.prepareNewValue(e))!==Et.UNCHANGED){var o=he(this),i=o?{type:"update",object:this.proxy||n,oldValue:r.value,name:t,newValue:e}:null;0,r.setNewValue(e),o&&ve(this,i)}}},t.prototype.has=function(t){var e=this.pendingKeys||(this.pendingKeys=new Map),n=e.get(t);if(n)return n.get();var r=!!this.values.get(t);return n=new xt(r,V,this.name+"."+b(t)+"?",!1),e.set(t,n),n.get()},t.prototype.addObservableProp=function(t,e,n){void 0===n&&(n=this.defaultEnhancer);var r=this.target;if(fe(this)){var o=pe(this,{object:this.proxy||r,name:t,type:"add",newValue:e});if(!o)return;e=o.newValue}var i=new xt(e,n,this.name+"."+b(t),!1);this.values.set(t,i),e=i.value,Object.defineProperty(r,t,function(t){return $e[t]||($e[t]={configurable:!0,enumerable:!0,get:function(){return this[w].read(t)},set:function(e){this[w].write(t,e)}})}(t)),this.notifyPropertyAddition(t,e)},t.prototype.addComputedProp=function(t,e,n){var r,o,i,u=this.target;n.name=n.name||this.name+"."+b(e),this.values.set(e,new wt(n)),(t===u||(r=t,o=e,!(i=Object.getOwnPropertyDescriptor(r,o))||!1!==i.configurable&&!1!==i.writable))&&Object.defineProperty(t,e,function(t){return Ce[t]||(Ce[t]={configurable:Et.computedConfigurable,enumerable:!1,get:function(){return Me(this).read(t)},set:function(e){Me(this).write(t,e)}})}(e))},t.prototype.remove=function(t){if(this.values.has(t)){var e=this.target;if(fe(this))if(!(u=pe(this,{object:this.proxy||e,name:t,type:"remove"})))return;try{$t();var n=he(this),r=this.values.get(t),o=r&&r.get();if(r&&r.set(void 0),this.keysAtom.reportChanged(),this.values.delete(t),this.pendingKeys){var i=this.pendingKeys.get(t);i&&i.set(!1)}delete this.target[t];var u=n?{type:"remove",object:this.proxy||e,oldValue:o,name:t}:null;0,n&&ve(this,u)}finally{Ct()}}},t.prototype.illegalAccess=function(t,e){console.warn("Property '"+e+"' of '"+t+"' was accessed through the prototype chain. Use 'decorate' instead to declare the prop or access it statically through it's owner")},t.prototype.observe=function(t,e){return de(this,t)},t.prototype.intercept=function(t){return le(this,t)},t.prototype.notifyPropertyAddition=function(t,e){var n=he(this),r=n?{type:"add",object:this.proxy||this.target,name:t,newValue:e}:null;if(n&&ve(this,r),this.pendingKeys){var o=this.pendingKeys.get(t);o&&o.set(!0)}this.keysAtom.reportChanged()},t.prototype.getKeys=function(){var t,e;this.keysAtom.reportObserved();var n=[];try{for(var r=E(this.values),o=r.next();!o.done;o=r.next()){var i=R(o.value,2),u=i[0];i[1]instanceof xt&&n.push(u)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return n},t}();function Le(t,e,n){if(void 0===e&&(e=""),void 0===n&&(n=U),Object.prototype.hasOwnProperty.call(t,w))return t[w];p(t)||(e=(t.constructor.name||"ObservableObject")+"@"+u()),e||(e="ObservableObject@"+u());var r=new Te(t,new Map,b(e),n);return h(t,w,r),r}var $e=Object.create(null),Ce=Object.create(null);function Me(t){var e=t[w];return e||(k(t),t[w])}var De=d("ObservableObjectAdministration",Te);function ke(t){return!!l(t)&&(k(t),De(t[w]))}function Ie(t,e){if("object"==typeof t&&null!==t){if(_e(t))return void 0!==e&&a(!1),t[w].atom;if(Re(t))return t[w];if(Se(t)){var n=t;return void 0===e?n._keysAtom:((r=n._data.get(e)||n._hasMap.get(e))||a(!1),r)}var r;if(k(t),e&&!t[w]&&t[e],ke(t))return e?((r=t[w].values.get(e))||a(!1),r):a(!1);if(O(t)||_t(t)||Vt(t))return t}else if("function"==typeof t&&Vt(t[w]))return t[w];return a(!1)}function Pe(t,e){return t||a("Expecting some object"),void 0!==e?Pe(Ie(t,e)):O(t)||_t(t)||Vt(t)||Se(t)||Re(t)?t:(k(t),t[w]?t[w]:void a(!1))}var Ue=Object.prototype.toString;function Ve(t,e,n){return void 0===n&&(n=-1),function t(e,n,r,o,i){if(e===n)return 0!==e||1/e==1/n;if(null==e||null==n)return!1;if(e!=e)return n!=n;var u=typeof e;if("function"!==u&&"object"!==u&&"object"!=typeof n)return!1;var a=Ue.call(e);if(a!==Ue.call(n))return!1;switch(a){case"[object RegExp]":case"[object String]":return""+e==""+n;case"[object Number]":return+e!=+e?+n!=+n:0==+e?1/+e==1/n:+e==+n;case"[object Date]":case"[object Boolean]":return+e==+n;case"[object Symbol]":return"undefined"!=typeof Symbol&&Symbol.valueOf.call(e)===Symbol.valueOf.call(n);case"[object Map]":case"[object Set]":r>=0&&r++}e=Be(e),n=Be(n);var s="[object Array]"===a;if(!s){if("object"!=typeof e||"object"!=typeof n)return!1;var c=e.constructor,f=n.constructor;if(c!==f&&!("function"==typeof c&&c instanceof c&&"function"==typeof f&&f instanceof f)&&"constructor"in e&&"constructor"in n)return!1}if(0===r)return!1;r<0&&(r=-1);i=i||[];var l=(o=o||[]).length;for(;l--;)if(o[l]===e)return i[l]===n;if(o.push(e),i.push(n),s){if((l=e.length)!==n.length)return!1;for(;l--;)if(!t(e[l],n[l],r-1,o,i))return!1}else{var p=Object.keys(e),h=void 0;if(l=p.length,Object.keys(n).length!==l)return!1;for(;l--;)if(h=p[l],!ze(n,h)||!t(e[h],n[h],r-1,o,i))return!1}return o.pop(),i.pop(),!0}(t,e,n)}function Be(t){return _e(t)?t.slice():v(t)||Se(t)||y(t)||Re(t)?Array.from(t.entries()):t}function ze(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Ze(t){return t[Symbol.iterator]=Fe,t}function Fe(){return this}if("undefined"==typeof Proxy||"undefined"==typeof Symbol)throw new Error("[mobx] MobX 5+ requires Proxy and Symbol objects. If your environment doesn't support Symbol or Proxy objects, please downgrade to MobX 4. For React Native Android, consider upgrading JSCore.");"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:function(t){return console.warn("[mobx.spy] Is a no-op in production builds"),function(){}},extras:{getDebugName:function(t,e){return(void 0!==e?Ie(t,e):ke(t)||Se(t)||Re(t)?Pe(t):Ie(t)).name}},$mobx:w})}).call(this,n(17),n(18))},function(t,e,n){var r=n(0),o=n(124);t.exports=r((function(t,e){return o(t,e,[],[])}))},function(t,e,n){var r=n(13);t.exports=function(){var t=Object.prototype.toString;return"[object Arguments]"===t.call(arguments)?function(e){return"[object Arguments]"===t.call(e)}:function(t){return r("callee",t)}}()},function(t,e){t.exports=function(t,e){var n;e=e||[];var r=(t=t||[]).length,o=e.length,i=[];for(n=0;n<r;)i[i.length]=t[n],n+=1;for(n=0;n<o;)i[i.length]=e[n],n+=1;return i}},function(t,e){t.exports=function(t){return"[object String]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return e[t]}))},function(t,e,n){var r=n(1);t.exports=r((function(t){return function(){return t}}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return null!=e&&e.constructor===t||e instanceof t}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return e>t?e:t}))},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e,n){"use strict";var r=n(5),o=n(175),i=n(177),u=n(178),a=n(179),s=n(67),c="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(180);t.exports=function(t){return new Promise((function(e,f){var l=t.data,p=t.headers;r.isFormData(l)&&delete p["Content-Type"];var h=new XMLHttpRequest,d="onreadystatechange",v=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in h||a(t.url)||(h=new window.XDomainRequest,d="onload",v=!0,h.onprogress=function(){},h.ontimeout=function(){}),t.auth){var y=t.auth.username||"",g=t.auth.password||"";p.Authorization="Basic "+c(y+":"+g)}if(h.open(t.method.toUpperCase(),i(t.url,t.params,t.paramsSerializer),!0),h.timeout=t.timeout,h[d]=function(){if(h&&(4===h.readyState||v)&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in h?u(h.getAllResponseHeaders()):null,r={data:t.responseType&&"text"!==t.responseType?h.response:h.responseText,status:1223===h.status?204:h.status,statusText:1223===h.status?"No Content":h.statusText,headers:n,config:t,request:h};o(e,f,r),h=null}},h.onerror=function(){f(s("Network Error",t,null,h)),h=null},h.ontimeout=function(){f(s("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED",h)),h=null},r.isStandardBrowserEnv()){var b=n(181),m=(t.withCredentials||a(t.url))&&t.xsrfCookieName?b.read(t.xsrfCookieName):void 0;m&&(p[t.xsrfHeaderName]=m)}if("setRequestHeader"in h&&r.forEach(p,(function(t,e){void 0===l&&"content-type"===e.toLowerCase()?delete p[e]:h.setRequestHeader(e,t)})),t.withCredentials&&(h.withCredentials=!0),t.responseType)try{h.responseType=t.responseType}catch(e){if("json"!==t.responseType)throw e}"function"==typeof t.onDownloadProgress&&h.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){h&&(h.abort(),f(t),h=null)})),void 0===l&&(l=null),h.send(l)}))}},function(t,e,n){"use strict";var r=n(176);t.exports=function(t,e,n,o,i){var u=new Error(t);return r(u,e,n,o,i)}},function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},function(t,e,n){var r=n(190),o=n(249),i=n(31),u=n(2),a=n(258);t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?u(t)?o(t[0],t[1]):r(t):a(t)}},function(t,e,n){var r=n(23),o=n(197),i=n(198),u=n(199),a=n(200),s=n(201);function c(t){var e=this.__data__=new r(t);this.size=e.size}c.prototype.clear=o,c.prototype.delete=i,c.prototype.get=u,c.prototype.has=a,c.prototype.set=s,t.exports=c},function(t,e,n){var r=n(11),o=n(3);t.exports=function(t){if(!o(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(18))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(220),o=n(8);t.exports=function t(e,n,i,u,a){return e===n||(null==e||null==n||!o(e)&&!o(n)?e!=e&&n!=n:r(e,n,i,u,t,a))}},function(t,e,n){var r=n(221),o=n(224),i=n(225);t.exports=function(t,e,n,u,a,s){var c=1&n,f=t.length,l=e.length;if(f!=l&&!(c&&l>f))return!1;var p=s.get(t),h=s.get(e);if(p&&h)return p==e&&h==t;var d=-1,v=!0,y=2&n?new r:void 0;for(s.set(t,e),s.set(e,t);++d<f;){var g=t[d],b=e[d];if(u)var m=c?u(b,g,d,e,t,s):u(g,b,d,t,e,s);if(void 0!==m){if(m)continue;v=!1;break}if(y){if(!o(e,(function(t,e){if(!i(y,e)&&(g===t||a(g,t,n,u,s)))return y.push(e)}))){v=!1;break}}else if(g!==b&&!a(g,b,n,u,s)){v=!1;break}}return s.delete(t),s.delete(e),v}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n<r;){var u=t[n];e(u,n,t)&&(i[o++]=u)}return i}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){var r=n(81),o=n(243),i=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))i.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var r=n(245),o=n(40),i=n(246),u=n(247),a=n(83),s=n(11),c=n(75),f=c(r),l=c(o),p=c(i),h=c(u),d=c(a),v=s;(r&&"[object DataView]"!=v(new r(new ArrayBuffer(1)))||o&&"[object Map]"!=v(new o)||i&&"[object Promise]"!=v(i.resolve())||u&&"[object Set]"!=v(new u)||a&&"[object WeakMap]"!=v(new a))&&(v=function(t){var e=s(t),n="[object Object]"==e?t.constructor:void 0,r=n?c(n):"";if(r)switch(r){case f:return"[object DataView]";case l:return"[object Map]";case p:return"[object Promise]";case h:return"[object Set]";case d:return"[object WeakMap]"}return e}),t.exports=v},function(t,e,n){var r=n(7)(n(4),"WeakMap");t.exports=r},function(t,e,n){var r=n(3);t.exports=function(t){return t==t&&!r(t)}},function(t,e){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},function(t,e,n){var r=n(87),o=n(30);t.exports=function(t,e){for(var n=0,i=(e=r(e,t)).length;null!=t&&n<i;)t=t[o(e[n++])];return n&&n==i?t:void 0}},function(t,e,n){var r=n(2),o=n(47),i=n(251),u=n(88);t.exports=function(t,e){return r(t)?t:o(t,e)?[t]:i(u(t))}},function(t,e,n){var r=n(254);t.exports=function(t){return null==t?"":r(t)}},function(t,e,n){var r=n(262),o=n(265)(r);t.exports=o},function(t,e,n){var r=n(267),o=n(268),i=n(269);t.exports=function(t,e,n){return e==e?i(t,e,n):r(t,o,n)}},function(t,e,n){var r=n(92);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(270);t.exports=function(t){return t?(t=r(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},function(t,e,n){var r=n(94),o=n(273),i=n(274),u=n(96),a=n(291),s=n(100),c=n(292),f=n(103),l=n(105),p=n(91),h=Math.max;t.exports=function(t,e,n,d,v,y,g,b){var m=2&e;if(!m&&"function"!=typeof t)throw new TypeError("Expected a function");var x=d?d.length:0;if(x||(e&=-97,d=v=void 0),g=void 0===g?g:h(p(g),0),b=void 0===b?b:p(b),x-=v?v.length:0,64&e){var w=d,_=v;d=v=void 0}var O=m?void 0:s(t),A=[t,e,n,d,v,w,_,y,g,b];if(O&&c(A,O),t=A[0],e=A[1],n=A[2],d=A[3],v=A[4],!(b=A[9]=void 0===A[9]?m?0:t.length:h(A[9]-x,0))&&24&e&&(e&=-25),e&&1!=e)N=8==e||16==e?i(t,e,b):32!=e&&33!=e||v.length?u.apply(void 0,A):a(t,e,n,d);else var N=o(t,e,n);return l((O?r:f)(N,A),t,e)}},function(t,e,n){var r=n(31),o=n(95),i=o?function(t,e){return o.set(t,e),t}:r;t.exports=i},function(t,e,n){var r=n(83),o=r&&new r;t.exports=o},function(t,e,n){var r=n(97),o=n(98),i=n(275),u=n(32),a=n(99),s=n(52),c=n(290),f=n(33),l=n(4);t.exports=function t(e,n,p,h,d,v,y,g,b,m){var x=128&n,w=1&n,_=2&n,O=24&n,A=512&n,N=_?void 0:u(e);return function S(){for(var j=arguments.length,E=Array(j),R=j;R--;)E[R]=arguments[R];if(O)var T=s(S),L=i(E,T);if(h&&(E=r(E,h,d,O)),v&&(E=o(E,v,y,O)),j-=L,O&&j<m){var $=f(E,T);return a(e,n,t,S.placeholder,p,E,$,g,b,m-j)}var C=w?p:this,M=_?C[e]:e;return j=E.length,g?E=c(E,g):A&&j>1&&E.reverse(),x&&b<j&&(E.length=b),this&&this!==l&&this instanceof S&&(M=N||u(M)),M.apply(C,E)}}},function(t,e){var n=Math.max;t.exports=function(t,e,r,o){for(var i=-1,u=t.length,a=r.length,s=-1,c=e.length,f=n(u-a,0),l=Array(c+f),p=!o;++s<c;)l[s]=e[s];for(;++i<a;)(p||i<u)&&(l[r[i]]=t[i]);for(;f--;)l[s++]=t[i++];return l}},function(t,e){var n=Math.max;t.exports=function(t,e,r,o){for(var i=-1,u=t.length,a=-1,s=r.length,c=-1,f=e.length,l=n(u-s,0),p=Array(l+f),h=!o;++i<l;)p[i]=t[i];for(var d=i;++c<f;)p[d+c]=e[c];for(;++a<s;)(h||i<u)&&(p[d+r[a]]=t[i++]);return p}},function(t,e,n){var r=n(276),o=n(103),i=n(105);t.exports=function(t,e,n,u,a,s,c,f,l,p){var h=8&e;e|=h?32:64,4&(e&=~(h?64:32))||(e&=-4);var d=[t,e,a,h?s:void 0,h?c:void 0,h?void 0:s,h?void 0:c,f,l,p],v=n.apply(void 0,d);return r(t)&&o(v,d),v.placeholder=u,i(v,t,e)}},function(t,e,n){var r=n(95),o=n(277),i=r?function(t){return r.get(t)}:o;t.exports=i},function(t,e,n){var r=n(48),o=n(51);function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}i.prototype=r(o.prototype),i.prototype.constructor=i,t.exports=i},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},function(t,e,n){var r=n(94),o=n(104)(r);t.exports=o},function(t,e){var n=Date.now;t.exports=function(t){var e=0,r=0;return function(){var o=n(),i=16-(o-r);if(r=o,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(282),o=n(283),i=n(106),u=n(287);t.exports=function(t,e,n){var a=e+"";return i(t,o(a,u(r(a),n)))}},function(t,e,n){var r=n(284),o=n(104)(r);t.exports=o},function(t,e){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return n.test(t)}},function(t,e,n){"use strict";(function(t,r){function o(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(e,"__esModule",{value:!0});var i=o(n(120)),u=o(n(121)),a=o(n(129)),s=o(n(131)),c=o(n(35)),f=o(n(138)),l=o(n(139)),p=o(n(140)),h=o(n(61)),d=o(n(62)),v=o(n(143)),y=o(n(145)),g=o(n(146)),b=o(n(147)),m=o(n(148)),x=o(n(158)),w=o(n(161)),_=o(n(163)),O=o(n(164)),A=o(n(165)),N=o(n(63)),S=o(n(166)),j=o(n(168)),E=o(n(169)),R=o(n(170)),T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},L=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t};Function.prototype.$asyncbind=function e(n,o){function i(){return u.apply(n,arguments)}Function.prototype.$asyncbind||Object.defineProperty(Function.prototype,"$asyncbind",{value:e,enumerable:!1,configurable:!0,writable:!0}),e.trampoline||(e.trampoline=function(t,e,n,r,o){return function i(u){for(;u;){if(u.then)return u=u.then(i,r),o?void 0:u;try{if(u.pop){if(u.length)return u.pop()?e.call(t):u;u=n}else u=u.call(t)}catch(t){return r(t)}}}}),e.LazyThenable||(e.LazyThenable=function(){function t(t){return t&&t instanceof Object&&"function"==typeof t.then}function e(n,r,o){try{var i=o?o(r):r;if(n===i)return n.reject(new TypeError("Promise resolution loop"));t(i)?i.then((function(t){e(n,t)}),(function(t){n.reject(t)})):n.resolve(i)}catch(t){n.reject(t)}}function n(){}function r(t){}function o(r,o){var i=new n;try{this._resolver((function(n){return t(n)?n.then(r,o):e(i,n,r)}),(function(t){e(i,t,o)}))}catch(t){e(i,t,o)}return i}function i(t){this._resolver=t,this.then=o}return n.prototype={resolve:r,reject:r,then:function(t,e){this.resolve=t,this.reject=e}},i.resolve=function(t){return i.isThenable(t)?t:{then:function(e){return e(t)}}},i.isThenable=t,i}(),e.EagerThenable=e.Thenable=(e.EagerThenableFactory=function(e){function n(t){if(t){var e=this;t((function(t){e.resolve(t)}),(function(t){e.reject(t)}))}}function o(t,e){if("function"==typeof t.y)try{var n=t.y.call(void 0,e);t.p.resolve(n)}catch(e){t.p.reject(e)}else t.p.resolve(e)}function i(t,e){if("function"==typeof t.n)try{var n=t.n.call(void 0,e);t.p.resolve(n)}catch(e){t.p.reject(e)}else t.p.reject(e)}e=e||"object"===(void 0===t?"undefined":T(t))&&t.nextTick||"function"==typeof r&&r||function(t){setTimeout(t,0)};var u=function(){function t(){for(;n.length-r;){try{n[r]()}catch(t){}n[r++]=void 0,r===o&&(n.splice(0,o),r=0)}}var n=[],r=0,o=1024;return function(o){n.push(o),n.length-r==1&&e(t)}}();return n.prototype={resolve:function(t){if(void 0===this.state){if(t===this)return this.reject(new TypeError("Attempt to resolve promise with self"));var e=this;if(t&&("function"==typeof t||"object"===(void 0===t?"undefined":T(t))))try{var n=0,r=t.then;if("function"==typeof r)return void r.call(t,(function(t){n++||e.resolve(t)}),(function(t){n++||e.reject(t)}))}catch(t){return void(n||this.reject(t))}this.state=o,this.v=t,e.c&&u((function(){for(var n=0,r=e.c.length;n<r;n++)o(e.c[n],t)}))}},reject:function(t){if(void 0===this.state){this.state=i,this.v=t;var e=this.c;e&&u((function(){for(var n=0,r=e.length;n<r;n++)i(e[n],t)}))}},then:function(t,e){var r=new n,o={y:t,n:e,p:r};if(void 0===this.state)this.c?this.c.push(o):this.c=[o];else{var i=this.state,a=this.v;u((function(){i(o,a)}))}return r}},n.resolve=function(t){if(t&&t instanceof n)return t;var e=new n;return e.resolve(t),e},n.reject=function(t){if(t&&t instanceof n)return t;var e=new n;return e.reject(t),e},n.version="2.3.3-nodent",n})());var u=this;switch(o){case!0:return new e.Thenable(i);case 0:return new e.LazyThenable(i);case void 0:return i.then=i,i;default:return function(){try{return u.apply(n,arguments)}catch(t){return o(t)}}}};var $=E([[j,S],[N(Number),S],[A,function(t){return Number(t)}]]),C=O((function(t,e,n){var r=N(Number);return r(t)&&r(e)&&r(n)&&_(n,t)&&_(e,n)})),M=w([j,x,m(b("baseURL")),m(g(String,"baseURL")),y(x,"baseURL")]),D={Accept:"application/json","Content-Type":"application/json"},k={timeout:0},I=["ECONNABORTED"],P=["ENOTFOUND","ECONNREFUSED","ECONNRESET"],U=C(200,299),V=C(400,499),B=C(500,599),z=v(j,d(void 0),h("status")),Z=function(t){if(M(t))throw new Error("config must have a baseURL");var e=p(D,t.headers||{}),n=p(k,l("headers",t)),r=R.create(n),o=[],h=[],v=[],y=[],g=function(t,n){return e[t]=n,r},b=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return x(p({url:e,params:n,method:t},r))},m=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return x(p({url:e,method:t,data:n},r))},x=function(t){return new Promise(function(n,o){function i(){function e(){return u}return l<v.length?function(t){return!!t&&("object"===(void 0===t?"undefined":T(t))||"function"==typeof t)&&"function"==typeof t.then}(p=v[l](t))?p.then(function(t){return e.call(this)}.$asyncbind(this,o),o):p(t).then(function(t){return e.call(this)}.$asyncbind(this,o),o):[1]}function u(){return l++,i}function c(){return d=s(a(_,[$(new Date)]),w),n(r.request(t).then(d).catch(d))}var l,p,d;return t.headers=L({},e,t.headers),h.length>0&&f((function(e){return e(t)}),h),v.length>0?(l=0,Function.$asyncbind.trampoline(this,(function(){return c.call(this)}),u,o,!0)(i)):c.call(this)}.$asyncbind(this))},w=function(t){return o.forEach((function(e){try{e(t)}catch(t){}})),t},_=function(t,e){var n=$(new Date)-t,r=e instanceof Error||R.isCancel(e),o=r?e.response:e,i=o&&o.status||null,u=r?O(e):N(i),a=U(i),s=e.config||null,c={duration:n,problem:u,ok:a,status:i,headers:o&&o.headers||null,config:s,data:o&&o.data||null};return y.length>0&&f((function(t){return t(c)}),y),c},O=function(t){return"Network Error"===t.message?"NETWORK_ERROR":R.isCancel(t)?"CANCEL_ERROR":E([[j,function(){return N(z(t.response))}],[u(i,I),d("TIMEOUT_ERROR")],[u(i,P),d("CONNECTION_ERROR")],[A,d("UNKNOWN_ERROR")]])(t.code)},N=function(t){return E([[j,d("UNKNOWN_ERROR")],[U,d(null)],[V,d("CLIENT_ERROR")],[B,d("SERVER_ERROR")],[A,d("UNKNOWN_ERROR")]])(t)};return{axiosInstance:r,monitors:o,addMonitor:function(t){o.push(t)},requestTransforms:h,asyncRequestTransforms:v,responseTransforms:y,addRequestTransform:function(t){return h.push(t)},addAsyncRequestTransform:function(t){return v.push(t)},addResponseTransform:function(t){return y.push(t)},setHeader:g,setHeaders:function(t){return f((function(e){return g(e,t[e])}),c(t)),r},deleteHeader:function(t){return delete e[t],r},headers:e,setBaseURL:function(t){return r.defaults.baseURL=t,r},getBaseURL:function(){return r.defaults.baseURL},get:a(b,["get"]),delete:a(b,["delete"]),head:a(b,["head"]),post:a(m,["post"]),put:a(m,["put"]),patch:a(m,["patch"]),link:a(b,["link"]),unlink:a(b,["unlink"])}},F={DEFAULT_HEADERS:D,NONE:null,CLIENT_ERROR:"CLIENT_ERROR",SERVER_ERROR:"SERVER_ERROR",TIMEOUT_ERROR:"TIMEOUT_ERROR",CONNECTION_ERROR:"CONNECTION_ERROR",NETWORK_ERROR:"NETWORK_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR",create:Z};e.DEFAULT_HEADERS=D,e.NONE=null,e.CLIENT_ERROR="CLIENT_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT_ERROR="TIMEOUT_ERROR",e.CONNECTION_ERROR="CONNECTION_ERROR",e.NETWORK_ERROR="NETWORK_ERROR",e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.CANCEL_ERROR="CANCEL_ERROR",e.create=Z,e.default=F}).call(this,n(17),n(118).setImmediate)},function(t,e,n){var r=n(70),o=n(71),i=n(261),u=n(2);t.exports=function(t,e){return(u(t)?r:i)(t,o(e,3))}},function(t,e){t.exports=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var o=t[e];r[o[0]]=o[1]}return r}},function(t,e,n){var r=n(78),o=n(266),i=n(71),u=n(2);t.exports=function(t,e){return(u(t)?r:o)(t,i(e,3))}},function(t,e,n){var r=n(90),o=n(91),i=Math.max;t.exports=function(t,e,n){var u=null==t?0:t.length;if(!u)return-1;var a=null==n?0:o(n);return a<0&&(a=i(u+a,0)),r(t,e,a)}},function(t,e,n){var r=n(80),o=n(82),i=n(43),u=n(2),a=n(16),s=n(44),c=n(81),f=n(45),l=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(a(t)&&(u(t)||"string"==typeof t||"function"==typeof t.splice||s(t)||f(t)||i(t)))return!t.length;var e=o(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(c(t))return!r(t).length;for(var n in t)if(l.call(t,n))return!1;return!0}},function(t,e,n){t.exports=function(){"use strict";return function(t,e,n){t=t||{};var r=e.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function i(t,e,n,o){return r.fromToBase(t,e,n,o)}n.en.relativeTime=o,r.fromToBase=function(e,r,i,u,a){for(var s,c,f,l=i.$locale().relativeTime||o,p=t.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],h=p.length,d=0;d<h;d+=1){var v=p[d];v.d&&(s=u?n(e).diff(i,v.d,!0):i.diff(e,v.d,!0));var y=(t.rounding||Math.round)(Math.abs(s));if(f=s>0,y<=v.r||!v.r){y<=1&&d>0&&(v=p[d-1]);var g=l[v.l];a&&(y=a(""+y)),c="string"==typeof g?g.replace("%d",y):g(y,r,v.l,f);break}}if(r)return c;var b=f?l.future:l.past;return"function"==typeof b?b(c):b.replace("%s",c)},r.to=function(t,e){return i(t,e,this,!0)},r.from=function(t,e){return i(t,e,this)};var u=function(t){return t.$u?n.utc():n()};r.toNow=function(t){return this.to(u(this),t)},r.fromNow=function(t){return this.from(u(this),t)}}}()},function(t,e,n){t.exports=function(){"use strict";var t="minute",e=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,o,i){var u=o.prototype;i.utc=function(t){var e={date:t,utc:!0,args:arguments};return new o(e)},u.utc=function(e){var n=i(this.toDate(),{locale:this.$L,utc:!0});return e?n.add(this.utcOffset(),t):n},u.local=function(){return i(this.toDate(),{locale:this.$L,utc:!1})};var a=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),a.call(this,t)};var s=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else s.call(this)};var c=u.utcOffset;u.utcOffset=function(r,o){var i=this.$utils().u;if(i(r))return this.$u?0:i(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&null===(r=function(t){void 0===t&&(t="");var r=t.match(e);if(!r)return null;var o=(""+r[0]).match(n)||["-",0,0],i=o[0],u=60*+o[1]+ +o[2];return 0===u?0:"+"===i?u:-u}(r)))return this;var u=Math.abs(r)<=16?60*r:r;if(0===u)return this.utc(o);var a=this.clone();if(o)return a.$offset=u,a.$u=!1,a;var s=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(a=this.local().add(u+s,t)).$offset=u,a.$x.$localOffset=s,a};var f=u.format;u.format=function(t){var e=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,e)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?i(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var p=u.diff;u.diff=function(t,e,n){if(t&&this.$u===t.$u)return p.call(this,t,e,n);var r=this.local(),o=i(t).local();return p.call(r,o,e,n)}}}()},function(t,e,n){var r=n(295)("toUpperCase");t.exports=r},function(t,e,n){var r=n(304)();t.exports=r},function(t,e,n){(function(t){var r=void 0!==t&&t||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},e.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(119),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(18))},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,o,i,u,a,s=1,c={},f=!1,l=t.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(t);p=p&&p.setTimeout?p:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){d(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((i=new MessageChannel).port1.onmessage=function(t){d(t.data)},r=function(t){i.port2.postMessage(t)}):l&&"onreadystatechange"in l.createElement("script")?(o=l.documentElement,r=function(t){var e=l.createElement("script");e.onreadystatechange=function(){d(t),e.onreadystatechange=null,o.removeChild(e),e=null},o.appendChild(e)}):r=function(t){setTimeout(d,0,t)}:(u="setImmediate$"+Math.random()+"$",a=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(u)&&d(+e.data.slice(u.length))},t.addEventListener?t.addEventListener("message",a,!1):t.attachEvent("onmessage",a),r=function(e){t.postMessage(u+e,"*")}),p.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n<e.length;n++)e[n]=arguments[n+1];var o={callback:t,args:e};return c[s]=o,r(s),s++},p.clearImmediate=h}function h(t){delete c[t]}function d(t){if(f)setTimeout(d,0,t);else{var e=c[t];if(e){f=!0;try{!function(t){var e=t.callback,n=t.args;switch(n.length){case 0:e();break;case 1:e(n[0]);break;case 2:e(n[0],n[1]);break;case 3:e(n[0],n[1],n[2]);break;default:e.apply(void 0,n)}}(e)}finally{h(t),f=!1}}}}}("undefined"==typeof self?void 0===t?this:t:self)}).call(this,n(18),n(17))},function(t,e){t.exports={"@@functional/placeholder":!0}},function(t,e,n){var r=n(122),o=n(0);t.exports=o(r)},function(t,e,n){var r=n(123);t.exports=function(t,e){return r(e,t,0)>=0}},function(t,e,n){var r=n(57);t.exports=function(t,e,n){var o,i;if("function"==typeof t.indexOf)switch(typeof e){case"number":if(0===e){for(o=1/e;n<t.length;){if(0===(i=t[n])&&1/i===o)return n;n+=1}return-1}if(e!=e){for(;n<t.length;){if("number"==typeof(i=t[n])&&i!=i)return n;n+=1}return-1}return t.indexOf(e,n);case"string":case"boolean":case"function":case"undefined":return t.indexOf(e,n);case"object":if(null===e)return t.indexOf(e,n)}for(;n<t.length;){if(r(t[n],e))return n;n+=1}return-1}},function(t,e,n){var r=n(125),o=n(126),i=n(13),u=n(127),a=n(35),s=n(128);t.exports=function t(e,n,c,f){if(u(e,n))return!0;if(s(e)!==s(n))return!1;if(null==e||null==n)return!1;if("function"==typeof e.equals||"function"==typeof n.equals)return"function"==typeof e.equals&&e.equals(n)&&"function"==typeof n.equals&&n.equals(e);switch(s(e)){case"Arguments":case"Array":case"Object":if("function"==typeof e.constructor&&"Promise"===o(e.constructor))return e===n;break;case"Boolean":case"Number":case"String":if(typeof e!=typeof n||!u(e.valueOf(),n.valueOf()))return!1;break;case"Date":if(!u(e.valueOf(),n.valueOf()))return!1;break;case"Error":return e.name===n.name&&e.message===n.message;case"RegExp":if(e.source!==n.source||e.global!==n.global||e.ignoreCase!==n.ignoreCase||e.multiline!==n.multiline||e.sticky!==n.sticky||e.unicode!==n.unicode)return!1;break;case"Map":case"Set":if(!t(r(e.entries()),r(n.entries()),c,f))return!1;break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var l=a(e);if(l.length!==a(n).length)return!1;for(var p=c.length-1;p>=0;){if(c[p]===e)return f[p]===n;p-=1}for(c.push(e),f.push(n),p=l.length-1;p>=0;){var h=l[p];if(!i(h,n)||!t(n[h],e[h],c,f))return!1;p-=1}return c.pop(),f.pop(),!0}},function(t,e){t.exports=function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}},function(t,e){t.exports=function(t){var e=String(t).match(/^function (\w*)/);return null==e?"":e[1]}},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}))},function(t,e,n){var r=n(1);t.exports=r((function(t){return null===t?"Null":void 0===t?"Undefined":Object.prototype.toString.call(t).slice(8,-1)}))},function(t,e,n){var r=n(59),o=n(130);t.exports=o(r)},function(t,e,n){var r=n(10),o=n(0);t.exports=function(t){return o((function(e,n){return r(Math.max(0,e.length-n.length),(function(){return e.apply(this,t(n,arguments))}))}))}},function(t,e,n){var r=n(10),o=n(132),i=n(36),u=n(136);t.exports=function(){if(0===arguments.length)throw new Error("pipe requires at least one argument");return r(arguments[0].length,i(o,arguments[0],u(arguments)))}},function(t,e){t.exports=function(t,e){return function(){return e.call(this,t.apply(this,arguments))}}},function(t,e){t.exports=function(){function t(t){this.f=t}return t.prototype["@@transducer/init"]=function(){throw new Error("init not implemented on XWrap")},t.prototype["@@transducer/result"]=function(t){return t},t.prototype["@@transducer/step"]=function(t,e){return this.f(t,e)},function(e){return new t(e)}}()},function(t,e,n){var r=n(10),o=n(0);t.exports=o((function(t,e){return r(t.length,(function(){return t.apply(e,arguments)}))}))},function(t,e,n){var r=n(1),o=n(21),i=n(60);t.exports=r((function(t){return!!o(t)||!!t&&("object"==typeof t&&(!i(t)&&(1===t.nodeType?!!t.length:0===t.length||t.length>0&&(t.hasOwnProperty(0)&&t.hasOwnProperty(t.length-1)))))}))},function(t,e,n){var r=n(37),o=n(1),i=n(137);t.exports=o(r("tail",i(1,1/0)))},function(t,e,n){var r=n(37),o=n(14);t.exports=o(r("slice",(function(t,e,n){return Array.prototype.slice.call(n,t,e)})))},function(t,e,n){var r=n(37),o=n(0);t.exports=o(r("forEach",(function(t,e){for(var n=e.length,r=0;r<n;)t(e[r]),r+=1;return e})))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){var n={};for(var r in e)n[r]=e[r];return delete n[t],n}))},function(t,e,n){var r=n(141),o=n(0);t.exports=o((function(t,e){return r({},t,e)}))},function(t,e,n){var r=n(142);t.exports="function"==typeof Object.assign?Object.assign:r},function(t,e,n){var r=n(13);t.exports=function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1,o=arguments.length;n<o;){var i=arguments[n];if(null!=i)for(var u in i)r(u,i)&&(e[u]=i[u]);n+=1}return e}},function(t,e,n){var r=n(14),o=n(15);t.exports=r((function(t,e,n){return o(Math.max(t.length,e.length,n.length),(function(){return t.apply(this,arguments)?e.apply(this,arguments):n.apply(this,arguments)}))}))},function(t,e,n){var r=n(10),o=n(19);t.exports=function t(e,n,i){return function(){for(var u=[],a=0,s=e,c=0;c<n.length||a<arguments.length;){var f;c<n.length&&(!o(n[c])||a>=arguments.length)?f=n[c]:(f=arguments[a],a+=1),u[c]=f,o(f)||(s-=1),c+=1}return s<=0?i.apply(this,u):r(s,t(e,u,i))}}},function(t,e,n){var r=n(14);t.exports=r((function(t,e,n){return t(n[e])}))},function(t,e,n){var r=n(14),o=n(63);t.exports=r((function(t,e,n){return o(t,n[e])}))},function(t,e,n){var r=n(0),o=n(13);t.exports=r(o)},function(t,e,n){var r=n(149),o=n(157);t.exports=r(o)},function(t,e,n){var r=n(1),o=n(150);t.exports=r((function(t){return o(t.length,t)}))},function(t,e,n){var r=n(0),o=n(20),i=n(151),u=n(15),a=n(22);t.exports=r((function(t,e){var n=u(t,e);return u(t,(function(){return o(i,a(n,arguments[0]),Array.prototype.slice.call(arguments,1))}))}))},function(t,e,n){var r=n(59),o=n(0),i=n(20),u=n(22);t.exports=o((function(t,e){return"function"==typeof t.ap?t.ap(e):"function"==typeof t?function(n){return t(n)(e(n))}:i((function(t,n){return r(t,u(n,e))}),[],t)}))},function(t,e,n){var r=n(21),o=n(153);t.exports=function(t,e,n){return function(){if(0===arguments.length)return n();var i=Array.prototype.slice.call(arguments,0),u=i.pop();if(!r(u)){for(var a=0;a<t.length;){if("function"==typeof u[t[a]])return u[t[a]].apply(u,i);a+=1}if(o(u)){var s=e.apply(null,i);return s(u)}}return n.apply(this,arguments)}}},function(t,e){t.exports=function(t){return"function"==typeof t["@@transducer/step"]}},function(t,e){t.exports=function(t,e){for(var n=0,r=e.length,o=Array(r);n<r;)o[n]=t(e[n]),n+=1;return o}},function(t,e,n){var r=n(0),o=n(156);t.exports=function(){function t(t,e){this.xf=e,this.f=t}return t.prototype["@@transducer/init"]=o.init,t.prototype["@@transducer/result"]=o.result,t.prototype["@@transducer/step"]=function(t,e){return this.xf["@@transducer/step"](t,this.f(e))},r((function(e,n){return new t(e,n)}))}()},function(t,e){t.exports={init:function(){return this.xf["@@transducer/init"]()},result:function(t){return this.xf["@@transducer/result"](t)}}},function(t,e,n){var r=n(1);t.exports=r((function(t){return!t}))},function(t,e,n){var r=n(1),o=n(159),i=n(57);t.exports=r((function(t){return null!=t&&i(t,o(t))}))},function(t,e,n){var r=n(1),o=n(58),i=n(21),u=n(160),a=n(60);t.exports=r((function(t){return null!=t&&"function"==typeof t.empty?t.empty():null!=t&&null!=t.constructor&&"function"==typeof t.constructor.empty?t.constructor.empty():i(t)?[]:a(t)?"":u(t)?{}:o(t)?function(){return arguments}():void 0}))},function(t,e){t.exports=function(t){return"[object Object]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(1),o=n(15),i=n(64),u=n(162),a=n(36);t.exports=r((function(t){return o(a(i,0,u("length",t)),(function(){for(var e=0,n=t.length;e<n;){if(t[e].apply(this,arguments))return!0;e+=1}return!1}))}))},function(t,e,n){var r=n(0),o=n(22),i=n(61);t.exports=r((function(t,e){return o(i(t),e)}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return t>=e}))},function(t,e,n){var r=n(1),o=n(15);t.exports=r((function(t){return o(t.length,t)}))},function(t,e,n){var r=n(62);t.exports=r(!0)},function(t,e,n){var r=n(1),o=n(167);t.exports=r(o)},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(1);t.exports=r((function(t){return null==t}))},function(t,e,n){var r=n(10),o=n(1),i=n(22),u=n(64),a=n(36);t.exports=o((function(t){var e=a(u,0,i((function(t){return t[0].length}),t));return r(e,(function(){for(var e=0;e<t.length;){if(t[e][0].apply(this,arguments))return t[e][1].apply(this,arguments);e+=1}}))}))},function(t,e,n){t.exports=n(171)},function(t,e,n){"use strict";var r=n(5),o=n(65),i=n(173),u=n(38);function a(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var s=a(u);s.Axios=i,s.create=function(t){return a(r.merge(u,t))},s.Cancel=n(69),s.CancelToken=n(187),s.isCancel=n(68),s.all=function(t){return Promise.all(t)},s.spread=n(188),t.exports=s,t.exports.default=s},function(t,e){function n(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("turn-shared",[],e):"object"==typeof exports?exports["turn-shared"]=e():t["turn-shared"]=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=239)}([function(t,e,n){"use strict";var r,i=n(43),o=Object.prototype.toString,u=(r=Object.create(null),function(t){var e=o.call(t);return r[e]||(r[e]=e.slice(8,-1).toLowerCase())});function s(t){return t=t.toLowerCase(),function(e){return u(e)===t}}function a(t){return Array.isArray(t)}function c(t){return void 0===t}var f=s("ArrayBuffer");function l(t){return null!==t&&"object"==typeof t}function p(t){if("object"!==u(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}var h=s("Date"),d=s("File"),v=s("Blob"),g=s("FileList");function y(t){return"[object Function]"===o.call(t)}var b=s("URLSearchParams");function m(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),a(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}var w,x=(w="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(t){return w&&t instanceof w});t.exports={isArray:a,isArrayBuffer:f,isBuffer:function(t){return null!==t&&!c(t)&&null!==t.constructor&&!c(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return t&&("function"==typeof FormData&&t instanceof FormData||"[object FormData]"===o.call(t)||y(t.toString)&&"[object FormData]"===t.toString())},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&f(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:l,isPlainObject:p,isUndefined:c,isDate:h,isFile:d,isBlob:v,isFunction:y,isStream:function(t){return l(t)&&y(t.pipe)},isURLSearchParams:b,isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:m,merge:function t(){var e={};function n(n,r){p(e[r])&&p(n)?e[r]=t(e[r],n):p(n)?e[r]=t({},n):a(n)?e[r]=n.slice():e[r]=n}for(var r=0,i=arguments.length;r<i;r++)m(arguments[r],n);return e},extend:function(t,e,n){return m(e,(function(e,r){t[r]=n&&"function"==typeof e?i(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t},inherits:function(t,e,n,r){t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,n&&Object.assign(t.prototype,n)},toFlatObject:function(t,e,n){var r,i,o,u={};e=e||{};do{for(i=(r=Object.getOwnPropertyNames(t)).length;i-- >0;)u[o=r[i]]||(e[o]=t[o],u[o]=!0);t=Object.getPrototypeOf(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:u,kindOfTest:s,endsWith:function(t,e,n){t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n},toArray:function(t){if(!t)return null;var e=t.length;if(c(e))return null;for(var n=new Array(e);e-- >0;)n[e]=t[e];return n},isTypedArray:x,isFileList:g}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(54),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();t.exports=o},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){var r=n(150),i=n(153);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",i="minute",o="hour",u="day",s="week",a="month",c="quarter",f="year",l="date",p="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,d=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},g=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},y={s:g,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+g(r,2,"0")+":"+g(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,a),o=n-i<0,u=e.clone().add(r+(o?-1:1),a);return+(-(r+(n-i)/(o?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:a,y:f,w:s,d:u,D:l,h:o,m:i,s:r,ms:n,Q:c}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},b="en",m={};m[b]=v;var w="$isDayjsObject",x=function(t){return t instanceof O||!(!t||!t[w])},_=function t(e,n,r){var i;if(!e)return b;if("string"==typeof e){var o=e.toLowerCase();m[o]&&(i=o),n&&(m[o]=n,i=o);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else{var s=e.name;m[s]=e,i=s}return!r&&i&&(b=i),i||!r&&b},A=function(t,e){if(x(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new O(n)},N=y;N.l=_,N.i=x,N.w=function(t,e){return A(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var O=function(){function v(t){this.$L=_(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[w]=!0}var g=v.prototype;return g.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(N.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r){var i=r[2]-1||0,o=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(e)}(t),this.init()},g.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},g.$utils=function(){return N},g.isValid=function(){return!(this.$d.toString()===p)},g.isSame=function(t,e){var n=A(t);return this.startOf(e)<=n&&n<=this.endOf(e)},g.isAfter=function(t,e){return A(t)<this.startOf(e)},g.isBefore=function(t,e){return this.endOf(e)<A(t)},g.$g=function(t,e,n){return N.u(t)?this[e]:this.set(n,t)},g.unix=function(){return Math.floor(this.valueOf()/1e3)},g.valueOf=function(){return this.$d.getTime()},g.startOf=function(t,e){var n=this,c=!!N.u(e)||e,p=N.p(t),h=function(t,e){var r=N.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return c?r:r.endOf(u)},d=function(t,e){return N.w(n.toDate()[t].apply(n.toDate("s"),(c?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},v=this.$W,g=this.$M,y=this.$D,b="set"+(this.$u?"UTC":"");switch(p){case f:return c?h(1,0):h(31,11);case a:return c?h(1,g):h(0,g+1);case s:var m=this.$locale().weekStart||0,w=(v<m?v+7:v)-m;return h(c?y-w:y+(6-w),g);case u:case l:return d(b+"Hours",0);case o:return d(b+"Minutes",1);case i:return d(b+"Seconds",2);case r:return d(b+"Milliseconds",3);default:return this.clone()}},g.endOf=function(t){return this.startOf(t,!1)},g.$set=function(t,e){var s,c=N.p(t),p="set"+(this.$u?"UTC":""),h=(s={},s[u]=p+"Date",s[l]=p+"Date",s[a]=p+"Month",s[f]=p+"FullYear",s[o]=p+"Hours",s[i]=p+"Minutes",s[r]=p+"Seconds",s[n]=p+"Milliseconds",s)[c],d=c===u?this.$D+(e-this.$W):e;if(c===a||c===f){var v=this.clone().set(l,1);v.$d[h](d),v.init(),this.$d=v.set(l,Math.min(this.$D,v.daysInMonth())).$d}else h&&this.$d[h](d);return this.init(),this},g.set=function(t,e){return this.clone().$set(t,e)},g.get=function(t){return this[N.p(t)]()},g.add=function(n,c){var l,p=this;n=Number(n);var h=N.p(c),d=function(t){var e=A(p);return N.w(e.date(e.date()+Math.round(t*n)),p)};if(h===a)return this.set(a,this.$M+n);if(h===f)return this.set(f,this.$y+n);if(h===u)return d(1);if(h===s)return d(7);var v=(l={},l[i]=t,l[o]=e,l[r]=1e3,l)[h]||1,g=this.$d.getTime()+n*v;return N.w(g,this)},g.subtract=function(t,e){return this.add(-1*t,e)},g.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=N.z(this),o=this.$H,u=this.$m,s=this.$M,a=n.weekdays,c=n.months,f=n.meridiem,l=function(t,n,i,o){return t&&(t[n]||t(e,r))||i[n].slice(0,o)},h=function(t){return N.s(o%12||12,t,"0")},v=f||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(d,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return N.s(e.$y,4,"0");case"M":return s+1;case"MM":return N.s(s+1,2,"0");case"MMM":return l(n.monthsShort,s,c,3);case"MMMM":return l(c,s);case"D":return e.$D;case"DD":return N.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return l(n.weekdaysMin,e.$W,a,2);case"ddd":return l(n.weekdaysShort,e.$W,a,3);case"dddd":return a[e.$W];case"H":return String(o);case"HH":return N.s(o,2,"0");case"h":return h(1);case"hh":return h(2);case"a":return v(o,u,!0);case"A":return v(o,u,!1);case"m":return String(u);case"mm":return N.s(u,2,"0");case"s":return String(e.$s);case"ss":return N.s(e.$s,2,"0");case"SSS":return N.s(e.$ms,3,"0");case"Z":return i}return null}(t)||i.replace(":","")}))},g.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},g.diff=function(n,l,p){var h,d=this,v=N.p(l),g=A(n),y=(g.utcOffset()-this.utcOffset())*t,b=this-g,m=function(){return N.m(d,g)};switch(v){case f:h=m()/12;break;case a:h=m();break;case c:h=m()/3;break;case s:h=(b-y)/6048e5;break;case u:h=(b-y)/864e5;break;case o:h=b/e;break;case i:h=b/t;break;case r:h=b/1e3;break;default:h=b}return p?h:N.a(h)},g.daysInMonth=function(){return this.endOf(a).$D},g.$locale=function(){return m[this.$L]},g.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=_(t,e,!0);return r&&(n.$L=r),n},g.clone=function(){return N.w(this.$d,this)},g.toDate=function(){return new Date(this.valueOf())},g.toJSON=function(){return this.isValid()?this.toISOString():null},g.toISOString=function(){return this.$d.toISOString()},g.toString=function(){return this.$d.toUTCString()},v}(),E=O.prototype;return A.prototype=E,[["$ms",n],["$s",r],["$m",i],["$H",o],["$W",u],["$M",a],["$y",f],["$D",l]].forEach((function(t){E[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),A.extend=function(t,e){return t.$i||(t(e,O,A),t.$i=!0),A},A.locale=_,A.isDayjs=x,A.unix=function(t){return A(1e3*t)},A.en=m[b],A.Ls=m,A.p={},A}()},function(t,e,n){"use strict";var r=n(0);function i(t,e,n,r,i){Error.call(this),this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i)}r.inherits(i,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var o=i.prototype,u={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(t){u[t]={value:t}})),Object.defineProperties(i,u),Object.defineProperty(o,"isAxiosError",{value:!0}),i.from=function(t,e,n,u,s,a){var c=Object.create(o);return r.toFlatObject(t,c,(function(t){return t!==Error.prototype})),i.call(c,t.message,e,n,u,s),c.name=t.name,a&&Object.assign(c,a),c},t.exports=i},function(t,e,n){var r=n(12),i=n(128),o=n(129),u=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?i(t):o(t)}},function(t,e,n){var r=n(73);function i(t,e,n){var o=r(t,8,void 0,void 0,void 0,void 0,void 0,e=n?void 0:e);return o.placeholder=i.placeholder,o}i.placeholder={},t.exports=i},function(t,e,n){var r=n(8),i=n(1),o=n(4);t.exports=function(t){return"string"==typeof t||!i(t)&&o(t)&&"[object String]"==r(t)}},function(t,e,n){"use strict";var r=n(7);function i(t){r.call(this,null==t?"canceled":t,r.ERR_CANCELED),this.name="CanceledError"}n(0).inherits(i,r,{__CANCEL__:!0}),t.exports=i},function(t,e,n){var r=n(3).Symbol;t.exports=r},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var r=n(58),i=n(30);t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},function(t,e,n){var r=n(140),i=n(141),o=n(142),u=n(143),s=n(144);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},function(t,e,n){var r=n(31);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},function(t,e,n){var r=n(5)(Object,"create");t.exports=r},function(t,e,n){var r=n(162);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e,n){var r=n(8),i=n(4);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r=n(19);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(35),i=n(2);t.exports=function(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=r(t.prototype),o=t.apply(n,e);return i(o)?o:n}}},function(t,e){t.exports=function(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n];u!==e&&"__lodash_placeholder__"!==u||(t[n]="__lodash_placeholder__",o[i++]=n)}return o}},function(t,e){t.exports={AL:[{regex:/^\d{7,8}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 8"},{regex:/^[A-Z]\d{6,7}$/i,description:"ANNNNNNNN MinLength = 7 MaxLength = 8"}],AK:[{regex:/^\d{7}$/,description:"NNNNNNNN MinLength = 7 MaxLength = 7"}],AZ:[{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],AR:[{regex:/^[0-9]{9}$/,description:"NNNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],CA:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"}],CO:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]{1}[0-9]{3,6}$/i,description:"ANNNNNN min length 4 max 7"},{regex:/^[A-Z]{2}[0-9]{1,5}$/i,description:"AANNNNN min length 3 max 7"}],CT:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],DE:[{regex:/^\d{1,7}$/,description:"License must be 1-7 numbers"}],DC:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],FL:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"},{regex:/^[A-Z]\d{11}$/i,description:"ANNNNNNNNNNN MinLength = 12 MaxLength = 12"}],GA:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],GU:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],HI:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],ID:[{regex:/^[A-Z]{2}[0-9]{6}[A-Z]{1}$/i,description:"License must be 2 letters followed by 6 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],IL:[{regex:/^[A-Z]{1}[0-9]{11}$/i,description:"License must be 1 letter followed by 11 numbers"}],IN:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"}],IA:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{2}[0-9]{4}$/i,description:"License must be 3 numbers followed by 2 letters followed by 4 numbers"}],KS:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],KY:[{regex:/^[A-Z]{1}[0-9]{8,9}$/i,description:"License must be 1 letter followed by 8-9 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],LA:[{regex:/^[0-9]{1,9}$/i,description:"License must be 1-9 numbers"}],ME:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{7}[A-Z]{1}$/i,description:"License must be 7 numbers followed by 1 letter"},{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],MD:[{regex:/^[A-Z]{1,2}[0-9]{11,12}$/i,description:"License must be 1 or 2 letters followed by 11 or 12 numbers"}],MA:[{regex:/(^[A-Z]{1}[0-9]{8}$|^[A-Z]{2}[0-9]{7}$)/i,description:"License must be 1 letter followed by 8 numbers or 2 letters followed by 7 numbers"}],MI:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MN:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MS:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],MO:[{regex:/^[A-Z]{1}[0-9]{5,9}$/i,description:"License must be 1 letter followed by 5-9 numbers"},{regex:/^[A-Z]{1}[0-9]{6}[R]{1}$/i,description:'License must be 1 letter followed by 6 numbers followed by "R"'},{regex:/^[0-9]{9}[A-Z]{1}$/i,description:"License must be 9 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{1}[0-9]{6}$/i,description:"License must be 3 numbers + 1 alfanumeric + 6 numbers"},{regex:/^[A-Z]\d{5,6}[A-Z]$/i,description:"ANNNNNA MinLength = 7 MaxLength = 7 OR ANNNNNA MinLength = 8 MaxLength = 8"}],MT:[{regex:/^[0-9]{13}$/i,description:"License must be 13 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]\d(\d|[A-Z])\d{2}[A-Z]{3}\d$/i,description:"ANXNNAAAN MinLength = 9 MaxLength = 9"},{regex:/^[a-z]{3}\d{10}$/i,description:"Three letters and 10 digits"}],NE:[{regex:/^[A-Z]\d{3,8}$/i,description:"ANNNNNNNN MinLength = 4 MaxLength = 9"}],NV:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"},{regex:/^[0-9]{12}$/i,description:"License must be 12 numbers"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],NH:[{regex:/(^[0-9]{2}[A-Z]{3}[0-9]{5}$|^[A-Z]{3}[0-9]{8}$)/i,description:"License must be 2 numbers followed by 3 letters followed by 5 numbers OR 3 letters followed by 8 numbers"}],NJ:[{regex:/^[A-Z]{1}[0-9]{14}$/i,description:"License must be 1 letter followed by 14 numbers"}],NM:[{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NY:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"},{regex:/^[A-Z]{1}[0-9]{17,18}$/i,description:"License must be 1 letter followed by 17-18 numbers"},{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NC:[{regex:/^[0-9]{1,12}$/i,description:"License must be 1-12 numbers"}],ND:[{regex:/^[A-Z]{3}[0-9]{6}$/i,description:"License must be 3 letters followed by 6 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],OH:[{regex:/^[A-Z]{2}[0-9]{6}$/i,description:"License must be 2 letters followed by 6 numbers"}],OK:[{regex:/^[A-Z]{1}[0-9]{9}$/i,description:"License must be 1 letter followed by 9 numbers"},{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}],OR:[{regex:/^[0-9]{5,9}$/i,description:"License must be 5-9 numbers"},{regex:/^[A-Z]\d{7}$/i,description:"ANNNNNNN MinLength = 8 MaxLength = 8"},{regex:/^[A-Z0-9]{6,9}$/i,description:"XXXXXXXXX MinLength = 6 MaxLength = 9"}],PA:[{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],RI:[{regex:/^[0-9]{7,8}$/i,description:"License must be 7 or 8 numbers without letters"},{regex:/^[A-Z]{1}[0-9]{6}$/i,description:"License must be 1 letter followed by 6 numbers"}],SC:[{regex:/^[0-9]{6,11}$/i,description:"License must be 6-11 numbers (new: 9, old format: 6-11)"}],SD:[{regex:/^[0-9]{6,9}$/i,description:"License must be 6-9 numbers"}],TN:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],TX:[{regex:/^\d{5,8}$/,description:"NNNNNNNN MinLength = 5 MaxLength = 8"}],UT:[{regex:/^[0-9]{4,10}$/i,description:"License must be 4-10 numbers"}],VT:[{regex:/^[0-9]{7,}$/i,description:"License must be 7-8 numbers"},{regex:/^[0-9]{7}[A]$/i,description:'License must be 7 numbers followed by "A"'},{regex:/^\d{7}[A-Z]?$/i,description:"NNNNNNNA MinLength = 8 MaxLength = 8 OR NNNNNNN MinLength = 7 MaxLength = 7"}],VA:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],VI:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],WA:[{regex:/^(?=.{12}$)[A-Z]{1,7}[A-Z0-9\\*]{4,11}$/i,description:'License must be 1-7 letters followed by any combination of letters, numbers, or "*" for a total of 12 characters'},{regex:/^[A-Z0-9]{12}$/i,description:"XXXXXXXXXXXX MinLength = 12 MaxLength = 12"}],WV:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[A-Z]{2}[0-9]{5}$/i,description:"License must be 2 letters followed by 5 numbers"},{regex:/^[A-Z]{1,2}[0-9]{6}$/i,description:"License must be 1-2 letters followed by 6 numbers"},{regex:/^[A-Z]\d{6}$/i,description:"ANNNNNN MinLength = 7 MaxLength = 7"},{regex:/^[A-Z]{2}\d{5,6}$/i,description:"AANNNNN MinLength = 7 MaxLength = 7 OR AANNNNNN MinLength = 8 MaxLength = 8"},{regex:/^\d[A-Z]\d{5}$/i,description:"NANNNNN MinLength = 7 MaxLength = 7"}],WI:[{regex:/^[A-Z]{1}[0-9]{13}$/i,description:"License must be 1 letter followed by 13 numbers"}],WY:[{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],PR:[{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}]}},function(t,e,n){"use strict";(function(e){var r=n(0),i=n(102),o=n(7),u=n(45),s=n(46),a={"Content-Type":"application/x-www-form-urlencoded"};function c(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var f,l={transitional:u,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==e&&"[object process]"===Object.prototype.toString.call(e))&&(f=n(48)),f),transformRequest:[function(t,e){if(i(e,"Accept"),i(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t))return t;if(r.isArrayBufferView(t))return t.buffer;if(r.isURLSearchParams(t))return c(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString();var n,o=r.isObject(t),u=e&&e["Content-Type"];if((n=r.isFileList(t))||o&&"multipart/form-data"===u){var a=this.env&&this.env.FormData;return s(n?{"files[]":t}:t,a&&new a)}return o||"application/json"===u?(c(e,"application/json"),function(t,e,n){if(r.isString(t))try{return(e||JSON.parse)(t),r.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||l.transitional,n=e&&e.silentJSONParsing,i=e&&e.forcedJSONParsing,u=!n&&"json"===this.responseType;if(u||i&&r.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(u){if("SyntaxError"===t.name)throw o.from(t,o.ERR_BAD_RESPONSE,this,null,this.response);throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(114)},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(t){l.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){l.headers[t]=r.merge(a)})),t.exports=l}).call(this,n(101))},function(t,e,n){var r=n(125),i=n(56),o=n(14);t.exports=function(t){return o(t)?r(t):i(t)}},function(t,e,n){var r=n(127),i=n(4),o=Object.prototype,u=o.hasOwnProperty,s=o.propertyIsEnumerable,a=r(function(){return arguments}())?r:function(t){return i(t)&&u.call(t,"callee")&&!s.call(t,"callee")};t.exports=a},function(t,e,n){(function(t){var r=n(3),i=n(130),o=e&&!e.nodeType&&e,u=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=u&&u.exports===o?r.Buffer:void 0,a=(s?s.isBuffer:void 0)||i;t.exports=a}).call(this,n(55)(t))},function(t,e,n){var r=n(131),i=n(132),o=n(133),u=o&&o.isTypedArray,s=u?i(u):r;t.exports=s},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(5)(n(3),"Map");t.exports=r},function(t,e,n){var r=n(154),i=n(161),o=n(163),u=n(164),s=n(165);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},function(t,e,n){var r=n(1),i=n(19),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!i(t))||(u.test(t)||!o.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(2),i=Object.create,o=function(){function t(){}return function(e){if(!r(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=o},function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},function(t,e,n){var r=n(35),i=n(38);function o(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}o.prototype=r(i.prototype),o.prototype.constructor=o,t.exports=o},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t){return t.placeholder}},function(t,e,n){var r,i,o;!function(u){"use strict";if(null!=e&&"number"!=typeof e.nodeType)t.exports=u();else if(null!=n(119))i=[],void 0===(o="function"==typeof(r=u)?r.apply(e,i):r)||(t.exports=o);else{var s=u(),a="undefined"!=typeof self?self:$.global;"function"!=typeof a.btoa&&(a.btoa=s.btoa),"function"!=typeof a.atob&&(a.atob=s.atob)}}((function(){"use strict";var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function e(t){this.message=t}return e.prototype=new Error,e.prototype.name="InvalidCharacterError",{btoa:function(n){for(var r,i,o=String(n),u=0,s=t,a="";o.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&r>>8-u%1*8)){if((i=o.charCodeAt(u+=3/4))>255)throw new e("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|i}return a},atob:function(n){var r=String(n).replace(/[=]+$/,"");if(r.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var i,o,u=0,s=0,a="";o=r.charAt(s++);~o&&(i=u%4?64*i+o:o,u++%4)?a+=String.fromCharCode(255&i>>(-2*u&6)):0)o=t.indexOf(o);return a}}}))},function(t,e,n){var r=n(225),i=n(73),o=n(39),u=n(23),s=r((function(t,e){var n=u(e,o(s));return i(t,32,void 0,e,n)}));s.placeholder={},t.exports=s},function(t,e,n){var r=n(24),i=n(233),o=n(234),u=n(235);t.exports={driversLicenseRegex:r,isValidUSLicense:i,validateUSDriversLicense:o,supportedStates:u}},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e,n){"use strict";var r=n(0);function i(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(r.isURLSearchParams(e))o=e.toString();else{var u=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)?e+="[]":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),u.push(i(e)+"="+i(t))})))})),o=u.join("&")}if(o){var s=t.indexOf("#");-1!==s&&(t=t.slice(0,s)),t+=(-1===t.indexOf("?")?"?":"&")+o}return t}},function(t,e,n){"use strict";t.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},function(t,e,n){"use strict";(function(e){var r=n(0);t.exports=function(t,n){n=n||new FormData;var i=[];function o(t){return null===t?"":r.isDate(t)?t.toISOString():r.isArrayBuffer(t)||r.isTypedArray(t)?"function"==typeof Blob?new Blob([t]):e.from(t):t}return function t(e,u){if(r.isPlainObject(e)||r.isArray(e)){if(-1!==i.indexOf(e))throw Error("Circular reference detected in "+u);i.push(e),r.forEach(e,(function(e,i){if(!r.isUndefined(e)){var s,a=u?u+"."+i:i;if(e&&!u&&"object"==typeof e)if(r.endsWith(i,"{}"))e=JSON.stringify(e);else if(r.endsWith(i,"[]")&&(s=r.toArray(e)))return void s.forEach((function(t){!r.isUndefined(t)&&n.append(a,o(t))}));t(e,a)}})),i.pop()}else n.append(u,o(e))}(t),n}}).call(this,n(103).Buffer)},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var r=n(0),i=n(107),o=n(108),u=n(44),s=n(49),a=n(111),c=n(112),f=n(45),l=n(7),p=n(11),h=n(113);t.exports=function(t){return new Promise((function(e,n){var d,v=t.data,g=t.headers,y=t.responseType;function b(){t.cancelToken&&t.cancelToken.unsubscribe(d),t.signal&&t.signal.removeEventListener("abort",d)}r.isFormData(v)&&r.isStandardBrowserEnv()&&delete g["Content-Type"];var m=new XMLHttpRequest;if(t.auth){var w=t.auth.username||"",x=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";g.Authorization="Basic "+btoa(w+":"+x)}var _=s(t.baseURL,t.url);function A(){if(m){var r="getAllResponseHeaders"in m?a(m.getAllResponseHeaders()):null,o={data:y&&"text"!==y&&"json"!==y?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:t,request:m};i((function(t){e(t),b()}),(function(t){n(t),b()}),o),m=null}}if(m.open(t.method.toUpperCase(),u(_,t.params,t.paramsSerializer),!0),m.timeout=t.timeout,"onloadend"in m?m.onloadend=A:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(A)},m.onabort=function(){m&&(n(new l("Request aborted",l.ECONNABORTED,t,m)),m=null)},m.onerror=function(){n(new l("Network Error",l.ERR_NETWORK,t,m,m)),m=null},m.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",r=t.transitional||f;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(new l(e,r.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,t,m)),m=null},r.isStandardBrowserEnv()){var N=(t.withCredentials||c(_))&&t.xsrfCookieName?o.read(t.xsrfCookieName):void 0;N&&(g[t.xsrfHeaderName]=N)}"setRequestHeader"in m&&r.forEach(g,(function(t,e){void 0===v&&"content-type"===e.toLowerCase()?delete g[e]:m.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(m.withCredentials=!!t.withCredentials),y&&"json"!==y&&(m.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&m.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&m.upload&&m.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(d=function(t){m&&(n(!t||t&&t.type?new p:t),m.abort(),m=null)},t.cancelToken&&t.cancelToken.subscribe(d),t.signal&&(t.signal.aborted?d():t.signal.addEventListener("abort",d))),v||(v=null);var O=h(_);O&&-1===["http","https","file"].indexOf(O)?n(new l("Unsupported protocol "+O+":",l.ERR_BAD_REQUEST,t)):m.send(v)}))}},function(t,e,n){"use strict";var r=n(109),i=n(110);t.exports=function(t,e){return t&&!r(e)?i(t,e):e}},function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){"use strict";var r=n(0);t.exports=function(t,e){e=e||{};var n={};function i(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function o(n){return r.isUndefined(e[n])?r.isUndefined(t[n])?void 0:i(void 0,t[n]):i(t[n],e[n])}function u(t){if(!r.isUndefined(e[t]))return i(void 0,e[t])}function s(n){return r.isUndefined(e[n])?r.isUndefined(t[n])?void 0:i(void 0,t[n]):i(void 0,e[n])}function a(n){return n in e?i(t[n],e[n]):n in t?i(void 0,t[n]):void 0}var c={url:u,method:u,data:u,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a};return r.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=c[t]||o,i=e(t);r.isUndefined(i)&&e!==a||(n[t]=i)})),n}},function(t,e){t.exports={version:"0.27.2"}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(47))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){var r=n(57),i=n(134),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))o.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var r=n(8),i=n(2);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(15),i=n(145),o=n(146),u=n(147),s=n(148),a=n(149);function c(t){var e=this.__data__=new r(t);this.size=e.size}c.prototype.clear=i,c.prototype.delete=o,c.prototype.get=u,c.prototype.has=s,c.prototype.set=a,t.exports=c},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(166),i=n(4);t.exports=function t(e,n,o,u,s){return e===n||(null==e||null==n||!i(e)&&!i(n)?e!=e&&n!=n:r(e,n,o,u,t,s))}},function(t,e,n){var r=n(167),i=n(170),o=n(171);t.exports=function(t,e,n,u,s,a){var c=1&n,f=t.length,l=e.length;if(f!=l&&!(c&&l>f))return!1;var p=a.get(t),h=a.get(e);if(p&&h)return p==e&&h==t;var d=-1,v=!0,g=2&n?new r:void 0;for(a.set(t,e),a.set(e,t);++d<f;){var y=t[d],b=e[d];if(u)var m=c?u(b,y,d,e,t,a):u(y,b,d,t,e,a);if(void 0!==m){if(m)continue;v=!1;break}if(g){if(!i(e,(function(t,e){if(!o(g,e)&&(y===t||s(y,t,n,u,a)))return g.push(e)}))){v=!1;break}}else if(y!==b&&!s(y,b,n,u,a)){v=!1;break}}return a.delete(t),a.delete(e),v}},function(t,e,n){var r=n(182),i=n(32),o=n(183),u=n(184),s=n(64),a=n(8),c=n(60),f=c(r),l=c(i),p=c(o),h=c(u),d=c(s),v=a;(r&&"[object DataView]"!=v(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=v(new i)||o&&"[object Promise]"!=v(o.resolve())||u&&"[object Set]"!=v(new u)||s&&"[object WeakMap]"!=v(new s))&&(v=function(t){var e=a(t),n="[object Object]"==e?t.constructor:void 0,r=n?c(n):"";if(r)switch(r){case f:return"[object DataView]";case l:return"[object Map]";case p:return"[object Promise]";case h:return"[object Set]";case d:return"[object WeakMap]"}return e}),t.exports=v},function(t,e,n){var r=n(5)(n(3),"WeakMap");t.exports=r},function(t,e,n){var r=n(2);t.exports=function(t){return t==t&&!r(t)}},function(t,e){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},function(t,e,n){var r=n(68),i=n(20);t.exports=function(t,e){for(var n=0,o=(e=r(e,t)).length;null!=t&&n<o;)t=t[i(e[n++])];return n&&n==o?t:void 0}},function(t,e,n){var r=n(1),i=n(34),o=n(188),u=n(69);t.exports=function(t,e){return r(t)?t:i(t,e)?[t]:o(u(t))}},function(t,e,n){var r=n(191);t.exports=function(t){return null==t?"":r(t)}},function(t,e,n){var r=n(199),i=n(200),o=n(201);t.exports=function(t,e,n){return e==e?o(t,e,n):r(t,i,n)}},function(t,e,n){var r=n(72);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(202);t.exports=function(t){return t?(t=r(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},function(t,e,n){var r=n(74),i=n(205),o=n(206),u=n(76),s=n(223),a=n(80),c=n(224),f=n(83),l=n(85),p=n(71),h=Math.max;t.exports=function(t,e,n,d,v,g,y,b){var m=2&e;if(!m&&"function"!=typeof t)throw new TypeError("Expected a function");var w=d?d.length:0;if(w||(e&=-97,d=v=void 0),y=void 0===y?y:h(p(y),0),b=void 0===b?b:p(b),w-=v?v.length:0,64&e){var x=d,_=v;d=v=void 0}var A=m?void 0:a(t),N=[t,e,n,d,v,x,_,g,y,b];if(A&&c(N,A),t=N[0],e=N[1],n=N[2],d=N[3],v=N[4],!(b=N[9]=void 0===N[9]?m?0:t.length:h(N[9]-w,0))&&24&e&&(e&=-25),e&&1!=e)O=8==e||16==e?o(t,e,b):32!=e&&33!=e||v.length?u.apply(void 0,N):s(t,e,n,d);else var O=i(t,e,n);return l((A?r:f)(O,N),t,e)}},function(t,e,n){var r=n(21),i=n(75),o=i?function(t,e){return i.set(t,e),t}:r;t.exports=o},function(t,e,n){var r=n(64),i=r&&new r;t.exports=i},function(t,e,n){var r=n(77),i=n(78),o=n(207),u=n(22),s=n(79),a=n(39),c=n(222),f=n(23),l=n(3);t.exports=function t(e,n,p,h,d,v,g,y,b,m){var w=128&n,x=1&n,_=2&n,A=24&n,N=512&n,O=_?void 0:u(e);return function E(){for(var S=arguments.length,R=Array(S),$=S;$--;)R[$]=arguments[$];if(A)var j=a(E),L=o(R,j);if(h&&(R=r(R,h,d,A)),v&&(R=i(R,v,g,A)),S-=L,A&&S<m){var T=f(R,j);return s(e,n,t,E.placeholder,p,R,T,y,b,m-S)}var M=x?p:this,C=_?M[e]:e;return S=R.length,y?R=c(R,y):N&&S>1&&R.reverse(),w&&b<S&&(R.length=b),this&&this!==l&&this instanceof E&&(C=O||u(C)),C.apply(M,R)}}},function(t,e){var n=Math.max;t.exports=function(t,e,r,i){for(var o=-1,u=t.length,s=r.length,a=-1,c=e.length,f=n(u-s,0),l=Array(c+f),p=!i;++a<c;)l[a]=e[a];for(;++o<s;)(p||o<u)&&(l[r[o]]=t[o]);for(;f--;)l[a++]=t[o++];return l}},function(t,e){var n=Math.max;t.exports=function(t,e,r,i){for(var o=-1,u=t.length,s=-1,a=r.length,c=-1,f=e.length,l=n(u-a,0),p=Array(l+f),h=!i;++o<l;)p[o]=t[o];for(var d=o;++c<f;)p[d+c]=e[c];for(;++s<a;)(h||o<u)&&(p[d+r[s]]=t[o++]);return p}},function(t,e,n){var r=n(208),i=n(83),o=n(85);t.exports=function(t,e,n,u,s,a,c,f,l,p){var h=8&e;e|=h?32:64,4&(e&=~(h?64:32))||(e&=-4);var d=[t,e,s,h?a:void 0,h?c:void 0,h?void 0:a,h?void 0:c,f,l,p],v=n.apply(void 0,d);return r(t)&&i(v,d),v.placeholder=u,o(v,t,e)}},function(t,e,n){var r=n(75),i=n(209),o=r?function(t){return r.get(t)}:i;t.exports=o},function(t,e,n){var r=n(35),i=n(38);function o(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}o.prototype=r(i.prototype),o.prototype.constructor=o,t.exports=o},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},function(t,e,n){var r=n(74),i=n(84)(r);t.exports=i},function(t,e){var n=Date.now;t.exports=function(t){var e=0,r=0;return function(){var i=n(),o=16-(i-r);if(r=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(214),i=n(215),o=n(86),u=n(219);t.exports=function(t,e,n){var s=e+"";return o(t,i(s,u(r(s),n)))}},function(t,e,n){var r=n(216),i=n(84)(r);t.exports=i},function(t,e){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return n.test(t)}},function(t,e,n){t.exports=n(96)},function(t,e,n){var r=n(53),i=n(120),o=n(137),u=n(1);t.exports=function(t,e){return(u(t)?r:i)(t,o(e,3))}},function(t,e,n){var r=n(70),i=n(71),o=Math.max;t.exports=function(t,e,n){var u=null==t?0:t.length;if(!u)return-1;var s=null==n?0:i(n);return s<0&&(s=o(u+s,0)),r(t,e,s)}},function(t,e,n){var r=n(56),i=n(63),o=n(27),u=n(1),s=n(14),a=n(28),c=n(57),f=n(29),l=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(s(t)&&(u(t)||"string"==typeof t||"function"==typeof t.splice||a(t)||f(t)||o(t)))return!t.length;var e=i(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(c(t))return!r(t).length;for(var n in t)if(l.call(t,n))return!1;return!0}},function(t,e,n){t.exports=function(){"use strict";return function(t,e,n){t=t||{};var r=e.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function o(t,e,n,i){return r.fromToBase(t,e,n,i)}n.en.relativeTime=i,r.fromToBase=function(e,r,o,u,s){for(var a,c,f,l=o.$locale().relativeTime||i,p=t.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],h=p.length,d=0;d<h;d+=1){var v=p[d];v.d&&(a=u?n(e).diff(o,v.d,!0):o.diff(e,v.d,!0));var g=(t.rounding||Math.round)(Math.abs(a));if(f=a>0,g<=v.r||!v.r){g<=1&&d>0&&(v=p[d-1]);var y=l[v.l];s&&(g=s(""+g)),c="string"==typeof y?y.replace("%d",g):y(g,r,v.l,f);break}}if(r)return c;var b=f?l.future:l.past;return"function"==typeof b?b(c):b.replace("%s",c)},r.to=function(t,e){return o(t,e,this,!0)},r.from=function(t,e){return o(t,e,this)};var u=function(t){return t.$u?n.utc():n()};r.toNow=function(t){return this.to(u(this),t)},r.fromNow=function(t){return this.from(u(this),t)}}}()},function(t,e,n){t.exports=function(){"use strict";var t="minute",e=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,i,o){var u=i.prototype;o.utc=function(t){var e={date:t,utc:!0,args:arguments};return new i(e)},u.utc=function(e){var n=o(this.toDate(),{locale:this.$L,utc:!0});return e?n.add(this.utcOffset(),t):n},u.local=function(){return o(this.toDate(),{locale:this.$L,utc:!1})};var s=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),s.call(this,t)};var a=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else a.call(this)};var c=u.utcOffset;u.utcOffset=function(r,i){var o=this.$utils().u;if(o(r))return this.$u?0:o(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&null===(r=function(t){void 0===t&&(t="");var r=t.match(e);if(!r)return null;var i=(""+r[0]).match(n)||["-",0,0],o=i[0],u=60*+i[1]+ +i[2];return 0===u?0:"+"===o?u:-u}(r)))return this;var u=Math.abs(r)<=16?60*r:r;if(0===u)return this.utc(i);var s=this.clone();if(i)return s.$offset=u,s.$u=!1,s;var a=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(s=this.local().add(u+a,t)).$offset=u,s.$x.$localOffset=a,s};var f=u.format;u.format=function(t){var e=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,e)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?o(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var p=u.diff;u.diff=function(t,e,n){if(t&&this.$u===t.$u)return p.call(this,t,e,n);var r=this.local(),i=o(t).local();return p.call(r,i,e,n)}}}()},function(t,e,n){var r=n(227)("toUpperCase");t.exports=r},function(t,e,n){var r=n(236)();t.exports=r},function(t,e,n){"use strict";var r=n(0),i=n(43),o=n(97),u=n(51);var s=function t(e){var n=new o(e),s=i(o.prototype.request,n);return r.extend(s,o.prototype,n),r.extend(s,n),s.create=function(n){return t(u(e,n))},s}(n(25));s.Axios=o,s.CanceledError=n(11),s.CancelToken=n(116),s.isCancel=n(50),s.VERSION=n(52).version,s.toFormData=n(46),s.AxiosError=n(7),s.Cancel=s.CanceledError,s.all=function(t){return Promise.all(t)},s.spread=n(117),s.isAxiosError=n(118),t.exports=s,t.exports.default=s},function(t,e,n){"use strict";var r=n(0),i=n(44),o=n(98),u=n(99),s=n(51),a=n(49),c=n(115),f=c.validators;function l(t){this.defaults=t,this.interceptors={request:new o,response:new o}}l.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=s(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&c.assertOptions(n,{silentJSONParsing:f.transitional(f.boolean),forcedJSONParsing:f.transitional(f.boolean),clarifyTimeoutError:f.transitional(f.boolean)},!1);var r=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,r.unshift(t.fulfilled,t.rejected))}));var o,a=[];if(this.interceptors.response.forEach((function(t){a.push(t.fulfilled,t.rejected)})),!i){var l=[u,void 0];for(Array.prototype.unshift.apply(l,r),l=l.concat(a),o=Promise.resolve(e);l.length;)o=o.then(l.shift(),l.shift());return o}for(var p=e;r.length;){var h=r.shift(),d=r.shift();try{p=h(p)}catch(t){d(t);break}}try{o=u(p)}catch(t){return Promise.reject(t)}for(;a.length;)o=o.then(a.shift(),a.shift());return o},l.prototype.getUri=function(t){t=s(this.defaults,t);var e=a(t.baseURL,t.url);return i(e,t.params,t.paramsSerializer)},r.forEach(["delete","get","head","options"],(function(t){l.prototype[t]=function(e,n){return this.request(s(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){function e(e){return function(n,r,i){return this.request(s(i||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}l.prototype[t]=e(),l.prototype[t+"Form"]=e(!0)})),t.exports=l},function(t,e,n){"use strict";var r=n(0);function i(){this.handlers=[]}i.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},i.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},i.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=n(100),o=n(50),u=n(25),s=n(11);function a(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new s}t.exports=function(t){return a(t),t.headers=t.headers||{},t.data=i.call(t,t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||u.adapter)(t).then((function(e){return a(t),e.data=i.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return o(e)||(a(t),e&&e.response&&(e.response.data=i.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(0),i=n(25);t.exports=function(t,e,n){var o=this||i;return r.forEach(n,(function(n){t=n.call(o,t,e)})),t}},function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:u}catch(t){r=u}}();var a,c=[],f=!1,l=-1;function p(){f&&a&&(f=!1,a.length?c=a.concat(c):l=-1,c.length&&h())}function h(){if(!f){var t=s(p);f=!0;for(var e=c.length;e;){for(a=c,c=[];++l<e;)a&&a[l].run();l=-1,e=c.length}a=null,f=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===u||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function d(t,e){this.fun=t,this.array=e}function v(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new d(t,e)),1!==c.length||f||s(h)},d.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=v,i.addListener=v,i.once=v,i.off=v,i.removeListener=v,i.removeAllListeners=v,i.emit=v,i.prependListener=v,i.prependOnceListener=v,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(t,e,n){"use strict";var r=n(0);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";(function(t){
|
|
16
2
|
/*!
|
|
17
|
-
*
|
|
3
|
+
* The buffer module from node.js, for the browser.
|
|
18
4
|
*
|
|
19
|
-
* @author Feross Aboukhadijeh <
|
|
5
|
+
* @author Feross Aboukhadijeh <http://feross.org>
|
|
20
6
|
* @license MIT
|
|
21
7
|
*/
|
|
22
|
-
t.exports=function(t){return null!=t&&(n(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&n(t.slice(0,0))}(t)||!!t._isBuffer)}},function(t,e,n){"use strict";var r=n(38),o=n(5),i=n(182),u=n(183),a=n(185),s=n(186);function c(t){this.defaults=t,this.interceptors={request:new i,response:new i}}c.prototype.request=function(t){"string"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),(t=o.merge(r,this.defaults,{method:"get"},t)).method=t.method.toLowerCase(),t.baseURL&&!a(t.url)&&(t.url=s(t.baseURL,t.url));var e=[u,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));e.length;)n=n.then(e.shift(),e.shift());return n},o.forEach(["delete","get","head","options"],(function(t){c.prototype[t]=function(e,n){return this.request(o.merge(n||{},{method:t,url:e}))}})),o.forEach(["post","put","patch"],(function(t){c.prototype[t]=function(e,n,r){return this.request(o.merge(r||{},{method:t,url:e,data:n}))}})),t.exports=c},function(t,e,n){"use strict";var r=n(5);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";var r=n(67);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t}},function(t,e,n){"use strict";var r=n(5);function o(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(r.isURLSearchParams(e))i=e.toString();else{var u=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)&&(e+="[]"),r.isArray(t)||(t=[t]),r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),u.push(o(e)+"="+o(t))})))})),i=u.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},function(t,e,n){"use strict";var r=n(5);t.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),(function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)})),i):i}},function(t,e,n){"use strict";var r=n(5);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";function r(){this.message="String contains an invalid character"}r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=function(t){for(var e,n,o=String(t),i="",u=0,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";o.charAt(0|u)||(a="=",u%1);i+=a.charAt(63&e>>8-u%1*8)){if((n=o.charCodeAt(u+=3/4))>255)throw new r;e=e<<8|n}return i}},function(t,e,n){"use strict";var r=n(5);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,o,i,u){var a=[];a.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),!0===u&&a.push("secure"),document.cookie=a.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(5);function o(){this.handlers=[]}o.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},o.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},o.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=o},function(t,e,n){"use strict";var r=n(5),o=n(184),i=n(68),u=n(38);function a(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return a(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||u.adapter)(t).then((function(e){return a(t),e.data=o(e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(a(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(5);t.exports=function(t,e,n){return r.forEach(n,(function(n){t=n(t,e)})),t}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(69);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t;return{token:new o((function(e){t=e})),cancel:t}},t.exports=o},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e){(function(e){t.exports=e}).call(this,{})},function(t,e,n){var r=n(191),o=n(248),i=n(85);t.exports=function(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(72),o=n(76);t.exports=function(t,e,n,i){var u=n.length,a=u,s=!i;if(null==t)return!a;for(t=Object(t);u--;){var c=n[u];if(s&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++u<a;){var f=(c=n[u])[0],l=t[f],p=c[1];if(s&&c[2]){if(void 0===l&&!(f in t))return!1}else{var h=new r;if(i)var d=i(l,p,f,t,e,h);if(!(void 0===d?o(p,l,3,i,h):d))return!1}}return!0}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(24),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():o.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(24);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(24);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(24);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},function(t,e,n){var r=n(23);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(23),o=n(40),i=n(41);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var u=n.__data__;if(!o||u.length<199)return u.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(u)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(73),o=n(205),i=n(3),u=n(75),a=/^\[object .+?Constructor\]$/,s=Function.prototype,c=Object.prototype,f=s.toString,l=c.hasOwnProperty,p=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||o(t))&&(r(t)?p:a).test(u(t))}},function(t,e,n){var r=n(25),o=Object.prototype,i=o.hasOwnProperty,u=o.toString,a=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,a),n=t[a];try{t[a]=void 0;var r=!0}catch(t){}var o=u.call(t);return r&&(e?t[a]=n:delete t[a]),o}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r,o=n(206),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!i&&i in t}},function(t,e,n){var r=n(4)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(209),o=n(23),i=n(40);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(t,e,n){var r=n(210),o=n(211),i=n(212),u=n(213),a=n(214);function s(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=i,s.prototype.has=u,s.prototype.set=a,t.exports=s},function(t,e,n){var r=n(26);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var r=n(26),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(e,t)?e[t]:void 0}},function(t,e,n){var r=n(26),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:o.call(e,t)}},function(t,e,n){var r=n(26);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var r=n(27);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var r=n(27);t.exports=function(t){return r(this,t).get(t)}},function(t,e,n){var r=n(27);t.exports=function(t){return r(this,t).has(t)}},function(t,e,n){var r=n(27);t.exports=function(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}},function(t,e,n){var r=n(72),o=n(77),i=n(226),u=n(230),a=n(82),s=n(2),c=n(44),f=n(45),l="[object Object]",p=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,h,d,v){var y=s(t),g=s(e),b=y?"[object Array]":a(t),m=g?"[object Array]":a(e),x=(b="[object Arguments]"==b?l:b)==l,w=(m="[object Arguments]"==m?l:m)==l,_=b==m;if(_&&c(t)){if(!c(e))return!1;y=!0,x=!1}if(_&&!x)return v||(v=new r),y||f(t)?o(t,e,n,h,d,v):i(t,e,b,n,h,d,v);if(!(1&n)){var O=x&&p.call(t,"__wrapped__"),A=w&&p.call(e,"__wrapped__");if(O||A){var N=O?t.value():t,S=A?e.value():e;return v||(v=new r),d(N,S,n,h,v)}}return!!_&&(v||(v=new r),u(t,e,n,h,d,v))}},function(t,e,n){var r=n(41),o=n(222),i=n(223);function u(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}u.prototype.add=u.prototype.push=o,u.prototype.has=i,t.exports=u},function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},function(t,e){t.exports=function(t,e){return t.has(e)}},function(t,e,n){var r=n(25),o=n(227),i=n(39),u=n(77),a=n(228),s=n(229),c=r?r.prototype:void 0,f=c?c.valueOf:void 0;t.exports=function(t,e,n,r,c,l,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!l(new o(t),new o(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var h=a;case"[object Set]":var d=1&r;if(h||(h=s),t.size!=e.size&&!d)return!1;var v=p.get(t);if(v)return v==e;r|=2,p.set(t,e);var y=u(h(t),h(e),r,c,l,p);return p.delete(t),y;case"[object Symbol]":if(f)return f.call(t)==f.call(e)}return!1}},function(t,e,n){var r=n(4).Uint8Array;t.exports=r},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},function(t,e,n){var r=n(231),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,i,u,a){var s=1&n,c=r(t),f=c.length;if(f!=r(e).length&&!s)return!1;for(var l=f;l--;){var p=c[l];if(!(s?p in e:o.call(e,p)))return!1}var h=a.get(t),d=a.get(e);if(h&&d)return h==e&&d==t;var v=!0;a.set(t,e),a.set(e,t);for(var y=s;++l<f;){var g=t[p=c[l]],b=e[p];if(i)var m=s?i(b,g,p,e,t,a):i(g,b,p,t,e,a);if(!(void 0===m?g===b||u(g,b,n,i,a):m)){v=!1;break}y||(y="constructor"==p)}if(v&&!y){var x=t.constructor,w=e.constructor;x==w||!("constructor"in t)||!("constructor"in e)||"function"==typeof x&&x instanceof x&&"function"==typeof w&&w instanceof w||(v=!1)}return a.delete(t),a.delete(e),v}},function(t,e,n){var r=n(232),o=n(234),i=n(42);t.exports=function(t){return r(t,i,o)}},function(t,e,n){var r=n(233),o=n(2);t.exports=function(t,e,n){var i=e(t);return o(t)?i:r(i,n(t))}},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}},function(t,e,n){var r=n(78),o=n(235),i=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,a=u?function(t){return null==t?[]:(t=Object(t),r(u(t),(function(e){return i.call(t,e)})))}:o;t.exports=a},function(t,e){t.exports=function(){return[]}},function(t,e,n){var r=n(237),o=n(43),i=n(2),u=n(44),a=n(28),s=n(45),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=i(t),f=!n&&o(t),l=!n&&!f&&u(t),p=!n&&!f&&!l&&s(t),h=n||f||l||p,d=h?r(t.length,String):[],v=d.length;for(var y in t)!e&&!c.call(t,y)||h&&("length"==y||l&&("offset"==y||"parent"==y)||p&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||a(y,v))||d.push(y);return d}},function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},function(t,e,n){var r=n(11),o=n(8);t.exports=function(t){return o(t)&&"[object Arguments]"==r(t)}},function(t,e){t.exports=function(){return!1}},function(t,e,n){var r=n(11),o=n(46),i=n(8),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,t.exports=function(t){return i(t)&&o(t.length)&&!!u[r(t)]}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var r=n(74),o=e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,u=i&&i.exports===o&&r.process,a=function(){try{var t=i&&i.require&&i.require("util").types;return t||u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=a}).call(this,n(79)(t))},function(t,e,n){var r=n(244)(Object.keys,Object);t.exports=r},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var r=n(7)(n(4),"DataView");t.exports=r},function(t,e,n){var r=n(7)(n(4),"Promise");t.exports=r},function(t,e,n){var r=n(7)(n(4),"Set");t.exports=r},function(t,e,n){var r=n(84),o=n(42);t.exports=function(t){for(var e=o(t),n=e.length;n--;){var i=e[n],u=t[i];e[n]=[i,u,r(u)]}return e}},function(t,e,n){var r=n(76),o=n(250),i=n(255),u=n(47),a=n(84),s=n(85),c=n(30);t.exports=function(t,e){return u(t)&&a(e)?s(c(t),e):function(n){var u=o(n,t);return void 0===u&&u===e?i(n,t):r(e,u,3)}}},function(t,e,n){var r=n(86);t.exports=function(t,e,n){var o=null==t?void 0:r(t,e);return void 0===o?n:o}},function(t,e,n){var r=n(252),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,u=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=u},function(t,e,n){var r=n(253);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var r=n(41);function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(o.Cache||r),n}o.Cache=r,t.exports=o},function(t,e,n){var r=n(25),o=n(70),i=n(2),u=n(29),a=r?r.prototype:void 0,s=a?a.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(i(e))return o(e,t)+"";if(u(e))return s?s.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e,n){var r=n(256),o=n(257);t.exports=function(t,e){return null!=t&&o(t,e,r)}},function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},function(t,e,n){var r=n(87),o=n(43),i=n(2),u=n(28),a=n(46),s=n(30);t.exports=function(t,e,n){for(var c=-1,f=(e=r(e,t)).length,l=!1;++c<f;){var p=s(e[c]);if(!(l=null!=t&&n(t,p)))break;t=t[p]}return l||++c!=f?l:!!(f=null==t?0:t.length)&&a(f)&&u(p,f)&&(i(t)||o(t))}},function(t,e,n){var r=n(259),o=n(260),i=n(47),u=n(30);t.exports=function(t){return i(t)?r(u(t)):o(t)}},function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},function(t,e,n){var r=n(86);t.exports=function(t){return function(e){return r(e,t)}}},function(t,e,n){var r=n(89),o=n(16);t.exports=function(t,e){var n=-1,i=o(t)?Array(t.length):[];return r(t,(function(t,r,o){i[++n]=e(t,r,o)})),i}},function(t,e,n){var r=n(263),o=n(42);t.exports=function(t,e){return t&&r(t,e,o)}},function(t,e,n){var r=n(264)();t.exports=r},function(t,e){t.exports=function(t){return function(e,n,r){for(var o=-1,i=Object(e),u=r(e),a=u.length;a--;){var s=u[t?a:++o];if(!1===n(i[s],s,i))break}return e}}},function(t,e,n){var r=n(16);t.exports=function(t,e){return function(n,o){if(null==n)return n;if(!r(n))return t(n,o);for(var i=n.length,u=e?i:-1,a=Object(n);(e?u--:++u<i)&&!1!==o(a[u],u,a););return n}}},function(t,e,n){var r=n(89);t.exports=function(t,e){var n=[];return r(t,(function(t,r,o){e(t,r,o)&&n.push(t)})),n}},function(t,e){t.exports=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i<o;)if(e(t[i],i,t))return i;return-1}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,o=t.length;++r<o;)if(t[r]===e)return r;return-1}},function(t,e,n){var r=n(271),o=n(3),i=n(29),u=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=a.test(t);return n||s.test(t)?c(t.slice(2),n?2:8):u.test(t)?NaN:+t}},function(t,e,n){var r=n(272),o=/^\s+/;t.exports=function(t){return t?t.slice(0,r(t)+1).replace(o,""):t}},function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},function(t,e,n){var r=n(32),o=n(4);t.exports=function(t,e,n){var i=1&e,u=r(t);return function e(){var r=this&&this!==o&&this instanceof e?u:t;return r.apply(i?n:this,arguments)}}},function(t,e,n){var r=n(49),o=n(32),i=n(96),u=n(99),a=n(52),s=n(33),c=n(4);t.exports=function(t,e,n){var f=o(t);return function o(){for(var l=arguments.length,p=Array(l),h=l,d=a(o);h--;)p[h]=arguments[h];var v=l<3&&p[0]!==d&&p[l-1]!==d?[]:s(p,d);if((l-=v.length)<n)return u(t,e,i,o.placeholder,void 0,p,v,void 0,void 0,n-l);var y=this&&this!==c&&this instanceof o?f:t;return r(y,this,p)}}},function(t,e){t.exports=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}},function(t,e,n){var r=n(50),o=n(100),i=n(278),u=n(280);t.exports=function(t){var e=i(t),n=u[e];if("function"!=typeof n||!(e in r.prototype))return!1;if(t===n)return!0;var a=o(n);return!!a&&t===a[0]}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(279),o=Object.prototype.hasOwnProperty;t.exports=function(t){for(var e=t.name+"",n=r[e],i=o.call(r,e)?n.length:0;i--;){var u=n[i],a=u.func;if(null==a||a==t)return u.name}return e}},function(t,e){t.exports={}},function(t,e,n){var r=n(50),o=n(101),i=n(51),u=n(2),a=n(8),s=n(281),c=Object.prototype.hasOwnProperty;function f(t){if(a(t)&&!u(t)&&!(t instanceof r)){if(t instanceof o)return t;if(c.call(t,"__wrapped__"))return s(t)}return new o(t)}f.prototype=i.prototype,f.prototype.constructor=f,t.exports=f},function(t,e,n){var r=n(50),o=n(101),i=n(102);t.exports=function(t){if(t instanceof r)return t.clone();var e=new o(t.__wrapped__,t.__chain__);return e.__actions__=i(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}},function(t,e){var n=/\{\n\/\* \[wrapped with (.+)\] \*/,r=/,? & /;t.exports=function(t){var e=t.match(n);return e?e[1].split(r):[]}},function(t,e){var n=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;t.exports=function(t,e){var r=e.length;if(!r)return t;var o=r-1;return e[o]=(r>1?"& ":"")+e[o],e=e.join(r>2?", ":" "),t.replace(n,"{\n/* [wrapped with "+e+"] */\n")}},function(t,e,n){var r=n(285),o=n(286),i=n(31),u=o?function(t,e){return o(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:i;t.exports=u},function(t,e){t.exports=function(t){return function(){return t}}},function(t,e,n){var r=n(7),o=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=o},function(t,e,n){var r=n(288),o=n(289),i=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];t.exports=function(t,e){return r(i,(function(n){var r="_."+n[0];e&n[1]&&!o(t,r)&&t.push(r)})),t.sort()}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},function(t,e,n){var r=n(90);t.exports=function(t,e){return!!(null==t?0:t.length)&&r(t,e,0)>-1}},function(t,e,n){var r=n(102),o=n(28),i=Math.min;t.exports=function(t,e){for(var n=t.length,u=i(e.length,n),a=r(t);u--;){var s=e[u];t[u]=o(s,n)?a[s]:void 0}return t}},function(t,e,n){var r=n(49),o=n(32),i=n(4);t.exports=function(t,e,n,u){var a=1&e,s=o(t);return function e(){for(var o=-1,c=arguments.length,f=-1,l=u.length,p=Array(l+c),h=this&&this!==i&&this instanceof e?s:t;++f<l;)p[f]=u[f];for(;c--;)p[f++]=arguments[++o];return r(h,a?n:this,p)}}},function(t,e,n){var r=n(97),o=n(98),i=n(33),u=Math.min;t.exports=function(t,e){var n=t[1],a=e[1],s=n|a,c=s<131,f=128==a&&8==n||128==a&&256==n&&t[7].length<=e[8]||384==a&&e[7].length<=e[8]&&8==n;if(!c&&!f)return t;1&a&&(t[2]=e[2],s|=1&n?0:4);var l=e[3];if(l){var p=t[3];t[3]=p?r(p,l,e[4]):l,t[4]=p?i(t[3],"__lodash_placeholder__"):e[4]}return(l=e[5])&&(p=t[5],t[5]=p?o(p,l,e[6]):l,t[6]=p?i(t[5],"__lodash_placeholder__"):e[6]),(l=e[7])&&(t[7]=l),128&a&&(t[8]=null==t[8]?e[8]:u(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=s,t}},function(t,e,n){var r=n(31),o=n(294),i=n(106);t.exports=function(t,e){return i(o(t,e,r),t+"")}},function(t,e,n){var r=n(49),o=Math.max;t.exports=function(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,u=-1,a=o(i.length-e,0),s=Array(a);++u<a;)s[u]=i[e+u];u=-1;for(var c=Array(e+1);++u<e;)c[u]=i[u];return c[e]=n(s),r(t,this,c)}}},function(t,e,n){var r=n(296),o=n(107),i=n(298),u=n(88);t.exports=function(t){return function(e){e=u(e);var n=o(e)?i(e):void 0,a=n?n[0]:e.charAt(0),s=n?r(n,1).join(""):e.slice(1);return a[t]()+s}}},function(t,e,n){var r=n(297);t.exports=function(t,e,n){var o=t.length;return n=void 0===n?o:n,!e&&n>=o?t:r(t,e,n)}},function(t,e){t.exports=function(t,e,n){var r=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(o);++r<o;)i[r]=t[r+e];return i}},function(t,e,n){var r=n(299),o=n(107),i=n(300);t.exports=function(t){return o(t)?i(t):r(t)}},function(t,e){t.exports=function(t){return t.split("")}},function(t,e){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",i="[^\\ud800-\\udfff]",u="(?:\\ud83c[\\udde6-\\uddff]){2}",a="[\\ud800-\\udbff][\\udc00-\\udfff]",s="(?:"+r+"|"+o+")"+"?",c="[\\ufe0e\\ufe0f]?"+s+("(?:\\u200d(?:"+[i,u,a].join("|")+")[\\ufe0e\\ufe0f]?"+s+")*"),f="(?:"+[i+r+"?",r,u,a,n].join("|")+")",l=RegExp(o+"(?="+o+")|"+f+c,"g");t.exports=function(t){return t.match(l)||[]}},function(t,e,n){var r=n(34);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return!1;var n=r[e];if(!n)return!1;const o=t.replace(/[\s-]/g,"");return n.filter((function(t){return!t.regex.test(o)})).map((function(t){return t.description})).length<n.length}},function(t,e,n){var r=n(34);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return{valid:!1,reasons:["License and State must be Strings"]};var n=r[e];if(!n)return{valid:!1,reasons:["Not a valid US State"]};const o=t.replace(/[\s-]/g,"");var i=n.filter((function(t){return!t.regex.test(o)})).map((function(t){return t.description}));return{valid:i.length<n.length,reasons:i}}},function(t,e,n){var r=n(34);t.exports=Object.keys(r)},function(t,e,n){var r=n(305),o=n(306),i=n(92);t.exports=function(t){return function(e,n,u){return u&&"number"!=typeof u&&o(e,n,u)&&(n=u=void 0),e=i(e),void 0===n?(n=e,e=0):n=i(n),u=void 0===u?e<n?1:-1:i(u),r(e,n,u,t)}}},function(t,e){var n=Math.ceil,r=Math.max;t.exports=function(t,e,o,i){for(var u=-1,a=r(n((e-t)/(o||1)),0),s=Array(a);a--;)s[i?a:++u]=t,t+=o;return s}},function(t,e,n){var r=n(39),o=n(16),i=n(28),u=n(3);t.exports=function(t,e,n){if(!u(n))return!1;var a=typeof e;return!!("number"==a?o(n)&&i(e,n.length):"string"==a&&e in n)&&r(n[e],t)}},function(t,e,n){"use strict";n.r(e),n.d(e,"BaseAPI",(function(){return f})),n.d(e,"colors",(function(){return r})),n.d(e,"formatDate",(function(){return F})),n.d(e,"formatEmail",(function(){return q})),n.d(e,"formatName",(function(){return W})),n.d(e,"formatPhone",(function(){return K})),n.d(e,"formatSSN",(function(){return G})),n.d(e,"formatZipcode",(function(){return Y})),n.d(e,"getRejectMessage",(function(){return X})),n.d(e,"getStatus",(function(){return J})),n.d(e,"isDate",(function(){return Q})),n.d(e,"isObject",(function(){return tt})),n.d(e,"isUrl",(function(){return et})),n.d(e,"maskName",(function(){return ot})),n.d(e,"objectToQuery",(function(){return it})),n.d(e,"prettifyDate",(function(){return vt})),n.d(e,"toRelativeDate",(function(){return ae})),n.d(e,"toRelativeFromISO",(function(){return ue})),n.d(e,"toBoolean",(function(){return Qt})),n.d(e,"Setter",(function(){return Yt})),n.d(e,"renderDetailValue",(function(){return Tt})),n.d(e,"validators",(function(){return i})),n.d(e,"legalReplace",(function(){return rt})),n.d(e,"parsePythonDate",(function(){return Z})),n.d(e,"parseQuery",(function(){return pt})),n.d(e,"pickColor",(function(){return ht})),n.d(e,"pickScoreColor",(function(){return dt})),n.d(e,"selectMasterKey",(function(){return Lt})),n.d(e,"storageMock",(function(){return Xt})),n.d(e,"toSentenceCase",(function(){return fe})),n.d(e,"toTitleCase",(function(){return le})),n.d(e,"translateStatus",(function(){return De})),n.d(e,"availableStatuses",(function(){return o})),n.d(e,"validateDriversLicense",(function(){return Pe})),n.d(e,"currentStates",(function(){return Ie})),n.d(e,"validate_ssn",(function(){return Ze})),n.d(e,"invalidFirstThree",(function(){return ze})),n.d(e,"valueExists",(function(){return jt}));var r={};n.r(r),n.d(r,"primary",(function(){return l})),n.d(r,"secondary",(function(){return p})),n.d(r,"emerald",(function(){return h})),n.d(r,"tartOrange",(function(){return d})),n.d(r,"yellowOrange",(function(){return v})),n.d(r,"slateGray",(function(){return y})),n.d(r,"cadetBlue",(function(){return g})),n.d(r,"periwinkle",(function(){return b})),n.d(r,"aliceBlue",(function(){return m})),n.d(r,"smokeWhite",(function(){return x})),n.d(r,"alert0",(function(){return w})),n.d(r,"alert1",(function(){return _})),n.d(r,"alert2",(function(){return O})),n.d(r,"alert3",(function(){return A})),n.d(r,"ceruleanBlue",(function(){return N})),n.d(r,"peach",(function(){return S})),n.d(r,"babyPink",(function(){return j})),n.d(r,"spanishPink",(function(){return E})),n.d(r,"beauBlue",(function(){return R})),n.d(r,"cultured",(function(){return T})),n.d(r,"blueBell",(function(){return L})),n.d(r,"babyBlueEyes",(function(){return $})),n.d(r,"powderBlue",(function(){return C})),n.d(r,"honeyDew",(function(){return M})),n.d(r,"buff",(function(){return D})),n.d(r,"black",(function(){return k})),n.d(r,"white",(function(){return I})),n.d(r,"noticeMuted",(function(){return P})),n.d(r,"noticeError",(function(){return U})),n.d(r,"noticeWarning",(function(){return V})),n.d(r,"noticeSuccess",(function(){return B})),n.d(r,"noticeInfo",(function(){return z}));var o={};n.r(o),n.d(o,"INITIATED",(function(){return pe})),n.d(o,"PENDING",(function(){return he})),n.d(o,"WITHDRAWN",(function(){return de})),n.d(o,"APPROVED",(function(){return ve})),n.d(o,"REJECTED",(function(){return ye})),n.d(o,"CONSENT",(function(){return ge})),n.d(o,"EMAILED",(function(){return be})),n.d(o,"REVIEW",(function(){return me})),n.d(o,"REVIEWING",(function(){return xe})),n.d(o,"CONSIDER",(function(){return we})),n.d(o,"PROCESSING",(function(){return _e})),n.d(o,"PENDING_DISPUTE",(function(){return Oe})),n.d(o,"PENDING_FIRST_NOTICE",(function(){return Ae})),n.d(o,"PENDING_SECOND_NOTICE",(function(){return Ne})),n.d(o,"FIRST_NOTICE",(function(){return Se})),n.d(o,"SECOND_NOTICE",(function(){return je})),n.d(o,"SSN_TRACE_FAILED",(function(){return Ee})),n.d(o,"MVR_FAILED",(function(){return Re})),n.d(o,"COMPLIANCE",(function(){return Te})),n.d(o,"COMPLIANCE_SO",(function(){return Le})),n.d(o,"VERIFYING",(function(){return $e})),n.d(o,"COMPLIANCEREVIEW",(function(){return Ce})),n.d(o,"STORED",(function(){return Me})),n.d(o,"default",(function(){return De}));var i={};n.r(i),n.d(i,"validateEmail",(function(){return He})),n.d(i,"validatePhone",(function(){return Ke})),n.d(i,"isAlphaNumeric",(function(){return Ge})),n.d(i,"isValidCanadianZipcode",(function(){return Ye})),n.d(i,"validateSSN",(function(){return Xe})),n.d(i,"validateCheck",(function(){return Je})),n.d(i,"containsAtSymbol",(function(){return Qe})),n.d(i,"containsNumber",(function(){return tn})),n.d(i,"validateName",(function(){return en})),n.d(i,"validateAddress",(function(){return nn})),n.d(i,"validateCustomInput",(function(){return rn})),n.d(i,"validateZipcode",(function(){return on})),n.d(i,"validateCanadianZipcode",(function(){return un})),n.d(i,"isArray",(function(){return an})),n.d(i,"validateMVRCheck",(function(){return sn})),n.d(i,"validatePhoneVerification",(function(){return cn})),n.d(i,"disable_check",(function(){return fn})),n.d(i,"validateEmailId",(function(){return ln})),n.d(i,"validateTurnId",(function(){return pn}));var u=n(108),a=n(53);function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var f=function(){function t(e,n){var r=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,"approveWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/approve"),e)})),c(this,"withdrawWorker",(function(t,e){return r.api.post("/partners/me/workers/".concat(t,"/withdraw"),e)})),c(this,"rejectWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/reject"),e)})),c(this,"getMember",(function(){return r.api.get("/partners/me")})),c(this,"getSettings",(function(){return r.api.get("/partners/settings")})),c(this,"getWorkers",(function(t){return r.api.get("/partners/me/workers?query=".concat(JSON.stringify(t)))})),c(this,"getPendingWorkers",(function(t){return r.api.get("/cohort/candidates?query=".concat(JSON.stringify(t)))})),c(this,"getWorker",(function(t){return r.api.get("/partners/me/workers/".concat(t,"?full=false"))})),c(this,"checkWorker",(function(t){return r.api.post("/partners/workers",t)})),c(this,"validatePhone",(function(t){return r.api.get("PhoneNumbers/".concat(t,"?Type=carrier&CountryCode=US"),null,{headers:{Authorization:"Basic ".concat(Object(a.btoa)(TWILIO_KEY))}})})),c(this,"validateEmail",(function(t){return r.api.get("/verify_email?email=".concat(encodeURIComponent(t)))})),c(this,"validateSSN",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/validate"),{ssn:e})})),c(this,"validateCandidateEmail",(function(t,e){return r.api.get("/candidate_verify_email/".concat(t,"?email=").concat(encodeURIComponent(e)))})),c(this,"getCandidateData",(function(t){return r.api.get("/candidate_consent_email/candidate/".concat(t))})),c(this,"getInterests",(function(){return r.api.get("/interests")})),c(this,"getTransports",(function(){return r.api.get("/transports")})),c(this,"getPaymetMethod",(function(){return r.api.get("/payment_settings/partner_methods")})),c(this,"getBackgroundReport",(function(t,e){return r.api.get("/candidate_consent_email/candidate/".concat(t,"/report?token=").concat(e))})),c(this,"provideCandidateConsent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t),e)})),c(this,"provideCandidateConsentAsync",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/async"),e)})),c(this,"getTrialStatus",(function(){return r.api.get("/organizations/trial_status")})),c(this,"newCandidate",(function(){return r.api.get("/organizations/new_candidate")})),c(this,"getTerms",(function(){return r.api.get("/partners/terms")})),c(this,"consent",(function(t){return r.api.post("/partners/me/consent",t)})),c(this,"apply",(function(t){var e=t.partner_name,n=t.partner_id;return r.api.post("/candidate_consent_email/".concat(e,"/").concat(n),{})})),c(this,"assent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/assent"),e)})),c(this,"getCohortCount",(function(t){return r.api.get("/cohort/count?query=".concat(JSON.stringify(t)))})),c(this,"createCohort",(function(t){return r.api.post("/cohort",t)})),c(this,"requestCohortWorkers",(function(t,e){return r.api.post("/cohort/".concat(t,"/request"),e)})),c(this,"getNotes",(function(t){return r.api.get("partners/me/workers/".concat(t,"/notes"))})),c(this,"saveNote",(function(t,e){return r.api.put("partners/me/workers/".concat(t,"/notes"),e)})),c(this,"resendEmail",(function(t){return r.api.post("partners/me/workers/".concat(t,"/email/consent/resend"))})),c(this,"postSettings",(function(t,e){return r.api.post(t,e)})),c(this,"btoaTest",(function(t){return Object(a.btoa)(t)})),e&&(this.api=Object(u.create)({baseURL:e,headers:{Accept:"application/json"}})),n&&(this.twilioKey=n)}var e,n,r;return e=t,(n=[{key:"setToken",value:function(t){return t?(this.api.setHeaders({Authorization:"Bearer ".concat(t)}),this):this}},{key:"setStatusPreference",value:function(t){return t?(this.api.setHeaders({Prefer:"status=".concat(t)}),this):this}}])&&s(e.prototype,n),r&&s(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}(),l="#2D3047",p="#00D9CD",h="#0ed067",d="#fb4d49",v="#faa73c",y="#5f7d95",g="#9bb1c8",b="#bfcddd",m="#e1e8f3",x="#f7f9fc",w=y,_=h,O=d,A=v,N="#4357ad",S="#f9cb9c",j="#f4cccc",E="#e6b8af",R="#cfe2f3",T="#e3e9ed",L="#b4a7d6",$="#9fc5e8",C="#b7ecec",M="#d9ead3",D="#ffe599",k="#000",I="#fff",P=y,U="#ff6c69",V="#faa03c",B="#13c063",z=y,Z=function(t){if(!isNaN(parseInt(t,10))){var e=new Date(1e3*t),n=e.getTime();if(n){var r=new Date(n+60*e.getTimezoneOffset()*1e3),o=e.getTimezoneOffset()/60,i=e.getHours();return r.setHours(i-o),r}}return null},F=function(t){var e=Z(t);return e?"".concat(e.getMonth()+1,"/").concat(e.getDate(),"/").concat(e.getFullYear()):"N/A"},q=function(t){return"string"!=typeof t?"":t.replace(/\s+/g,"")},W=function(t){return"string"!=typeof t?"":t.replace(/\s\s+/g," ")},H=function(t){var e=t.phone,n=t.encrypted,r=t.areaCode,o=n?"(".concat(e[0],") ").concat(e[1]," ").concat(e[2]).concat(e[3]):"(".concat(e[0],") ").concat(e[1],"-").concat(e[2]).concat(e[3]);return o=r?"".concat(r," ").concat(o):o},K=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof t)return"N/A";var n,r=e?t:t.replace(/\D/g,"").substring(0,11);return r.length<10?r:(r.length>10&&(n=r[0],r=r.substring(1,11)),r=r.match(/.{1,3}/g),H({phone:r,encrypted:e,areaCode:n}))},G=function(t){if("string"!=typeof t)return"N/A";var e=t.replace(/\D/g,"").substring(0,9);return e.length<9?e:"".concat(e.substring(0,3),"-").concat(e.substring(3,5),"-").concat(e.substring(5,9))},Y=function(t){return"string"!=typeof t?"":t.replace(/\D/g,"").substring(0,5)},X=function(t){if(!["RISK_MANAGEMENT","FCRA_E","FCRA_N","FCRA"].includes(t))return"Reject";return{RISK_MANAGEMENT:"Reject",FCRA:"Pre-Adverse Action",FCRA_E:"Pre-Adverse Action",FCRA_N:"Adverse Action"}[t]},J=function(t){return{review:"reviewing",pending:"consider",review__identity:"verifying",review__mvr:"Compliance Review",review__so:"Compliance Review",review__qa:"Compliance Review",initiated:"Stored"}[t]||t},Q=function(t){if(isNaN(parseInt(t,10)))return!1;var e=new Date(1e3*t);return!(e>new Date)&&e.getYear()>100},tt=function(t){return!!t&&t.constructor===Object},et=function(t){return/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(t)},nt=["Turn Technologies Inc.","[COMPANY]"],rt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("string"!=typeof t)return"";for(var n=t,r=0;r<nt.length;r++)n=n.replace(nt[r],e);return n},ot=function(t){return"string"==typeof t&&t.length>0?"".concat(t.slice(0,1),"."):t},it=function(t){if(!tt(t))return null;var e=Object.keys(t);if(0===e.length)return null;var n=e.map((function(e){return"".concat(e,"=").concat(t[e])}));return"?".concat(n.join("&"))},ut=n(109),at=n.n(ut),st=n(110),ct=n.n(st),ft=n(6),lt=n.n(ft),pt=function(t){return lt()(t)?ct()(at()(t.slice(1).split("&"),(function(t){var e=t.split("=");return[e[0],decodeURIComponent(e[1])]}))):t},ht=function(t){switch("string"==typeof t?t.toLowerCase():t){case"first_notice":case"second_notice":case"pending":case"consider":return V;case"unverified":case"not_verified":case"fraud":case"not_matched":case"rejected":case"deceased":case"withdrawn":return U;case"verified":case"matched":case"valid":case"ready":case"complete":case"clear":case"fulfilled":case"randomized":case"approved":return B;case"processing":case"reviewing":case"review":case"consent":case"emailed":case"initiated":case"attention":case"verifying":case"review__mvr":case"review__qa":return z;case"none":default:return"gray"}},dt=function(t){var e=parseInt(t,10);return e>89?B:e>69?V:U},vt=function(t){var e=new Date(t),n=e.toUTCString().slice(8,11),r=e.toUTCString().slice(5,7),o=e.toUTCString().slice(12,16);return"".concat(n," ").concat(r,", ").concat(o)},yt=n(111),gt=n.n(yt),bt=n(3),mt=n.n(bt),xt=n(2),wt=n.n(xt),_t=n(112),Ot=n.n(_t),At=n(113),Nt=n.n(At),St=["None","none","N/A"],jt=function(t){return!!t&&(wt()(t)||mt()(t)?!Nt()(t):!(Ot()(St,t)>-1))},Et=function t(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return wt()(e)?n?e.map((function(e){return mt()(e)?Rt(e,n):t(e,n)})):e.join(" / "):mt()(e)?Rt(e,n):e},Rt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=gt()(t,(function(t){return jt(t)}));return n.map((function(t){return Et(t,e)})).join(" / ")},Tt=Et,Lt=function(t,e){if(!Array.isArray(t)||0===t.length)return"";var n,r=t[0];jt(r[e])?n=e:n=Object.keys(r).find((function(t){return jt(r[t])}));return n},$t=n(12),Ct=n.n($t),Mt=n(54),Dt=n.n(Mt);function kt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function It(t,e,n){return e&&kt(t.prototype,e),n&&kt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Pt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ut(t){return(Ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Vt=function(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r;Ut(o)===t&&(e[n]=o)},Bt=function(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r,i=Array.isArray(n)?n:t[n];i.includes(o)&&(t[e]=o)},zt=Ct()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Dt()(Vt,t,e,n,r)})),Zt=Ct()((function(t,e){return function(){"boolean"==typeof t[e]&&(t[e]=!t[e])}})),Ft=zt("string"),qt=zt("number"),Wt=zt("boolean"),Ht=Ct()((function(t,e,n){n&&(t[e]=n)})),Kt=Ct()((function(t,e,n){n&&(t[e]=!n)})),Gt=Ct()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Dt()(Bt,t,e,n,r)})),Yt=It((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Pt(this,"setStringFactory",Ft(this)),Pt(this,"setNumberFactory",qt(this)),Pt(this,"setBoolFactory",Wt(this)),Pt(this,"setTruthyFactory",Ht(this)),Pt(this,"setFalsyFactory",Kt(this)),Pt(this,"setOptionFactory",Gt(this)),Pt(this,"toggleBoolFactory",Zt(this))}));var Xt=function(){var t={};return{setItem:function(e,n){t[e]=n||""},getItem:function(e){return e in t?t[e]:null},removeItem:function(e){delete t[e]},get length(){return Object.keys(t).length},key:function(e){return Object.keys(t)[e]||null}}};function Jt(t){return(Jt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Qt=function(t){switch(Jt(t)){case"boolean":return t;case"string":return"true"===t.toLowerCase();case"number":return t>0;case"undefined":return!1;case"object":return!!t&&(Array.isArray(t)?t.length>0:!(0===Object.getOwnPropertyNames(t).length));default:return!1}},te=n(9),ee=n.n(te),ne=n(114),re=n.n(ne),oe=n(115),ie=n.n(oe);ee.a.extend(re.a),ee.a.extend(ie.a);var ue=function(t){if("string"!=typeof t)return"N/A";var e=ee()(t);if(!e.isValid())return"N/A";var n=ee()().utcOffset(e.utcOffset());return n.diff(e,"day")<8?e.from(n):e.format("M/DD/YYYY")},ae=function(t){if("number"!=typeof t)return"N/A";var e=Z(t);if(!e)return"N/A";var n=ee()(e),r=ee()().utcOffset(e.getTimezoneOffset()).subtract(e.getTimezoneOffset()/60,"hour");return r.diff(n,"day")<8?n.from(r):n.format("M/DD/YYYY")},se=n(116),ce=n.n(se),fe=function(t){var e=t.toLowerCase();return[". ","! ","? "].forEach((function(t){e=e.split(t).map(ce.a).join(t)})),e},le=function(t){return("string"==typeof t?t:String(t)).toLowerCase().split(" ").map((function(t){var e=t.charAt(0).toUpperCase(),n=t.slice(1);return"".concat(e).concat(n)})).join(" ")},pe="initiated",he="pending",de="withdrawn",ve="approved",ye="rejected",ge="consent",be="emailed",me="review",xe="reviewing",we="consider",_e="processing",Oe="pending__dispute",Ae="pending__first_notice",Ne="pending__second_notice",Se="first_notice",je="second_notice",Ee="review__identity",Re="review__mvr",Te="review__qa",Le="review__so",$e="verifying",Ce="Compliance Review",Me="Stored",De=function(t,e){switch(t){case ve:return ve;case he:case Oe:return he;case ye:return ye;case Ae:return e?Se:ye;case Ne:return e?je:ye;case ge:return ge;case _e:return _e;case be:return be;case me:return me;case xe:return xe;case de:return de;case pe:return Me;case Ee:return $e;case Re:case Te:case Le:return Ce;default:return he}},ke=n(55),Ie=Object.keys(ke.driversLicenseRegex),Pe=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"!=typeof t||"string"!=typeof e?{valid:!1,reasons:"License and State must be Strings"}:Ie.includes(e)?Object(ke.validateUSDriversLicense)(t,e):{valid:!0,reasons:""}},Ue=n(117),Ve=/^(986|(?!000|666|123456789|(\d)\2{8})[0-8][0-9]{2})(?!00)[0-9]{2}(?!0000)[0-9]{4}$/,Be=/^078051120|219099999$/,ze=n.n(Ue)()(900,1e3).map((function(t){return"".concat(t)})).concat(["000","666"]),Ze=function(t){if("string"!=typeof t)return!1;var e=t.replace(/\D/g,"");return!Be.test(e)&&Ve.test(e)},Fe=n(56);function qe(t){return function(t){if(Array.isArray(t))return We(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return We(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return We(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function We(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var He=function(t){if(!t)return!1;return/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(t)},Ke=function(t){if(!t)return!1;return/^1?\s?\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/.test(t)},Ge=function(t){return null!==t.match(/^([a-z0-9])+/i)},Ye=function(t){return null!==t.match(/^[A-Za-z]\d[A-Za-z]$/)||null!==t.match(/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d/)},Xe=function(t){return"string"==typeof t&&9===t.replace(/\D/g,"").length},Je=function(t){var e="clear"===t?[]:t;return Array.isArray(e)||Object(Fe.a)(e)?qe(e):null},Qe=function(t){return/@/.test(t)},tn=function(t){return/\d/.test(t)},en=function(t){return 0!==t.trim().length&&!Qe(t)&&!tn(t)},nn=function(t){return 0!==t.trim().length&&!Qe(t)},rn=function(t){return!!lt()(t)&&0!==t.trim().length},on=function(t){return lt()(t)&&t.length>=5},un=function(t){return lt()(t)&&Ge(t)&&Ye(t)},an=function(t){return Array.isArray(t)||Object(Fe.a)(t)},sn=function(t){return mt()(t)||"string"==typeof t?t:{}},cn=function(t){switch(t){case"verified":case"True":return"verified";case"unverified":case"False":return"unverified";default:return""}},fn=function(t){return"string"==typeof t&&"true"===t.toLowerCase()},ln=function(t){return lt()(t)&&32===t.length},pn=function(t){return lt()(t)&&/^C{1}[0-9]{10}$/.test(t)}}])}));
|
|
23
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90dXJuLXNoYXJlZC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeTIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeTEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvZGF5anMvZGF5anMubWluLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fYXJpdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2hhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2N1cnJ5My5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY3VycnlOLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNQbGFjZWhvbGRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3JlZHVjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL21hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvS2V5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN0b3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yZXBsYWNlSG9sZGVycy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvbGljZW5zZS1yZWdleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMva2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcmVkdWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fY2hlY2tGb3JNZXRob2QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xhenlXcmFwcGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUxvZGFzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEhvbGRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9CYXNlNjQvYmFzZTY0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9wYXJ0aWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9tb2J4L2xpYi9tb2J4Lm1vZHVsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZXF1YWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jb25jYXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcHJvcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYWx3YXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbWF4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvSW50ZWdlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVXcmFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXRhTWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlSHlicmlkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29tcG9zZUFyZ3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUmVjdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Mb2Rhc2hXcmFwcGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0RGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0V3JhcFRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNVbmljb2RlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2FwaXNhdWNlL2Rpc3QvYXBpc2F1Y2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL21hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZnJvbVBhaXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3JlbGF0aXZlVGltZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vdXRjLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC91cHBlckZpcnN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9yYW5nZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL19fLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2NvbnRhaW5zLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2VxdWFscy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2FycmF5RnJvbUl0ZXJhdG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fZnVuY3Rpb25OYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pZGVudGljYWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3R5cGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jcmVhdGVQYXJ0aWFsQXBwbGljYXRvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcGlwZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3BpcGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL194d3JhcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYmluZC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3RhaWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3NsaWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9mb3JFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9kaXNzb2MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL21lcmdlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fYXNzaWduLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fb2JqZWN0QXNzaWduLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pZkVsc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeU4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3Byb3BTYXRpc2ZpZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3Byb3BJcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9jb21wbGVtZW50LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9saWZ0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9saWZ0Ti5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19kaXNwYXRjaGFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pc1RyYW5zZm9ybWVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fbWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9feG1hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3hmQmFzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbm90LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pc0VtcHR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9lbXB0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2lzT2JqZWN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9hbnlQYXNzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9wbHVjay5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZ3RlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9jdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvVC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaXNOaWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2NvbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idG9hLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0NsZWFyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbERlZXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlQWRkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbE9iamVjdHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hdGNoRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2dldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbHRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGaW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpY3RJbmRleE9mLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUcmltLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdHJpbW1lZEVuZEluZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmluZC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN1cnJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY291bnRIb2xkZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbm9vcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEZ1bmNOYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVhbE5hbWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC93cmFwcGVyTG9kYXNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fd3JhcHBlckNsb25lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0V3JhcERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbnNlcnRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VwZGF0ZVdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jlb3JkZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVQYXJ0aWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVyZ2VEYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJlc3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUNhc2VGaXJzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RTbGljZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTbGljZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc2NpaVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL191bmljb2RlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvaXMtdmFsaWQtdXMtbGljZW5zZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvdmFsaWRhdGUtZHJpdmVycy1saWNlbnNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9zdXBwb3J0ZWQtc3RhdGVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy9zZXJ2aWNlcy9hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvc3R5bGVzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9wYXJzZS1weXRob24tZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtZW1haWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LW5hbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LXBob25lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1zc24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LXppcGNvZGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZ2V0LXJlamVjdC1tZXNzYWdlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2dldC1zdGF0dXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvaXMtZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvaXMtdXJsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2xlZ2FsLXJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvbWFzay1uYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL29iamVjdC10by1xdWVyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9wYXJzZVF1ZXJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3BpY2stY29sb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcGljay1zY29yZS1jb2xvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9wcmV0dGlmeS1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ZhbHVlLWV4aXN0cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9yZW5kZXItZGV0YWlsLXZhbHVlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3NlbGVjdC1tYXN0ZXIta2V5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3NldHRlcnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvc3RvcmFnZS1tb2NrLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RvLWJvb2xlYW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdG8tcmVsYXRpdmUtZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90by1zZW50ZW5jZS1jYXNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RvLXRpdGxlLWNhc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdHJhbnNsYXRlLXN0YXR1cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy92YWxpZGF0ZS1kcml2ZXJzLWxpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdmFsaWRhdGUtc3NuLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ZhbGlkYXRvcnMuanMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsInRoaXMiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiX2N1cnJ5MSIsIl9pc1BsYWNlaG9sZGVyIiwiZm4iLCJmMiIsImEiLCJiIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiX2IiLCJfYSIsImYxIiwiYXBwbHkiLCJpc0FycmF5IiwiQXJyYXkiLCJ0eXBlIiwiZnJlZUdsb2JhbCIsImZyZWVTZWxmIiwiRnVuY3Rpb24iLCJpc0J1ZmZlciIsInRvU3RyaW5nIiwidmFsIiwiaXNPYmplY3QiLCJpc0Z1bmN0aW9uIiwiZm9yRWFjaCIsIm9iaiIsImlzQXJyYXlCdWZmZXIiLCJpc0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzVW5kZWZpbmVkIiwiaXNEYXRlIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNTdHJlYW0iLCJwaXBlIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsIm5hdmlnYXRvciIsInByb2R1Y3QiLCJ3aW5kb3ciLCJkb2N1bWVudCIsIm1lcmdlIiwicmVzdWx0IiwiYXNzaWduVmFsdWUiLCJleHRlbmQiLCJ0aGlzQXJnIiwidHJpbSIsInN0ciIsInJlcGxhY2UiLCJiYXNlR2V0VGFnIiwiaXNPYmplY3RMaWtlIiwiYmFzZUlzTmF0aXZlIiwiZ2V0VmFsdWUiLCJ1bmRlZmluZWQiLCJlIiwidSIsImYiLCJoIiwiJCIsInkiLCJNIiwid2Vla2RheXMiLCJzcGxpdCIsIm1vbnRocyIsIm9yZGluYWwiLCJTdHJpbmciLCJqb2luIiwidiIsInoiLCJ1dGNPZmZzZXQiLCJNYXRoIiwiYWJzIiwiZmxvb3IiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiY2xvbmUiLCJhZGQiLCJjZWlsIiwidyIsIkQiLCJtcyIsIlEiLCJ0b0xvd2VyQ2FzZSIsImciLCJTIiwiXyIsIk8iLCJhcmdzIiwibG9jYWxlIiwiJEwiLCJ1dGMiLCIkdSIsIngiLCIkeCIsIiRvZmZzZXQiLCJwYXJzZSIsIiRkIiwiRGF0ZSIsIk5hTiIsInRlc3QiLCJtYXRjaCIsInN1YnN0cmluZyIsIlVUQyIsImluaXQiLCIkeSIsImdldEZ1bGxZZWFyIiwiJE0iLCJnZXRNb250aCIsIiREIiwiZ2V0RGF0ZSIsIiRXIiwiZ2V0RGF5IiwiJEgiLCJnZXRIb3VycyIsIiRtIiwiZ2V0TWludXRlcyIsIiRzIiwiZ2V0U2Vjb25kcyIsIiRtcyIsImdldE1pbGxpc2Vjb25kcyIsIiR1dGlscyIsImlzVmFsaWQiLCJpc1NhbWUiLCJzdGFydE9mIiwiZW5kT2YiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCIkZyIsInNldCIsInVuaXgiLCJ2YWx1ZU9mIiwiZ2V0VGltZSIsInRvRGF0ZSIsInNsaWNlIiwiJGxvY2FsZSIsIndlZWtTdGFydCIsIiRzZXQiLCJtaW4iLCJkYXlzSW5Nb250aCIsIk51bWJlciIsInJvdW5kIiwic3VidHJhY3QiLCJmb3JtYXQiLCJpbnZhbGlkRGF0ZSIsIm1lcmlkaWVtIiwibW9udGhzU2hvcnQiLCJ3ZWVrZGF5c01pbiIsIndlZWtkYXlzU2hvcnQiLCJnZXRUaW1lem9uZU9mZnNldCIsImRpZmYiLCJ0b0pTT04iLCJ0b0lTT1N0cmluZyIsInRvVVRDU3RyaW5nIiwiayIsIiRpIiwiaXNEYXlqcyIsImVuIiwiTHMiLCJhMCIsImExIiwiYTIiLCJhMyIsImE0IiwiYTUiLCJhNiIsImE3IiwiYTgiLCJhOSIsIkVycm9yIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImNyZWF0ZVdyYXAiLCJjdXJyeSIsImZ1bmMiLCJhcml0eSIsImd1YXJkIiwicGxhY2Vob2xkZXIiLCJwcm9wIiwiX2N1cnJ5MiIsImYzIiwiX2MiLCJfYXJpdHkiLCJfY3VycnlOIiwiaXNMZW5ndGgiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwicHJvY2VzcyIsImRlZmF1bHRTZXRUaW1vdXQiLCJkZWZhdWx0Q2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImRyYWluaW5nIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImNvbmNhdCIsImRyYWluUXVldWUiLCJ0aW1lb3V0IiwibGVuIiwicnVuIiwibWFya2VyIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsImFycmF5Iiwibm9vcCIsIm5leHRUaWNrIiwicHVzaCIsInRpdGxlIiwiYnJvd3NlciIsImVudiIsImFyZ3YiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJvbiIsImFkZExpc3RlbmVyIiwib25jZSIsIm9mZiIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJkaXIiLCJ1bWFzayIsIl94d3JhcCIsImlzQXJyYXlMaWtlIiwiX2l0ZXJhYmxlUmVkdWNlIiwieGYiLCJhY2MiLCJpdGVyIiwic3RlcCIsIm5leHQiLCJkb25lIiwic3ltSXRlcmF0b3IiLCJpdGVyYXRvciIsImxpc3QiLCJpZHgiLCJfYXJyYXlSZWR1Y2UiLCJyZWR1Y2UiLCJfbWV0aG9kUmVkdWNlIiwiVHlwZUVycm9yIiwiX2Rpc3BhdGNoYWJsZSIsIl9tYXAiLCJfcmVkdWNlIiwiX3htYXAiLCJjdXJyeU4iLCJrZXlzIiwiZnVuY3RvciIsImxpc3RDYWNoZUNsZWFyIiwibGlzdENhY2hlRGVsZXRlIiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwiTGlzdENhY2hlIiwiZW50cmllcyIsImluZGV4IiwiY2xlYXIiLCJlbnRyeSIsImhhcyIsImVxIiwibmF0aXZlQ3JlYXRlIiwiZ2V0TmF0aXZlIiwiaXNLZXlhYmxlIiwibWFwIiwiZGF0YSIsIl9fZGF0YV9fIiwicmVJc1VpbnQiLCJpc1N5bWJvbCIsImJhc2VDcmVhdGUiLCJDdG9yIiwidGhpc0JpbmRpbmciLCJyZXNJbmRleCIsIkFMIiwicmVnZXgiLCJkZXNjcmlwdGlvbiIsIkFLIiwiQVoiLCJBUiIsIkNBIiwiQ08iLCJDVCIsIkRFIiwiREMiLCJGTCIsIkdBIiwiR1UiLCJISSIsIklEIiwiSUwiLCJJTiIsIklBIiwiS1MiLCJLWSIsIkxBIiwiTUUiLCJNRCIsIk1BIiwiTUkiLCJNTiIsIk1TIiwiTU8iLCJNVCIsIk5FIiwiTlYiLCJOSCIsIk5KIiwiTk0iLCJOWSIsIk5DIiwiTkQiLCJPSCIsIk9LIiwiT1IiLCJQQSIsIlJJIiwiU0MiLCJTRCIsIlROIiwiVFgiLCJVVCIsIlZUIiwiVkEiLCJWSSIsIldBIiwiV1YiLCJXSSIsIldZIiwiUFIiLCJoYXNFbnVtQnVnIiwibm9uRW51bWVyYWJsZVByb3BzIiwiaGFzQXJnc0VudW1CdWciLCJjb250YWlucyIsIl9oYXMiLCJfaXNBcmd1bWVudHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIml0ZW0iLCJuSWR4Iiwia3MiLCJjaGVja0FyZ3NMZW5ndGgiLCJfY3VycnkzIiwiX2lzQXJyYXkiLCJtZXRob2RuYW1lIiwidXRpbHMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJoZWFkZXJzIiwiYWRhcHRlciIsImRlZmF1bHRzIiwiWE1MSHR0cFJlcXVlc3QiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInRyYW5zZm9ybVJlc3BvbnNlIiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsInN0YXR1cyIsImNvbW1vbiIsIm1ldGhvZCIsIm90aGVyIiwiTWFwIiwibWFwQ2FjaGVDbGVhciIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJhcnJheUxpa2VLZXlzIiwiYmFzZUtleXMiLCJiYXNlSXNBcmd1bWVudHMiLCJvYmplY3RQcm90byIsImlzQXJndW1lbnRzIiwic3R1YkZhbHNlIiwiZnJlZUV4cG9ydHMiLCJub2RlVHlwZSIsImZyZWVNb2R1bGUiLCJCdWZmZXIiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwicmVJc0RlZXBQcm9wIiwicmVJc1BsYWluUHJvcCIsIm9iamVjdENyZWF0ZSIsInByb3RvIiwiYmFzZUxvZGFzaCIsIkxhenlXcmFwcGVyIiwiX193cmFwcGVkX18iLCJfX2FjdGlvbnNfXyIsIl9fZGlyX18iLCJfX2ZpbHRlcmVkX18iLCJfX2l0ZXJhdGVlc19fIiwiX190YWtlQ291bnRfXyIsIl9fdmlld3NfXyIsImNvbnN0cnVjdG9yIiwiYmFzZTY0IiwiZ2xvYmFsIiwiYnRvYSIsImF0b2IiLCJjaGFycyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIm1lc3NhZ2UiLCJpbnB1dCIsImJsb2NrIiwiY2hhckNvZGUiLCJvdXRwdXQiLCJjaGFyQXQiLCJjaGFyQ29kZUF0IiwiYnMiLCJiYyIsImZyb21DaGFyQ29kZSIsImluZGV4T2YiLCJiYXNlUmVzdCIsImdldEhvbGRlciIsInJlcGxhY2VIb2xkZXJzIiwicGFydGlhbCIsInBhcnRpYWxzIiwiaG9sZGVycyIsImRyaXZlcnNMaWNlbnNlUmVnZXgiLCJpc1ZhbGlkVVNMaWNlbnNlIiwidmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlIiwic3VwcG9ydGVkU3RhdGVzIiwiRU1QVFlfQVJSQVkiLCJmcmVlemUiLCJFTVBUWV9PQkpFQ1QiLCJnZXROZXh0SWQiLCJnbG9iYWxTdGF0ZSIsIm1vYnhHdWlkIiwiZmFpbCIsImludmFyaWFudCIsImNoZWNrIiwiaW52b2tlZCIsImlzUGxhaW5PYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImFkZEhpZGRlblByb3AiLCJwcm9wTmFtZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZSIsImNsYXp6IiwiaXNFUzZNYXAiLCJ0aGluZyIsImlzRVM2U2V0IiwiU2V0IiwiZ2V0UGxhaW5PYmplY3RLZXlzIiwiZW51bWVyYWJsZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJmcm9tIiwic3RyaW5naWZ5S2V5IiwidG9QcmltaXRpdmUiLCJvd25LZXlzIiwiUmVmbGVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCIkbW9ieCIsIkF0b20iLCJpc1BlbmRpbmdVbm9ic2VydmF0aW9uIiwiaXNCZWluZ09ic2VydmVkIiwib2JzZXJ2ZXJzIiwiZGlmZlZhbHVlIiwibGFzdEFjY2Vzc2VkQnkiLCJsb3dlc3RPYnNlcnZlclN0YXRlIiwiSURlcml2YXRpb25TdGF0ZSIsIk5PVF9UUkFDS0lORyIsIm9uQmVjb21lT2JzZXJ2ZWQiLCJvbkJlY29tZU9ic2VydmVkTGlzdGVuZXJzIiwibGlzdGVuZXIiLCJvbkJlY29tZVVub2JzZXJ2ZWQiLCJvbkJlY29tZVVub2JzZXJ2ZWRMaXN0ZW5lcnMiLCJyZXBvcnRPYnNlcnZlZCIsInJlcG9ydENoYW5nZWQiLCJzdGFydEJhdGNoIiwib2JzZXJ2YWJsZSIsIlNUQUxFIiwiZGVwZW5kZW5jaWVzU3RhdGUiLCJVUF9UT19EQVRFIiwiaXNUcmFjaW5nIiwiVHJhY2VNb2RlIiwiTk9ORSIsImxvZ1RyYWNlSW5mbyIsIm9uQmVjb21lU3RhbGUiLCJwcm9wYWdhdGVDaGFuZ2VkIiwiZW5kQmF0Y2giLCJpc0F0b20iLCJjcmVhdGVBdG9tIiwib25CZWNvbWVPYnNlcnZlZEhhbmRsZXIiLCJvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyIiwiYXJnMyIsImF0b20iLCJpbnRlcmNlcHRIb29rIiwiY29tcGFyZXIiLCJpZGVudGl0eSIsInN0cnVjdHVyYWwiLCJkZWVwRXF1YWwiLCJkZWZhdWx0IiwiaXMiLCJzaGFsbG93IiwiZXh0ZW5kU3RhdGljcyIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJfX3ZhbHVlcyIsIl9fcmVhZCIsImFyIiwiZXJyb3IiLCJfX3NwcmVhZCIsIm1vYnhEaWRSdW5MYXp5SW5pdGlhbGl6ZXJzU3ltYm9sIiwibW9ieFBlbmRpbmdEZWNvcmF0b3JzIiwiZW51bWVyYWJsZURlc2NyaXB0b3JDYWNoZSIsIm5vbkVudW1lcmFibGVEZXNjcmlwdG9yQ2FjaGUiLCJjcmVhdGVQcm9wZXJ0eUluaXRpYWxpemVyRGVzY3JpcHRvciIsImNhY2hlIiwiaW5pdGlhbGl6ZUluc3RhbmNlIiwidGFyZ2V0IiwiZV8xIiwiZGVjb3JhdG9ycyIsImtleXNfMSIsImtleXNfMV8xIiwicHJvcGVydHlDcmVhdG9yIiwiZGVzY3JpcHRvciIsImRlY29yYXRvclRhcmdldCIsImRlY29yYXRvckFyZ3VtZW50cyIsImVfMV8xIiwicmV0dXJuIiwiY3JlYXRlUHJvcERlY29yYXRvciIsInByb3BlcnR5SW5pdGlhbGx5RW51bWVyYWJsZSIsImRlY29yYXRvciIsImFwcGx5SW1tZWRpYXRlbHkiLCJpbmhlcml0ZWREZWNvcmF0b3JzIiwicXVhY2tzTGlrZUFEZWNvcmF0b3IiLCJkZWVwRW5oYW5jZXIiLCJpc09ic2VydmFibGUiLCJyZWZlcmVuY2VFbmhhbmNlciIsIm5ld1ZhbHVlIiwiY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIiLCJlbmhhbmNlciIsInByb3BlcnR5TmFtZSIsIl9kZWNvcmF0b3JUYXJnZXQiLCJkZWNvcmF0b3JBcmdzIiwiaW5pdGlhbFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJhc09ic2VydmFibGVPYmplY3QiLCJhZGRPYnNlcnZhYmxlUHJvcCIsInJlcyIsImRlZmF1bHRDcmVhdGVPYnNlcnZhYmxlT3B0aW9ucyIsImRlZXAiLCJkZWZhdWx0RGVjb3JhdG9yIiwicHJveHkiLCJhc0NyZWF0ZU9ic2VydmFibGVPcHRpb25zIiwiZGVlcERlY29yYXRvciIsInNoYWxsb3dEZWNvcmF0b3IiLCJpc09ic2VydmFibGVPYmplY3QiLCJpc09ic2VydmFibGVBcnJheSIsImlzT2JzZXJ2YWJsZU1hcCIsImlzT2JzZXJ2YWJsZVNldCIsInJlZkRlY29yYXRvciIsInJlZlN0cnVjdERlY29yYXRvciIsIm9sZFZhbHVlIiwiZ2V0RW5oYW5jZXJGcm9tT3B0aW9ucyIsIm9wdGlvbnMiLCJvYnNlcnZhYmxlRmFjdG9yaWVzIiwiYm94IiwiaW5jb3JyZWN0bHlVc2VkQXNEZWNvcmF0b3IiLCJPYnNlcnZhYmxlVmFsdWUiLCJlcXVhbHMiLCJpbml0aWFsVmFsdWVzIiwiY3JlYXRlT2JzZXJ2YWJsZUFycmF5IiwiT2JzZXJ2YWJsZU1hcCIsIk9ic2VydmFibGVTZXQiLCJwcm9wcyIsImV4dGVuZE9ic2VydmFibGUiLCJnZXREZWZhdWx0RGVjb3JhdG9yRnJvbU9iamVjdE9wdGlvbnMiLCJiYXNlIiwiY3JlYXRlRHluYW1pY09ic2VydmFibGVPYmplY3QiLCJleHRlbmRPYnNlcnZhYmxlT2JqZWN0V2l0aFByb3BlcnRpZXMiLCJyZWYiLCJzdHJ1Y3QiLCJhcmcyIiwibWV0aG9kTmFtZSIsImNvbXB1dGVkRGVjb3JhdG9yIiwiaW5zdGFuY2UiLCJhZGRDb21wdXRlZFByb3AiLCJjb250ZXh0IiwiQ2F1Z2h0RXhjZXB0aW9uIiwiY2F1c2UiLCJpc0NhdWdodEV4Y2VwdGlvbiIsInNob3VsZENvbXB1dGUiLCJkZXJpdmF0aW9uIiwiUE9TU0lCTFlfU1RBTEUiLCJwcmV2QWxsb3dTdGF0ZVJlYWRzIiwiYWxsb3dTdGF0ZVJlYWRzU3RhcnQiLCJwcmV2VW50cmFja2VkIiwidW50cmFja2VkU3RhcnQiLCJvYnMiLCJvYnNlcnZpbmciLCJpc0NvbXB1dGVkVmFsdWUiLCJkaXNhYmxlRXJyb3JCb3VuZGFyaWVzIiwidW50cmFja2VkRW5kIiwiYWxsb3dTdGF0ZVJlYWRzRW5kIiwiY2hhbmdlRGVwZW5kZW5jaWVzU3RhdGVUbzAiLCJjaGVja0lmU3RhdGVNb2RpZmljYXRpb25zQXJlQWxsb3dlZCIsImhhc09ic2VydmVycyIsInNpemUiLCJjb21wdXRhdGlvbkRlcHRoIiwiYWxsb3dTdGF0ZUNoYW5nZXMiLCJlbmZvcmNlQWN0aW9ucyIsInRyYWNrRGVyaXZlZEZ1bmN0aW9uIiwibmV3T2JzZXJ2aW5nIiwidW5ib3VuZERlcHNDb3VudCIsInJ1bklkIiwicHJldlRyYWNraW5nIiwidHJhY2tpbmdEZXJpdmF0aW9uIiwicHJldk9ic2VydmluZyIsImxvd2VzdE5ld09ic2VydmluZ0Rlcml2YXRpb25TdGF0ZSIsImkwIiwiZGVwIiwicmVtb3ZlT2JzZXJ2ZXIiLCJhZGRPYnNlcnZlciIsImJpbmREZXBlbmRlbmNpZXMiLCJjbGVhck9ic2VydmluZyIsInVudHJhY2tlZCIsImFjdGlvbiIsInByZXYiLCJhbGxvd1N0YXRlUmVhZHMiLCJjdXJyZW50QWN0aW9uSWQiLCJuZXh0QWN0aW9uSWQiLCJmdW5jdGlvbk5hbWVEZXNjcmlwdG9yIiwiY3JlYXRlQWN0aW9uIiwiYWN0aW9uTmFtZSIsImV4ZWN1dGVBY3Rpb24iLCJpc01vYnhBY3Rpb24iLCJzY29wZSIsInJ1bkluZm8iLCJzdGFydFRpbWUiLCJwcmV2RGVyaXZhdGlvbiIsInByZXZBbGxvd1N0YXRlQ2hhbmdlcyIsImFsbG93U3RhdGVDaGFuZ2VzU3RhcnQiLCJub3RpZnlTcHkiLCJhY3Rpb25JZCIsInBhcmVudEFjdGlvbklkIiwiX3N0YXJ0QWN0aW9uIiwiZXJyIiwic3VwcHJlc3NSZWFjdGlvbkVycm9ycyIsImFsbG93U3RhdGVDaGFuZ2VzRW5kIiwiX2VuZEFjdGlvbiIsIl9zdXBlciIsIl90aGlzIiwiaGFzVW5yZXBvcnRlZENoYW5nZSIsIl9fIiwiX19leHRlbmRzIiwiZGVoYW5jZVZhbHVlIiwiZGVoYW5jZXIiLCJwcmVwYXJlTmV3VmFsdWUiLCJVTkNIQU5HRUQiLCJzZXROZXdWYWx1ZSIsImhhc0ludGVyY2VwdG9ycyIsImNoYW5nZSIsImludGVyY2VwdENoYW5nZSIsImhhc0xpc3RlbmVycyIsIm5vdGlmeUxpc3RlbmVycyIsImludGVyY2VwdCIsImhhbmRsZXIiLCJyZWdpc3RlckludGVyY2VwdG9yIiwib2JzZXJ2ZSIsImZpcmVJbW1lZGlhdGVseSIsInJlZ2lzdGVyTGlzdGVuZXIiLCJDb21wdXRlZFZhbHVlIiwiX19tYXBpZCIsImlzQ29tcHV0aW5nIiwiaXNSdW5uaW5nU2V0dGVyIiwic2V0dGVyIiwiY29tcGFyZVN0cnVjdHVyYWwiLCJyZXF1aXJlc1JlYWN0aW9uIiwia2VlcEFsaXZlIiwicHJvcGFnYXRlTWF5YmVDaGFuZ2VkIiwiaW5CYXRjaCIsInRyYWNrQW5kQ29tcHV0ZSIsInByb3BhZ2F0ZUNoYW5nZUNvbmZpcm1lZCIsIndhcm5BYm91dFVudHJhY2tlZFJlYWQiLCJjb21wdXRlVmFsdWUiLCJwZWVrIiwid2FzU3VzcGVuZGVkIiwiY2hhbmdlZCIsInRyYWNrIiwic3VzcGVuZCIsImZpcnN0VGltZSIsInByZXZWYWx1ZSIsImF1dG9ydW4iLCJwcmV2VSIsIk1vYlhHbG9iYWxzIiwicGVuZGluZ1Vub2JzZXJ2YXRpb25zIiwicGVuZGluZ1JlYWN0aW9ucyIsImlzUnVubmluZ1JlYWN0aW9ucyIsInNweUxpc3RlbmVycyIsImdsb2JhbFJlYWN0aW9uRXJyb3JIYW5kbGVycyIsImNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbiIsInJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlIiwib2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb24iLCJjb21wdXRlZENvbmZpZ3VyYWJsZSIsIm1vY2tHbG9iYWwiLCJnZXRHbG9iYWwiLCJjYW5NZXJnZUdsb2JhbFN0YXRlIiwiaXNvbGF0ZUNhbGxlZCIsIl9fbW9ieEluc3RhbmNlQ291bnQiLCJfX21vYnhHbG9iYWxzIiwibm9kZSIsImRlbGV0ZSIsInF1ZXVlRm9yVW5vYnNlcnZhdGlvbiIsInJ1blJlYWN0aW9ucyIsImNvbnNvbGUiLCJsb2ciLCJCUkVBSyIsImxpbmVzIiwicHJpbnREZXBUcmVlIiwidHJlZSIsImRlcHRoIiwiZGVwZW5kZW5jaWVzIiwiY2hpbGQiLCJub2RlVG9EZXBlbmRlbmN5VHJlZSIsImdldEF0b20iLCJSZWFjdGlvbiIsIm9uSW52YWxpZGF0ZSIsImVycm9ySGFuZGxlciIsInJlcXVpcmVzT2JzZXJ2YWJsZSIsImlzRGlzcG9zZWQiLCJfaXNTY2hlZHVsZWQiLCJfaXNUcmFja1BlbmRpbmciLCJfaXNSdW5uaW5nIiwic2NoZWR1bGUiLCJpc1NjaGVkdWxlZCIsInJ1blJlYWN0aW9uIiwicmVwb3J0RXhjZXB0aW9uSW5EZXJpdmF0aW9uIiwid2FybiIsImRpc3Bvc2UiLCJnZXREaXNwb3NlciIsInRyYWNlIiwiZW50ZXJCcmVha1BvaW50IiwiX2kiLCJwb3AiLCJnZXRBdG9tRnJvbUFyZ3MiLCJMT0ciLCJyZWFjdGlvblNjaGVkdWxlciIsInJ1blJlYWN0aW9uc0hlbHBlciIsImFsbFJlYWN0aW9ucyIsIml0ZXJhdGlvbnMiLCJzcGxpY2UiLCJyZW1haW5pbmdSZWFjdGlvbnMiLCJpc1JlYWN0aW9uIiwiZG9udFJlYXNzaWduRmllbGRzIiwibmFtZWRBY3Rpb25EZWNvcmF0b3IiLCJpbml0aWFsaXplcl8xIiwiYWN0aW9uRmllbGREZWNvcmF0b3IiLCJhcmcxIiwiYXJnNCIsImRlZmluZUJvdW5kQWN0aW9uIiwidmlldyIsIm9wdHMiLCJyZWFjdGlvbiIsInNjaGVkdWxlciIsImRlbGF5IiwicmVhY3Rpb25SdW5uZXIiLCJvbkVycm9yIiwic2NoZWR1bGVyXzEiLCJjcmVhdGVTY2hlZHVsZXJGcm9tT3B0aW9ucyIsImlzU2NoZWR1bGVkXzEiLCJib3VuZCIsImFwcGx5VG9JbnN0YW5jZSIsImhvb2siLCJjYiIsImxpc3RlbmVyc0tleSIsImhvb2tMaXN0ZW5lcnMiLCJwcm9wZXJ0aWVzIiwiZV8yIiwia2V5c18yIiwia2V5c18yXzEiLCJyZXN1bHREZXNjcmlwdG9yIiwiZV8yXzEiLCJGbG93Q2FuY2VsbGF0aW9uRXJyb3IiLCJfaXNPYnNlcnZhYmxlIiwidmFsdWVzIiwidHJhbnNhY3Rpb24iLCJnZXRBZG0iLCJpc1Byb3BlcnR5S2V5Iiwib2JqZWN0UHJveHlUcmFwcyIsImFkbSIsImV4aXN0aW5nT2JzZXJ2YWJsZSIsIndyaXRlIiwiZGVmYXVsdEVuaGFuY2VyIiwicGFyc2VJbnQiLCJ2YWx1ZXNfMSIsImtleV8xIiwiZGVsZXRlUHJvcGVydHkiLCJyZW1vdmUiLCJrZXlzQXRvbSIsInByZXZlbnRFeHRlbnNpb25zIiwiUHJveHkiLCJpbnRlcmNlcHRhYmxlIiwiaW50ZXJjZXB0b3JzIiwibGlzdGVuYWJsZSIsImNoYW5nZUxpc3RlbmVycyIsImFycmF5VHJhcHMiLCJnZXRBcnJheUxlbmd0aCIsImFycmF5RXh0ZW5zaW9ucyIsImlzTmFOIiwic2V0QXJyYXlMZW5ndGgiLCJvd25lZCIsIk9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uIiwic3BsaWNlV2l0aEFycmF5IiwibGFzdEtub3duTGVuZ3RoIiwibmV3ViIsIm9sZFYiLCJkZWhhbmNlVmFsdWVzIiwiYWRkZWQiLCJhZGRlZENvdW50IiwicmVtb3ZlZCIsInJlbW92ZWRDb3VudCIsIm5ld0xlbmd0aCIsImN1cnJlbnRMZW5ndGgiLCJuZXdJdGVtcyIsInVwZGF0ZUFycmF5TGVuZ3RoIiwib2xkTGVuZ3RoIiwiZGVsdGEiLCJkZWxldGVDb3VudCIsIm1heCIsInNwbGljZUl0ZW1zSW50b1ZhbHVlcyIsIm5vdGlmeUFycmF5U3BsaWNlIiwibm90aWZ5QXJyYXlDaGlsZFVwZGF0ZSIsIm5vdGlmeSIsInRvSlMiLCJpdGVtcyIsInNoaWZ0IiwidW5zaGlmdCIsInJldmVyc2UiLCJzb3J0IiwiY29tcGFyZUZuIiwiZnVuY05hbWUiLCJkZWhhbmNlZFZhbHVlcyIsImNhbGxiYWNrIiwiZWxlbWVudCIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiaXNPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbiIsIl9hJDEiLCJPYnNlcnZhYmxlTWFwTWFya2VyIiwiaW5pdGlhbERhdGEiLCJfa2V5c0F0b20iLCJfZGF0YSIsIl9oYXNNYXAiLCJuZXdFbnRyeSIsImhhc0tleSIsIl91cGRhdGVWYWx1ZSIsIl9hZGRWYWx1ZSIsIl91cGRhdGVIYXNNYXBFbnRyeSIsIm1ha2VJdGVyYWJsZSIsIl9kIiwiX2UiLCJlXzMiLCJlXzQiLCJyZXBsYWNlbWVudE1hcCIsImRhdGFTdHJ1Y3R1cmUiLCJjb252ZXJ0VG9NYXAiLCJvcmRlcmVkRGF0YSIsImtleXNSZXBvcnRDaGFuZ2VkQ2FsbGVkIiwiZV8zXzEiLCJfZiIsIl9nIiwiX2giLCJrZXlFeGlzdGVkIiwidmFsdWVfMSIsImVfNF8xIiwiaXRlcjEiLCJpdGVyMiIsIm5leHQxIiwibmV4dDIiLCJ0b1BPSk8iLCJlXzUiLCJlXzVfMSIsIk9ic2VydmFibGVTZXRNYXJrZXIiLCJfYXRvbSIsImNhbGxiYWNrRm4iLCJuZXh0SW5kZXgiLCJvYnNlcnZhYmxlVmFsdWVzIiwiT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uIiwicmVhZCIsInBlbmRpbmdLZXlzIiwiZXhpc3RzIiwib2JzZXJ2YWJsZVByb3BlcnR5Q29uZmlncyIsImdlbmVyYXRlT2JzZXJ2YWJsZVByb3BDb25maWciLCJub3RpZnlQcm9wZXJ0eUFkZGl0aW9uIiwicHJvcGVydHlPd25lciIsImNvbXB1dGVkUHJvcGVydHlDb25maWdzIiwiZ2V0QWRtaW5pc3RyYXRpb25Gb3JDb21wdXRlZFByb3BPd25lciIsImdlbmVyYXRlQ29tcHV0ZWRQcm9wQ29uZmlnIiwib2xkT2JzZXJ2YWJsZSIsImlsbGVnYWxBY2Nlc3MiLCJvd25lciIsImdldEtleXMiLCJpc09ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbiIsImFueVRoaW5nIiwiZ2V0QWRtaW5pc3RyYXRpb24iLCJhU3RhY2siLCJiU3RhY2siLCJjbGFzc05hbWUiLCJ1bndyYXAiLCJhcmVBcnJheXMiLCJhQ3RvciIsImJDdG9yIiwiaGFzJDEiLCJnZXRTZWxmIiwiX19NT0JYX0RFVlRPT0xTX0dMT0JBTF9IT09LX18iLCJpbmplY3RNb2J4Iiwic3B5IiwiZXh0cmFzIiwiZ2V0RGVidWdOYW1lIiwiX2VxdWFscyIsInNldDEiLCJzZXQyIiwibGVuMSIsImxlbjIiLCJzZXR0bGUiLCJidWlsZFVSTCIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsImNyZWF0ZUVycm9yIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwicmVxdWVzdCIsImxvYWRFdmVudCIsInhEb21haW4iLCJYRG9tYWluUmVxdWVzdCIsInVybCIsIm9ucHJvZ3Jlc3MiLCJvbnRpbWVvdXQiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIkF1dGhvcml6YXRpb24iLCJvcGVuIiwidG9VcHBlckNhc2UiLCJwYXJhbXMiLCJwYXJhbXNTZXJpYWxpemVyIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsImNvb2tpZXMiLCJ4c3JmVmFsdWUiLCJ3aXRoQ3JlZGVudGlhbHMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWxUb2tlbiIsInByb21pc2UiLCJ0aGVuIiwiY2FuY2VsIiwiYWJvcnQiLCJzZW5kIiwiZW5oYW5jZUVycm9yIiwiY29kZSIsIl9fQ0FOQ0VMX18iLCJDYW5jZWwiLCJpdGVyYXRlZSIsImJhc2VNYXRjaGVzIiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsInN0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsInN0YWNrR2V0Iiwic3RhY2tIYXMiLCJzdGFja1NldCIsIlN0YWNrIiwidGFnIiwiZnVuY1RvU3RyaW5nIiwiYmFzZUlzRXF1YWxEZWVwIiwiYmFzZUlzRXF1YWwiLCJiaXRtYXNrIiwiY3VzdG9taXplciIsInN0YWNrIiwiU2V0Q2FjaGUiLCJhcnJheVNvbWUiLCJjYWNoZUhhcyIsImVxdWFsRnVuYyIsImlzUGFydGlhbCIsImFyckxlbmd0aCIsIm90aExlbmd0aCIsImFyclN0YWNrZWQiLCJvdGhTdGFja2VkIiwic2VlbiIsImFyclZhbHVlIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsIm90aEluZGV4IiwicHJlZGljYXRlIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsIkRhdGFWaWV3IiwiV2Vha01hcCIsInRvU291cmNlIiwiZGF0YVZpZXdDdG9yU3RyaW5nIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwiZ2V0VGFnIiwiY3RvclN0cmluZyIsInNyY1ZhbHVlIiwiY2FzdFBhdGgiLCJ0b0tleSIsInBhdGgiLCJpc0tleSIsInN0cmluZ1RvUGF0aCIsImJhc2VUb1N0cmluZyIsImJhc2VGb3JPd24iLCJiYXNlRWFjaCIsImNyZWF0ZUJhc2VFYWNoIiwiYmFzZUZpbmRJbmRleCIsImJhc2VJc05hTiIsInN0cmljdEluZGV4T2YiLCJmcm9tSW5kZXgiLCJ0b0Zpbml0ZSIsInJlbWFpbmRlciIsInRvTnVtYmVyIiwiYmFzZVNldERhdGEiLCJjcmVhdGVCaW5kIiwiY3JlYXRlQ3VycnkiLCJjcmVhdGVIeWJyaWQiLCJjcmVhdGVQYXJ0aWFsIiwiZ2V0RGF0YSIsIm1lcmdlRGF0YSIsInNldERhdGEiLCJzZXRXcmFwVG9TdHJpbmciLCJ0b0ludGVnZXIiLCJuYXRpdmVNYXgiLCJhcmdQb3MiLCJhcnkiLCJpc0JpbmRLZXkiLCJwYXJ0aWFsc1JpZ2h0IiwiaG9sZGVyc1JpZ2h0IiwibmV3RGF0YSIsIm1ldGFNYXAiLCJjb21wb3NlQXJncyIsImNvbXBvc2VBcmdzUmlnaHQiLCJjb3VudEhvbGRlcnMiLCJjcmVhdGVDdG9yIiwiY3JlYXRlUmVjdXJyeSIsInJlb3JkZXIiLCJpc0FyeSIsImlzQmluZCIsImlzQ3VycmllZCIsImlzRmxpcCIsIndyYXBwZXIiLCJob2xkZXJzQ291bnQiLCJuZXdIb2xkZXJzIiwiYXJnc0luZGV4IiwiYXJnc0xlbmd0aCIsImhvbGRlcnNMZW5ndGgiLCJsZWZ0SW5kZXgiLCJsZWZ0TGVuZ3RoIiwicmFuZ2VMZW5ndGgiLCJpc1VuY3VycmllZCIsImhvbGRlcnNJbmRleCIsInJpZ2h0SW5kZXgiLCJyaWdodExlbmd0aCIsIm9mZnNldCIsImlzTGF6aWFibGUiLCJ3cmFwRnVuYyIsImlzQ3VycnkiLCJMb2Rhc2hXcmFwcGVyIiwiY2hhaW5BbGwiLCJfX2NoYWluX18iLCJfX2luZGV4X18iLCJfX3ZhbHVlc19fIiwic291cmNlIiwic2hvcnRPdXQiLCJuYXRpdmVOb3ciLCJub3ciLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsImdldFdyYXBEZXRhaWxzIiwiaW5zZXJ0V3JhcERldGFpbHMiLCJzZXRUb1N0cmluZyIsInVwZGF0ZVdyYXBEZXRhaWxzIiwicmVmZXJlbmNlIiwiYmFzZVNldFRvU3RyaW5nIiwicmVIYXNVbmljb2RlIiwiUmVnRXhwIiwic3RyaW5nIiwiX2ludGVyb3BEZWZhdWx0IiwiX2RlZmF1bHQyNCIsIl9kZWZhdWx0MjMiLCJfZGVmYXVsdDIyIiwiX2RlZmF1bHQyMSIsIl9kZWZhdWx0MjAiLCJfZGVmYXVsdDE5IiwiX2RlZmF1bHQxOCIsIl9kZWZhdWx0MTciLCJfZGVmYXVsdDE2IiwiX2RlZmF1bHQxNSIsIl9kZWZhdWx0MTQiLCJfZGVmYXVsdDEzIiwiX2RlZmF1bHQxMiIsIl9kZWZhdWx0MTEiLCJfZGVmYXVsdDEwIiwiX2RlZmF1bHQ5IiwiX2RlZmF1bHQ4IiwiX2RlZmF1bHQ3IiwiX2RlZmF1bHQ2IiwiX2RlZmF1bHQ1IiwiX2RlZmF1bHQ0IiwiX2RlZmF1bHQzIiwiX2RlZmF1bHQyIiwiX2RlZmF1bHQiLCJheGlvcyIsIl90eXBlb2YiLCJfZXh0ZW5kcyIsIiRhc3luY2JpbmQiLCJ0cmFtcG9saW5lIiwiTGF6eVRoZW5hYmxlIiwiX3Jlc29sdmVyIiwiaXNUaGVuYWJsZSIsIkVhZ2VyVGhlbmFibGUiLCJUaGVuYWJsZSIsIkVhZ2VyVGhlbmFibGVGYWN0b3J5Iiwic2V0SW1tZWRpYXRlIiwic3RhdGUiLCJpc1dpdGhpbiIsImlzSW52YWxpZENvbmZpZyIsIkRFRkFVTFRfSEVBREVSUyIsIkFjY2VwdCIsIkRFRkFVTFRfQ09ORklHIiwiVElNRU9VVF9FUlJPUl9DT0RFUyIsIk5PREVKU19DT05ORUNUSU9OX0VSUk9SX0NPREVTIiwiaW4yMDBzIiwiaW40MDBzIiwiaW41MDBzIiwic3RhdHVzTmlsIiwiUiIsIk4iLCJpc1Byb21pc2UiLCJUIiwiY2F0Y2giLCJpc0NhbmNlbCIsImR1cmF0aW9uIiwicHJvYmxlbSIsIm9rIiwiYXhpb3NJbnN0YW5jZSIsIm1vbml0b3JzIiwiYWRkTW9uaXRvciIsInJlcXVlc3RUcmFuc2Zvcm1zIiwiYXN5bmNSZXF1ZXN0VHJhbnNmb3JtcyIsInJlc3BvbnNlVHJhbnNmb3JtcyIsImFkZFJlcXVlc3RUcmFuc2Zvcm0iLCJhZGRBc3luY1JlcXVlc3RUcmFuc2Zvcm0iLCJhZGRSZXNwb25zZVRyYW5zZm9ybSIsInNldEhlYWRlciIsInNldEhlYWRlcnMiLCJkZWxldGVIZWFkZXIiLCJzZXRCYXNlVVJMIiwiYmFzZVVSTCIsImdldEJhc2VVUkwiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwibGluayIsInVubGluayIsImFwaXNhdWNlIiwiQ0xJRU5UX0VSUk9SIiwiU0VSVkVSX0VSUk9SIiwiVElNRU9VVF9FUlJPUiIsIkNPTk5FQ1RJT05fRVJST1IiLCJORVRXT1JLX0VSUk9SIiwiVU5LTk9XTl9FUlJPUiIsIkNBTkNFTF9FUlJPUiIsImFycmF5TWFwIiwiYmFzZUl0ZXJhdGVlIiwiYmFzZU1hcCIsImNvbGxlY3Rpb24iLCJwYWlycyIsInBhaXIiLCJhcnJheUZpbHRlciIsImJhc2VGaWx0ZXIiLCJiYXNlSW5kZXhPZiIsImZ1dHVyZSIsInBhc3QiLCJtbSIsImhoIiwiZGQiLCJNTSIsInl5IiwiZnJvbVRvQmFzZSIsInJlbGF0aXZlVGltZSIsInRocmVzaG9sZHMiLCJyb3VuZGluZyIsInRvIiwidG9Ob3ciLCJmcm9tTm93IiwibG9jYWwiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0RheSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCIkbG9jYWxPZmZzZXQiLCJpc1VUQyIsInVwcGVyRmlyc3QiLCJjcmVhdGVDYXNlRmlyc3QiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwiVGltZW91dCIsImlkIiwiY2xlYXJGbiIsIl9pZCIsIl9jbGVhckZuIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiY2xvc2UiLCJ1bnJlZiIsImVucm9sbCIsIm1zZWNzIiwiX2lkbGVUaW1lb3V0SWQiLCJfaWRsZVRpbWVvdXQiLCJ1bmVucm9sbCIsIl91bnJlZkFjdGl2ZSIsImFjdGl2ZSIsIl9vblRpbWVvdXQiLCJjbGVhckltbWVkaWF0ZSIsInJlZ2lzdGVySW1tZWRpYXRlIiwiaHRtbCIsImNoYW5uZWwiLCJtZXNzYWdlUHJlZml4Iiwib25HbG9iYWxNZXNzYWdlIiwibmV4dEhhbmRsZSIsInRhc2tzQnlIYW5kbGUiLCJjdXJyZW50bHlSdW5uaW5nQVRhc2siLCJkb2MiLCJhdHRhY2hUbyIsImhhbmRsZSIsInJ1bklmUHJlc2VudCIsInBvc3RNZXNzYWdlIiwiaW1wb3J0U2NyaXB0cyIsInBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMiLCJvbGRPbk1lc3NhZ2UiLCJvbm1lc3NhZ2UiLCJjYW5Vc2VQb3N0TWVzc2FnZSIsIk1lc3NhZ2VDaGFubmVsIiwicG9ydDEiLCJldmVudCIsInBvcnQyIiwiY3JlYXRlRWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlbW92ZUNoaWxkIiwiYXBwZW5kQ2hpbGQiLCJyYW5kb20iLCJhdHRhY2hFdmVudCIsInRhc2siLCJfY29udGFpbnMiLCJfaW5kZXhPZiIsImluZiIsIl9hcnJheUZyb21JdGVyYXRvciIsIl9mdW5jdGlvbk5hbWUiLCJpZGVudGljYWwiLCJzdGFja0EiLCJzdGFja0IiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwic3RpY2t5IiwidW5pY29kZSIsImtleXNBIiwiX2NvbmNhdCIsIl9jcmVhdGVQYXJ0aWFsQXBwbGljYXRvciIsIl9waXBlIiwidGFpbCIsIlhXcmFwIiwidGhpc09iaiIsIl9pc1N0cmluZyIsIl9jaGVja0Zvck1ldGhvZCIsIkluZmluaXR5IiwidG9JbmRleCIsIl9hc3NpZ24iLCJfb2JqZWN0QXNzaWduIiwibmV4dEtleSIsImNvbmRpdGlvbiIsIm9uVHJ1ZSIsIm9uRmFsc2UiLCJyZWNlaXZlZCIsImNvbWJpbmVkIiwiYXJnc0lkeCIsImxlZnQiLCJjb21iaW5lZElkeCIsInByZWQiLCJsaWZ0Iiwibm90IiwibGlmdE4iLCJhcCIsImxpZnRlZCIsImFwcGxpY2F0aXZlIiwiX2lzVHJhbnNmb3JtZXIiLCJtZXRob2ROYW1lcyIsInRyYW5zZHVjZXIiLCJfeGZCYXNlIiwiWE1hcCIsImVtcHR5IiwiX2lzT2JqZWN0IiwicGx1Y2siLCJwcmVkcyIsImFsd2F5cyIsIl9pZGVudGl0eSIsIkF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWxUb2tlbiIsImFsbCIsInByb21pc2VzIiwic3ByZWFkIiwicmVhZEZsb2F0TEUiLCJpc1Nsb3dCdWZmZXIiLCJfaXNCdWZmZXIiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJkaXNwYXRjaFJlcXVlc3QiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJjaGFpbiIsImludGVyY2VwdG9yIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJub3JtYWxpemVkTmFtZSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInBhcnNlZCIsImxpbmUiLCJzdWJzdHIiLCJvcmlnaW5VUkwiLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInNldEF0dHJpYnV0ZSIsInByb3RvY29sIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImxvY2F0aW9uIiwicmVxdWVzdFVSTCIsIkUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwidG9HTVRTdHJpbmciLCJkZWNvZGVVUklDb21wb25lbnQiLCJoYW5kbGVycyIsInVzZSIsImVqZWN0IiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwicmVhc29uIiwiZm5zIiwicmVsYXRpdmVVUkwiLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwidG9rZW4iLCJhcnIiLCJfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyIsImJhc2VJc01hdGNoIiwiZ2V0TWF0Y2hEYXRhIiwibWF0Y2hlc1N0cmljdENvbXBhcmFibGUiLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJvYmpWYWx1ZSIsIkNPTVBBUkVfUEFSVElBTF9GTEFHIiwiYXNzb2NJbmRleE9mIiwiTEFSR0VfQVJSQVlfU0laRSIsImlzTWFza2VkIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwicmVJc05hdGl2ZSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwiaXNPd24iLCJ1bm1hc2tlZCIsInVpZCIsImNvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiZXhlYyIsIklFX1BST1RPIiwiSGFzaCIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJnZXRNYXBEYXRhIiwiZXF1YWxBcnJheXMiLCJlcXVhbEJ5VGFnIiwiZXF1YWxPYmplY3RzIiwib2JqZWN0VGFnIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJzZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwiVWludDhBcnJheSIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5Iiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwiYnl0ZUxlbmd0aCIsImJ5dGVPZmZzZXQiLCJjb252ZXJ0Iiwic3RhY2tlZCIsImdldEFsbEtleXMiLCJvYmpQcm9wcyIsIm9iakxlbmd0aCIsIm9ialN0YWNrZWQiLCJza2lwQ3RvciIsIm9iakN0b3IiLCJvdGhDdG9yIiwiYmFzZUdldEFsbEtleXMiLCJnZXRTeW1ib2xzIiwiYXJyYXlQdXNoIiwia2V5c0Z1bmMiLCJzeW1ib2xzRnVuYyIsInN0dWJBcnJheSIsIm5hdGl2ZUdldFN5bWJvbHMiLCJzeW1ib2wiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwicmVxdWlyZSIsIm92ZXJBcmciLCJ0cmFuc2Zvcm0iLCJhcmciLCJpc1N0cmljdENvbXBhcmFibGUiLCJoYXNJbiIsImJhc2VHZXQiLCJkZWZhdWx0VmFsdWUiLCJtZW1vaXplQ2FwcGVkIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsIm51bWJlciIsInF1b3RlIiwic3ViU3RyaW5nIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJDYWNoZSIsInN5bWJvbFRvU3RyaW5nIiwiYmFzZUhhc0luIiwiaGFzUGF0aCIsImhhc0Z1bmMiLCJiYXNlUHJvcGVydHkiLCJiYXNlUHJvcGVydHlEZWVwIiwiYmFzZUZvciIsImNyZWF0ZUJhc2VGb3IiLCJmcm9tUmlnaHQiLCJpdGVyYWJsZSIsImVhY2hGdW5jIiwiYmFzZVRyaW0iLCJyZUlzQmFkSGV4IiwicmVJc0JpbmFyeSIsInJlSXNPY3RhbCIsImZyZWVQYXJzZUludCIsImlzQmluYXJ5IiwidHJpbW1lZEVuZEluZGV4IiwicmVUcmltU3RhcnQiLCJyZVdoaXRlc3BhY2UiLCJnZXRGdW5jTmFtZSIsImxvZGFzaCIsInJlYWxOYW1lcyIsIm90aGVyRnVuYyIsIndyYXBwZXJDbG9uZSIsImNvcHlBcnJheSIsInJlV3JhcERldGFpbHMiLCJyZVNwbGl0RGV0YWlscyIsInJlV3JhcENvbW1lbnQiLCJkZXRhaWxzIiwibGFzdEluZGV4IiwiY29uc3RhbnQiLCJhcnJheUVhY2giLCJhcnJheUluY2x1ZGVzIiwid3JhcEZsYWdzIiwibmF0aXZlTWluIiwiaW5kZXhlcyIsIm9sZEFycmF5Iiwic3JjQml0bWFzayIsIm5ld0JpdG1hc2siLCJpc0NvbW1vbiIsImlzQ29tYm8iLCJvdmVyUmVzdCIsInN0YXJ0Iiwib3RoZXJBcmdzIiwiY2FzdFNsaWNlIiwiaGFzVW5pY29kZSIsInN0cmluZ1RvQXJyYXkiLCJzdHJTeW1ib2xzIiwiY2hyIiwidHJhaWxpbmciLCJiYXNlU2xpY2UiLCJlbmQiLCJhc2NpaVRvQXJyYXkiLCJ1bmljb2RlVG9BcnJheSIsInJzQXN0cmFsIiwicnNDb21ibyIsInJzRml0eiIsInJzTm9uQXN0cmFsIiwicnNSZWdpb25hbCIsInJzU3VyclBhaXIiLCJyZU9wdE1vZCIsInJzU2VxIiwicnNTeW1ib2wiLCJyZVVuaWNvZGUiLCJsaWNlbnNlIiwidmFsaWRhdG9ycyIsImNsZWFuTGljZW5zZSIsImZpbHRlciIsInZhbGlkIiwicmVhc29ucyIsImJhc2VSYW5nZSIsImlzSXRlcmF0ZWVDYWxsIiwibmF0aXZlQ2VpbCIsIkJhc2VBUEkiLCJ0d2lsaW9LZXkiLCJhcGkiLCJwaG9uZSIsIlRXSUxJT19LRVkiLCJlbWFpbCIsImVtYWlsX2lkIiwic3NuIiwicGFydG5lcl9uYW1lIiwicGFydG5lcl9pZCIsImNvaG9ydF9pZCIsIlByZWZlciIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJlbWVyYWxkIiwidGFydE9yYW5nZSIsInllbGxvd09yYW5nZSIsInNsYXRlR3JheSIsImNhZGV0Qmx1ZSIsInBlcml3aW5rbGUiLCJhbGljZUJsdWUiLCJzbW9rZVdoaXRlIiwiYWxlcnQwIiwiYWxlcnQxIiwiYWxlcnQyIiwiYWxlcnQzIiwiY2VydWxlYW5CbHVlIiwicGVhY2giLCJiYWJ5UGluayIsInNwYW5pc2hQaW5rIiwiYmVhdUJsdWUiLCJjdWx0dXJlZCIsImJsdWVCZWxsIiwiYmFieUJsdWVFeWVzIiwicG93ZGVyQmx1ZSIsImhvbmV5RGV3IiwiYnVmZiIsImJsYWNrIiwid2hpdGUiLCJub3RpY2VNdXRlZCIsIm5vdGljZUVycm9yIiwibm90aWNlV2FybmluZyIsIm5vdGljZVN1Y2Nlc3MiLCJub3RpY2VJbmZvIiwicGFyc2VQeXRob25EYXRlIiwidGltZSIsIm5ld0RhdGUiLCJob3VycyIsInNldEhvdXJzIiwiZm9ybWF0RGF0ZSIsInBhcnNlZERhdGUiLCJmb3JtYXRFbWFpbCIsImZvcm1hdE5hbWUiLCJyZW5kZXJQaG9uZSIsImVuY3J5cHRlZCIsImFyZWFDb2RlIiwicGhvbmVOdW1iZXIiLCJmb3JtYXRQaG9uZSIsImZvcm1hdFNTTiIsInNzbk51bWJlciIsImZvcm1hdFppcGNvZGUiLCJ6aXBjb2RlIiwiZ2V0UmVqZWN0TWVzc2FnZSIsInBhcnRuZXJfdHlwZSIsImluY2x1ZGVzIiwiUklTS19NQU5BR0VNRU5UIiwiRkNSQSIsIkZDUkFfRSIsIkZDUkFfTiIsImdldFN0YXR1cyIsInJldmlldyIsInBlbmRpbmciLCJpbml0aWF0ZWQiLCJnZXRZZWFyIiwiaXNVcmwiLCJ1cmxTdHJpbmciLCJ0ZXJtcyIsImxlZ2FsUmVwbGFjZSIsIm9yaWdpbmFsIiwicmVwbGFjZW1lbnQiLCJyZXR1cm5WYWwiLCJtYXNrTmFtZSIsIm9iamVjdFRvUXVlcnkiLCJxdWVyeSIsInF1ZXJ5QXJyYXkiLCJwYXJzZVF1ZXJ5IiwicGlja0NvbG9yIiwiY29sb3JzIiwicGlja1Njb3JlQ29sb3IiLCJzY29yZSIsInByZXR0aWZ5RGF0ZSIsImRhdGVTdHJpbmciLCJERCIsIllZWVkiLCJmYWxzeVN0cmluZ3MiLCJ2YWx1ZUV4aXN0cyIsInJlbmRlckRldGFpbFZhbHVlIiwicmVuZGVyTmVzdGVkT2JqZWN0IiwibmVzdGVkIiwic2VsZWN0TWFzdGVyS2V5IiwibWFzdGVyS2V5IiwiYmx1ZXByaW50IiwiZmluZCIsInNldFZhbHVlIiwiZmFsbGJhY2siLCJzZXRPcHRpb24iLCJhbGxvd2VkIiwic2V0dGVyRmFjdG9yeUN1cnJpZWQiLCJ0b2dnbGVCb29sQ3VycmllZCIsInNldFN0cmluZ0ZhY3RvcnkiLCJzZXROdW1iZXJGYWN0b3J5Iiwic2V0Qm9vbEZhY3RvcnkiLCJzZXRUcnV0aHlDdXJyaWVkIiwic2V0RmFsc3lDdXJyaWVkIiwic2V0T3B0aW9uRmFjdG9yeUN1cnJpZWQiLCJTZXR0ZXIiLCJzdG9yYWdlTW9jayIsInN0b3JhZ2UiLCJzZXRJdGVtIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJ0b0Jvb2xlYW4iLCJkYXlqcyIsInRvUmVsYXRpdmVGcm9tSVNPIiwicmVsYXRpdmVEYXRlIiwidG9SZWxhdGl2ZURhdGUiLCJhZGp1c3RlZE5vdyIsInRvU2VudGVuY2VDYXNlIiwic2VudGVuY2UiLCJ0ZXJtaW5hdGlvbiIsInRvVGl0bGVDYXNlIiwid29yZCIsImZpcnN0Q2hhciIsInJlbWFpbmluZ0NoYXJzIiwiSU5JVElBVEVEIiwiUEVORElORyIsIldJVEhEUkFXTiIsIkFQUFJPVkVEIiwiUkVKRUNURUQiLCJDT05TRU5UIiwiRU1BSUxFRCIsIlJFVklFVyIsIlJFVklFV0lORyIsIkNPTlNJREVSIiwiUFJPQ0VTU0lORyIsIlBFTkRJTkdfRElTUFVURSIsIlBFTkRJTkdfRklSU1RfTk9USUNFIiwiUEVORElOR19TRUNPTkRfTk9USUNFIiwiRklSU1RfTk9USUNFIiwiU0VDT05EX05PVElDRSIsIlNTTl9UUkFDRV9GQUlMRUQiLCJNVlJfRkFJTEVEIiwiQ09NUExJQU5DRSIsIkNPTVBMSUFOQ0VfU08iLCJWRVJJRllJTkciLCJDT01QTElBTkNFUkVWSUVXIiwiU1RPUkVEIiwidHJhbnNsYXRlU3RhdHVzIiwiYWR2ZXJzZV9hY3Rpb24iLCJjdXJyZW50U3RhdGVzIiwidmFsaWRhdGVEcml2ZXJzTGljZW5zZSIsInZhbGlkU3NuUmVnZXgiLCJtaXN1c2VkUmVnZXgiLCJpbnZhbGlkRmlyc3RUaHJlZSIsIm51bSIsInZhbGlkYXRlX3NzbiIsIm51bWJlclNTTiIsInZhbGlkYXRlRW1haWwiLCJ2YWxpZGF0ZVBob25lIiwiaXNBbHBoYU51bWVyaWMiLCJjaCIsImlzVmFsaWRDYW5hZGlhblppcGNvZGUiLCJ2YWxpZGF0ZVNTTiIsInZhbGlkYXRlQ2hlY2siLCJ3b3JrZXJfY2hlY2siLCJjb250YWluc0F0U3ltYm9sIiwiY29udGFpbnNOdW1iZXIiLCJ2YWxpZGF0ZU5hbWUiLCJ2YWxpZGF0ZUFkZHJlc3MiLCJhZGRyZXNzIiwidmFsaWRhdGVDdXN0b21JbnB1dCIsInZhbGlkYXRlWmlwY29kZSIsInZhbGlkYXRlQ2FuYWRpYW5aaXBjb2RlIiwidmFsaWRhdGVNVlJDaGVjayIsInZhbGlkYXRlUGhvbmVWZXJpZmljYXRpb24iLCJkaXNhYmxlX2NoZWNrIiwiZW52X3ZhciIsInZhbGlkYXRlRW1haWxJZCIsInZhbGlkYXRlVHVybklkIl0sIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsSUFDUSxtQkFBWEcsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLGNBQWUsR0FBSUgsR0FDQSxpQkFBWkMsUUFDZEEsUUFBUSxlQUFpQkQsSUFFekJELEVBQUssZUFBaUJDLElBUnhCLENBU21CLG9CQUFUSyxLQUF1QkEsS0FBT0MsTUFBTSxXQUM5QyxPLFlDVEUsSUFBSUMsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVVIsUUFHbkMsSUFBSUMsRUFBU0ssRUFBaUJFLEdBQVksQ0FDekNDLEVBQUdELEVBQ0hFLEdBQUcsRUFDSFYsUUFBUyxJQVVWLE9BTkFXLEVBQVFILEdBQVVJLEtBQUtYLEVBQU9ELFFBQVND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QUNlLElBQXhCQSxFQUFNbUUsT0FBTzdDLFFBR1Q4dEQsR0FBa0IsU0FBQXhILEdBQU8sT0FDcEMsS0FBV0EsSUFBWUEsRUFBUXRtRCxRQUFVLEdBRTlCK3RELEdBQTBCLFNBQUF6SCxHQUFPLE9BQzVDLEtBQVdBLElBQ040RyxHQUFlNUcsSUFDZjhHLEdBQXVCOUcsSUFFakJqbUQsR0FBVSxTQUFBM0IsR0FBSyxPQUMxQjRCLE1BQU1ELFFBQVEzQixJQUFVMGtCLGFBQWtCMWtCLElBRS9Cc3ZELEdBQW1CLFNBQUF2eUMsR0FBSyxPQUNuQyxLQUFXQSxJQUEyQixpQkFBVkEsRUFBcUJBLEVBQVEsSUFFOUN3eUMsR0FBNEIsU0FBQW4zQyxHQUN2QyxPQUFRQSxHQUNOLElBQUssV0FDTCxJQUFLLE9BQ0gsTUFBTyxXQUNULElBQUssYUFDTCxJQUFLLFFBQ0gsTUFBTyxhQUNULFFBQ0UsTUFBTyxLQUlBbzNDLEdBQWdCLFNBQUFDLEdBQU8sTUFDZixpQkFBWkEsR0FBaUQsU0FBMUJBLEVBQVFqcEQsZUFFM0JrcEQsR0FBa0IsU0FBQTNnQixHQUFFLE9BQUksS0FBV0EsSUFBcUIsS0FBZEEsRUFBR3p0QyxRQUU3Q3F1RCxHQUFpQixTQUFBNWdCLEdBQUUsT0FDOUIsS0FBV0EsSUFBTyxrQkFBa0J0bkMsS0FBS3NuQyIsImZpbGUiOiJ0dXJuLXNoYXJlZC5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInR1cm4tc2hhcmVkXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInR1cm4tc2hhcmVkXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInR1cm4tc2hhcmVkXCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzMDcpO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL19jdXJyeTEnKTtcbnZhciBfaXNQbGFjZWhvbGRlciA9IHJlcXVpcmUoJy4vX2lzUGxhY2Vob2xkZXInKTtcblxuXG4vKipcbiAqIE9wdGltaXplZCBpbnRlcm5hbCB0d28tYXJpdHkgY3VycnkgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9jdXJyeTIoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYyKGEsIGIpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIGYyO1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2lzUGxhY2Vob2xkZXIoYSkgPyBmMlxuICAgICAgICAgICAgIDogX2N1cnJ5MShmdW5jdGlvbihfYikgeyByZXR1cm4gZm4oYSwgX2IpOyB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBfaXNQbGFjZWhvbGRlcihhKSAmJiBfaXNQbGFjZWhvbGRlcihiKSA/IGYyXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihhKSA/IF9jdXJyeTEoZnVuY3Rpb24oX2EpIHsgcmV0dXJuIGZuKF9hLCBiKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGIpID8gX2N1cnJ5MShmdW5jdGlvbihfYikgeyByZXR1cm4gZm4oYSwgX2IpOyB9KVxuICAgICAgICAgICAgIDogZm4oYSwgYik7XG4gICAgfVxuICB9O1xufTtcbiIsInZhciBfaXNQbGFjZWhvbGRlciA9IHJlcXVpcmUoJy4vX2lzUGxhY2Vob2xkZXInKTtcblxuXG4vKipcbiAqIE9wdGltaXplZCBpbnRlcm5hbCBvbmUtYXJpdHkgY3VycnkgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9jdXJyeTEoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYxKGEpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCB8fCBfaXNQbGFjZWhvbGRlcihhKSkge1xuICAgICAgcmV0dXJuIGYxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgaXNCdWZmZXIgPSByZXF1aXJlKCdpcy1idWZmZXInKTtcblxuLypnbG9iYWwgdG9TdHJpbmc6dHJ1ZSovXG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGaWxlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGaWxlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCbG9iKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBCbG9iXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXModmFsKSB7XG4gIHJldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXM7XG59XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzKi8sICcnKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmICFpc0FycmF5KG9iaikpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixjPVwibW9udGhcIixmPVwicXVhcnRlclwiLGg9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsYykscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxjKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Yyx5OmgsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmZ9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1cIiRpc0RheWpzT2JqZWN0XCIsUz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fCEoIXR8fCF0W3BdKX0sdz1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtpZighZSlyZXR1cm4gZztpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO0Rbc10mJihpPXMpLG4mJihEW3NdPW4saT1zKTt2YXIgdT1lLnNwbGl0KFwiLVwiKTtpZighaSYmdS5sZW5ndGg+MSlyZXR1cm4gdCh1WzBdKX1lbHNle3ZhciBhPWUubmFtZTtEW2FdPWUsaT1hfXJldHVybiFyJiZpJiYoZz1pKSxpfHwhciYmZ30sTz1mdW5jdGlvbih0LGUpe2lmKFModCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZT9lOnt9O3JldHVybiBuLmRhdGU9dCxuLmFyZ3M9YXJndW1lbnRzLG5ldyBfKG4pfSxiPXY7Yi5sPXcsYi5pPVMsYi53PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCx7bG9jYWxlOmUuJEwsdXRjOmUuJHUseDplLiR4LCRvZmZzZXQ6ZS4kb2Zmc2V0fSl9O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTSh0KXt0aGlzLiRMPXcodC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZSh0KSx0aGlzLiR4PXRoaXMuJHh8fHQueHx8e30sdGhpc1twXT0hMH12YXIgbT1NLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbih0KXt0aGlzLiRkPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZSxuPXQudXRjO2lmKG51bGw9PT1lKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKGIudShlKSlyZXR1cm4gbmV3IERhdGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhL1okL2kudGVzdChlKSl7dmFyIHI9ZS5tYXRjaCgkKTtpZihyKXt2YXIgaT1yWzJdLTF8fDAscz0ocls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBuP25ldyBEYXRlKERhdGUuVVRDKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpKTpuZXcgRGF0ZShyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKGUpfSh0KSx0aGlzLmluaXQoKX0sbS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0TW9udGgoKSx0aGlzLiREPXQuZ2V0RGF0ZSgpLHRoaXMuJFc9dC5nZXREYXkoKSx0aGlzLiRIPXQuZ2V0SG91cnMoKSx0aGlzLiRtPXQuZ2V0TWludXRlcygpLHRoaXMuJHM9dC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRNaWxsaXNlY29uZHMoKX0sbS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sbS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1sKX0sbS5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PKHQpO3JldHVybiB0aGlzLnN0YXJ0T2YoZSk8PW4mJm48PXRoaXMuZW5kT2YoZSl9LG0uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQpPHRoaXMuc3RhcnRPZihlKX0sbS5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVuZE9mKGUpPE8odCl9LG0uJGc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBiLnUodCk/dGhpc1tlXTp0aGlzLnNldChuLHQpfSxtLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj0hIWIudShlKXx8ZSxmPWIucCh0KSxsPWZ1bmN0aW9uKHQsZSl7dmFyIGk9Yi53KG4uJHU/RGF0ZS5VVEMobi4keSxlLHQpOm5ldyBEYXRlKG4uJHksZSx0KSxuKTtyZXR1cm4gcj9pOmkuZW5kT2YoYSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi53KG4udG9EYXRlKClbdF0uYXBwbHkobi50b0RhdGUoXCJzXCIpLChyP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoZSkpLG4pfSx5PXRoaXMuJFcsTT10aGlzLiRNLG09dGhpcy4kRCx2PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSBoOnJldHVybiByP2woMSwwKTpsKDMxLDExKTtjYXNlIGM6cmV0dXJuIHI/bCgxLE0pOmwoMCxNKzEpO2Nhc2Ugbzp2YXIgZz10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsRD0oeTxnP3krNzp5KS1nO3JldHVybiBsKHI/bS1EOm0rKDYtRCksTSk7Y2FzZSBhOmNhc2UgZDpyZXR1cm4gJCh2K1wiSG91cnNcIiwwKTtjYXNlIHU6cmV0dXJuICQoditcIk1pbnV0ZXNcIiwxKTtjYXNlIHM6cmV0dXJuICQoditcIlNlY29uZHNcIiwyKTtjYXNlIGk6cmV0dXJuICQoditcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LG0uZW5kT2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhcnRPZih0LCExKX0sbS4kc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1iLnAodCksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksbD0obj17fSxuW2FdPWYrXCJEYXRlXCIsbltkXT1mK1wiRGF0ZVwiLG5bY109ZitcIk1vbnRoXCIsbltoXT1mK1wiRnVsbFllYXJcIixuW3VdPWYrXCJIb3Vyc1wiLG5bc109ZitcIk1pbnV0ZXNcIixuW2ldPWYrXCJTZWNvbmRzXCIsbltyXT1mK1wiTWlsbGlzZWNvbmRzXCIsbilbb10sJD1vPT09YT90aGlzLiREKyhlLXRoaXMuJFcpOmU7aWYobz09PWN8fG89PT1oKXt2YXIgeT10aGlzLmNsb25lKCkuc2V0KGQsMSk7eS4kZFtsXSgkKSx5LmluaXQoKSx0aGlzLiRkPXkuc2V0KGQsTWF0aC5taW4odGhpcy4kRCx5LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGwmJnRoaXMuJGRbbF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LG0uc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsZSl9LG0uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2IucCh0KV0oKX0sbS5hZGQ9ZnVuY3Rpb24ocixmKXt2YXIgZCxsPXRoaXM7cj1OdW1iZXIocik7dmFyICQ9Yi5wKGYpLHk9ZnVuY3Rpb24odCl7dmFyIGU9TyhsKTtyZXR1cm4gYi53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKHQqcikpLGwpfTtpZigkPT09YylyZXR1cm4gdGhpcy5zZXQoYyx0aGlzLiRNK3IpO2lmKCQ9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJHkrcik7aWYoJD09PWEpcmV0dXJuIHkoMSk7aWYoJD09PW8pcmV0dXJuIHkoNyk7dmFyIE09KGQ9e30sZFtzXT1lLGRbdV09bixkW2ldPXQsZClbJF18fDEsbT10aGlzLiRkLmdldFRpbWUoKStyKk07cmV0dXJuIGIudyhtLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkKC0xKnQsZSl9LG0uZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uaW52YWxpZERhdGV8fGw7dmFyIHI9dHx8XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGk9Yi56KHRoaXMpLHM9dGhpcy4kSCx1PXRoaXMuJG0sYT10aGlzLiRNLG89bi53ZWVrZGF5cyxjPW4ubW9udGhzLGY9bi5tZXJpZGllbSxoPWZ1bmN0aW9uKHQsbixpLHMpe3JldHVybiB0JiYodFtuXXx8dChlLHIpKXx8aVtuXS5zbGljZSgwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBiLnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9Znx8ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gbj9yLnRvTG93ZXJDYXNlKCk6cn07cmV0dXJuIHIucmVwbGFjZSh5LChmdW5jdGlvbih0LHIpe3JldHVybiByfHxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKGUuJHkpLnNsaWNlKC0yKTtjYXNlXCJZWVlZXCI6cmV0dXJuIGIucyhlLiR5LDQsXCIwXCIpO2Nhc2VcIk1cIjpyZXR1cm4gYSsxO2Nhc2VcIk1NXCI6cmV0dXJuIGIucyhhKzEsMixcIjBcIik7Y2FzZVwiTU1NXCI6cmV0dXJuIGgobi5tb250aHNTaG9ydCxhLGMsMyk7Y2FzZVwiTU1NTVwiOnJldHVybiBoKGMsYSk7Y2FzZVwiRFwiOnJldHVybiBlLiREO2Nhc2VcIkREXCI6cmV0dXJuIGIucyhlLiRELDIsXCIwXCIpO2Nhc2VcImRcIjpyZXR1cm4gU3RyaW5nKGUuJFcpO2Nhc2VcImRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c01pbixlLiRXLG8sMik7Y2FzZVwiZGRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c1Nob3J0LGUuJFcsbywzKTtjYXNlXCJkZGRkXCI6cmV0dXJuIG9bZS4kV107Y2FzZVwiSFwiOnJldHVybiBTdHJpbmcocyk7Y2FzZVwiSEhcIjpyZXR1cm4gYi5zKHMsMixcIjBcIik7Y2FzZVwiaFwiOnJldHVybiBkKDEpO2Nhc2VcImhoXCI6cmV0dXJuIGQoMik7Y2FzZVwiYVwiOnJldHVybiAkKHMsdSwhMCk7Y2FzZVwiQVwiOnJldHVybiAkKHMsdSwhMSk7Y2FzZVwibVwiOnJldHVybiBTdHJpbmcodSk7Y2FzZVwibW1cIjpyZXR1cm4gYi5zKHUsMixcIjBcIik7Y2FzZVwic1wiOnJldHVybiBTdHJpbmcoZS4kcyk7Y2FzZVwic3NcIjpyZXR1cm4gYi5zKGUuJHMsMixcIjBcIik7Y2FzZVwiU1NTXCI6cmV0dXJuIGIucyhlLiRtcywzLFwiMFwiKTtjYXNlXCJaXCI6cmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfHxpLnJlcGxhY2UoXCI6XCIsXCJcIil9KSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihyLGQsbCl7dmFyICQseT10aGlzLE09Yi5wKGQpLG09TyhyKSx2PShtLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsZz10aGlzLW0sRD1mdW5jdGlvbigpe3JldHVybiBiLm0oeSxtKX07c3dpdGNoKE0pe2Nhc2UgaDokPUQoKS8xMjticmVhaztjYXNlIGM6JD1EKCk7YnJlYWs7Y2FzZSBmOiQ9RCgpLzM7YnJlYWs7Y2FzZSBvOiQ9KGctdikvNjA0OGU1O2JyZWFrO2Nhc2UgYTokPShnLXYpLzg2NGU1O2JyZWFrO2Nhc2UgdTokPWcvbjticmVhaztjYXNlIHM6JD1nL2U7YnJlYWs7Y2FzZSBpOiQ9Zy90O2JyZWFrO2RlZmF1bHQ6JD1nfXJldHVybiBsPyQ6Yi5hKCQpfSxtLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoYykuJER9LG0uJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBEW3RoaXMuJExdfSxtLmxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiRMO3ZhciBuPXRoaXMuY2xvbmUoKSxyPXcodCxlLCEwKTtyZXR1cm4gciYmKG4uJEw9ciksbn0sbS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLncodGhpcy4kZCx0aGlzKX0sbS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxtLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sbS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxNfSgpLGs9Xy5wcm90b3R5cGU7cmV0dXJuIE8ucHJvdG90eXBlPWssW1tcIiRtc1wiLHJdLFtcIiRzXCIsaV0sW1wiJG1cIixzXSxbXCIkSFwiLHVdLFtcIiRXXCIsYV0sW1wiJE1cIixjXSxbXCIkeVwiLGhdLFtcIiREXCIsZF1dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tbdFsxXV09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGcoZSx0WzBdLHRbMV0pfX0pKSxPLmV4dGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LiRpfHwodChlLF8sTyksdC4kaT0hMCksT30sTy5sb2NhbGU9dyxPLmlzRGF5anM9UyxPLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIE8oMWUzKnQpfSxPLmVuPURbZ10sTy5Mcz1ELE8ucD17fSxPfSkpOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2FyaXR5KG4sIGZuKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gIHN3aXRjaCAobikge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhMCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhMCwgYTEpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYTAsIGExLCBhMikgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMykgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDU6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgY2FzZSA2OiByZXR1cm4gZnVuY3Rpb24oYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDc6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDg6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgY2FzZSA5OiByZXR1cm4gZnVuY3Rpb24oYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDEwOiByZXR1cm4gZnVuY3Rpb24oYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTkpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4nKTtcbiAgfVxufTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCJ2YXIgY3JlYXRlV3JhcCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVdyYXAnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9DVVJSWV9GTEFHID0gODtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFyZ3VtZW50cyBvZiBgZnVuY2AgYW5kIGVpdGhlciBpbnZva2VzXG4gKiBgZnVuY2AgcmV0dXJuaW5nIGl0cyByZXN1bHQsIGlmIGF0IGxlYXN0IGBhcml0eWAgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlXG4gKiBiZWVuIHByb3ZpZGVkLCBvciByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSByZW1haW5pbmcgYGZ1bmNgXG4gKiBhcmd1bWVudHMsIGFuZCBzbyBvbi4gVGhlIGFyaXR5IG9mIGBmdW5jYCBtYXkgYmUgc3BlY2lmaWVkIGlmIGBmdW5jLmxlbmd0aGBcbiAqIGlzIG5vdCBzdWZmaWNpZW50LlxuICpcbiAqIFRoZSBgXy5jdXJyeS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAqIH07XG4gKlxuICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5KGFiYyk7XG4gKlxuICogY3VycmllZCgxKSgyKSgzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIGN1cnJpZWQoMSwgMikoMyk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiBjdXJyaWVkKDEsIDIsIDMpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqL1xuZnVuY3Rpb24gY3VycnkoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9DVVJSWV9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkpO1xuICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeS5wbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxuY3VycnkucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBjdXJyeTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2hhcyhwcm9wLCBvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9fY3VycnkxJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vX2N1cnJ5MicpO1xudmFyIF9pc1BsYWNlaG9sZGVyID0gcmVxdWlyZSgnLi9faXNQbGFjZWhvbGRlcicpO1xuXG5cbi8qKlxuICogT3B0aW1pemVkIGludGVybmFsIHRocmVlLWFyaXR5IGN1cnJ5IGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgY3VycmllZCBmdW5jdGlvbi5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY3VycnkzKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmMyhhLCBiLCBjKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBmMztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIF9pc1BsYWNlaG9sZGVyKGEpID8gZjNcbiAgICAgICAgICAgICA6IF9jdXJyeTIoZnVuY3Rpb24oX2IsIF9jKSB7IHJldHVybiBmbihhLCBfYiwgX2MpOyB9KTtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIF9pc1BsYWNlaG9sZGVyKGEpICYmIF9pc1BsYWNlaG9sZGVyKGIpID8gZjNcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGEpID8gX2N1cnJ5MihmdW5jdGlvbihfYSwgX2MpIHsgcmV0dXJuIGZuKF9hLCBiLCBfYyk7IH0pXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihiKSA/IF9jdXJyeTIoZnVuY3Rpb24oX2IsIF9jKSB7IHJldHVybiBmbihhLCBfYiwgX2MpOyB9KVxuICAgICAgICAgICAgIDogX2N1cnJ5MShmdW5jdGlvbihfYykgeyByZXR1cm4gZm4oYSwgYiwgX2MpOyB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBfaXNQbGFjZWhvbGRlcihhKSAmJiBfaXNQbGFjZWhvbGRlcihiKSAmJiBfaXNQbGFjZWhvbGRlcihjKSA/IGYzXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihhKSAmJiBfaXNQbGFjZWhvbGRlcihiKSA/IF9jdXJyeTIoZnVuY3Rpb24oX2EsIF9iKSB7IHJldHVybiBmbihfYSwgX2IsIGMpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYSkgJiYgX2lzUGxhY2Vob2xkZXIoYykgPyBfY3VycnkyKGZ1bmN0aW9uKF9hLCBfYykgeyByZXR1cm4gZm4oX2EsIGIsIF9jKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGIpICYmIF9pc1BsYWNlaG9sZGVyKGMpID8gX2N1cnJ5MihmdW5jdGlvbihfYiwgX2MpIHsgcmV0dXJuIGZuKGEsIF9iLCBfYyk7IH0pXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihhKSA/IF9jdXJyeTEoZnVuY3Rpb24oX2EpIHsgcmV0dXJuIGZuKF9hLCBiLCBjKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGIpID8gX2N1cnJ5MShmdW5jdGlvbihfYikgeyByZXR1cm4gZm4oYSwgX2IsIGMpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYykgPyBfY3VycnkxKGZ1bmN0aW9uKF9jKSB7IHJldHVybiBmbihhLCBiLCBfYyk7IH0pXG4gICAgICAgICAgICAgOiBmbihhLCBiLCBjKTtcbiAgICB9XG4gIH07XG59O1xuIiwidmFyIF9hcml0eSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2FyaXR5Jyk7XG52YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfY3VycnlOID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnlOJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgY3VycmllZCBlcXVpdmFsZW50IG9mIHRoZSBwcm92aWRlZCBmdW5jdGlvbiwgd2l0aCB0aGUgc3BlY2lmaWVkXG4gKiBhcml0eS4gVGhlIGN1cnJpZWQgZnVuY3Rpb24gaGFzIHR3byB1bnVzdWFsIGNhcGFiaWxpdGllcy4gRmlyc3QsIGl0c1xuICogYXJndW1lbnRzIG5lZWRuJ3QgYmUgcHJvdmlkZWQgb25lIGF0IGEgdGltZS4gSWYgYGdgIGlzIGBSLmN1cnJ5TigzLCBmKWAsIHRoZVxuICogZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OlxuICpcbiAqICAgLSBgZygxKSgyKSgzKWBcbiAqICAgLSBgZygxKSgyLCAzKWBcbiAqICAgLSBgZygxLCAyKSgzKWBcbiAqICAgLSBgZygxLCAyLCAzKWBcbiAqXG4gKiBTZWNvbmRseSwgdGhlIHNwZWNpYWwgcGxhY2Vob2xkZXIgdmFsdWUgYFIuX19gIG1heSBiZSB1c2VkIHRvIHNwZWNpZnlcbiAqIFwiZ2Fwc1wiLCBhbGxvd2luZyBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMsXG4gKiByZWdhcmRsZXNzIG9mIHRoZWlyIHBvc2l0aW9ucy4gSWYgYGdgIGlzIGFzIGFib3ZlIGFuZCBgX2AgaXMgYFIuX19gLCB0aGVcbiAqIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDpcbiAqXG4gKiAgIC0gYGcoMSwgMiwgMylgXG4gKiAgIC0gYGcoXywgMiwgMykoMSlgXG4gKiAgIC0gYGcoXywgXywgMykoMSkoMilgXG4gKiAgIC0gYGcoXywgXywgMykoMSwgMilgXG4gKiAgIC0gYGcoXywgMikoMSkoMylgXG4gKiAgIC0gYGcoXywgMikoMSwgMylgXG4gKiAgIC0gYGcoXywgMikoXywgMykoMSlgXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgTnVtYmVyIC0+ICgqIC0+IGEpIC0+ICgqIC0+IGEpXG4gKiBAcGFyYW0ge051bWJlcn0gbGVuZ3RoIFRoZSBhcml0eSBmb3IgdGhlIHJldHVybmVkIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbmV3LCBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHNlZSBSLmN1cnJ5XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIHN1bUFyZ3MgPSAoLi4uYXJncykgPT4gUi5zdW0oYXJncyk7XG4gKlxuICogICAgICB2YXIgY3VycmllZEFkZEZvdXJOdW1iZXJzID0gUi5jdXJyeU4oNCwgc3VtQXJncyk7XG4gKiAgICAgIHZhciBmID0gY3VycmllZEFkZEZvdXJOdW1iZXJzKDEsIDIpO1xuICogICAgICB2YXIgZyA9IGYoMyk7XG4gKiAgICAgIGcoNCk7IC8vPT4gMTBcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGN1cnJ5TihsZW5ndGgsIGZuKSB7XG4gIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gX2N1cnJ5MShmbik7XG4gIH1cbiAgcmV0dXJuIF9hcml0eShsZW5ndGgsIF9jdXJyeU4obGVuZ3RoLCBbXSwgZm4pKTtcbn0pO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfaXNQbGFjZWhvbGRlcihhKSB7XG4gIHJldHVybiBhICE9IG51bGwgJiZcbiAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgYVsnQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyJ10gPT09IHRydWU7XG59O1xuIiwidmFyIF94d3JhcCA9IHJlcXVpcmUoJy4vX3h3cmFwJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2JpbmQnKTtcbnZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2lzQXJyYXlMaWtlJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIF9hcnJheVJlZHVjZSh4ZiwgYWNjLCBsaXN0KSB7XG4gICAgdmFyIGlkeCA9IDA7XG4gICAgdmFyIGxlbiA9IGxpc3QubGVuZ3RoO1xuICAgIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICAgIGFjYyA9IHhmWydAQHRyYW5zZHVjZXIvc3RlcCddKGFjYywgbGlzdFtpZHhdKTtcbiAgICAgIGlmIChhY2MgJiYgYWNjWydAQHRyYW5zZHVjZXIvcmVkdWNlZCddKSB7XG4gICAgICAgIGFjYyA9IGFjY1snQEB0cmFuc2R1Y2VyL3ZhbHVlJ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWR4ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiB4ZlsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddKGFjYyk7XG4gIH1cblxuICBmdW5jdGlvbiBfaXRlcmFibGVSZWR1Y2UoeGYsIGFjYywgaXRlcikge1xuICAgIHZhciBzdGVwID0gaXRlci5uZXh0KCk7XG4gICAgd2hpbGUgKCFzdGVwLmRvbmUpIHtcbiAgICAgIGFjYyA9IHhmWydAQHRyYW5zZHVjZXIvc3RlcCddKGFjYywgc3RlcC52YWx1ZSk7XG4gICAgICBpZiAoYWNjICYmIGFjY1snQEB0cmFuc2R1Y2VyL3JlZHVjZWQnXSkge1xuICAgICAgICBhY2MgPSBhY2NbJ0BAdHJhbnNkdWNlci92YWx1ZSddO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0ZXAgPSBpdGVyLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHhmWydAQHRyYW5zZHVjZXIvcmVzdWx0J10oYWNjKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9tZXRob2RSZWR1Y2UoeGYsIGFjYywgb2JqKSB7XG4gICAgcmV0dXJuIHhmWydAQHRyYW5zZHVjZXIvcmVzdWx0J10ob2JqLnJlZHVjZShiaW5kKHhmWydAQHRyYW5zZHVjZXIvc3RlcCddLCB4ZiksIGFjYykpO1xuICB9XG5cbiAgdmFyIHN5bUl0ZXJhdG9yID0gKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnKSA/IFN5bWJvbC5pdGVyYXRvciA6ICdAQGl0ZXJhdG9yJztcbiAgcmV0dXJuIGZ1bmN0aW9uIF9yZWR1Y2UoZm4sIGFjYywgbGlzdCkge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZuID0gX3h3cmFwKGZuKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKGxpc3QpKSB7XG4gICAgICByZXR1cm4gX2FycmF5UmVkdWNlKGZuLCBhY2MsIGxpc3QpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGxpc3QucmVkdWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX21ldGhvZFJlZHVjZShmbiwgYWNjLCBsaXN0KTtcbiAgICB9XG4gICAgaWYgKGxpc3Rbc3ltSXRlcmF0b3JdICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBfaXRlcmFibGVSZWR1Y2UoZm4sIGFjYywgbGlzdFtzeW1JdGVyYXRvcl0oKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbGlzdC5uZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX2l0ZXJhYmxlUmVkdWNlKGZuLCBhY2MsIGxpc3QpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2U6IGxpc3QgbXVzdCBiZSBhcnJheSBvciBpdGVyYWJsZScpO1xuICB9O1xufSgpKTtcbiIsIi8qKlxuICogVGVzdHMgd2hldGhlciBvciBub3QgYW4gb2JqZWN0IGlzIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgb2JqZWN0IHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYHZhbGAgaXMgYW4gYXJyYXksIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIF9pc0FycmF5KFtdKTsgLy89PiB0cnVlXG4gKiAgICAgIF9pc0FycmF5KG51bGwpOyAvLz0+IGZhbHNlXG4gKiAgICAgIF9pc0FycmF5KHt9KTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gX2lzQXJyYXkodmFsKSB7XG4gIHJldHVybiAodmFsICE9IG51bGwgJiZcbiAgICAgICAgICB2YWwubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJyk7XG59O1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfZGlzcGF0Y2hhYmxlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fZGlzcGF0Y2hhYmxlJyk7XG52YXIgX21hcCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX21hcCcpO1xudmFyIF9yZWR1Y2UgPSByZXF1aXJlKCcuL2ludGVybmFsL19yZWR1Y2UnKTtcbnZhciBfeG1hcCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3htYXAnKTtcbnZhciBjdXJyeU4gPSByZXF1aXJlKCcuL2N1cnJ5TicpO1xudmFyIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuXG4vKipcbiAqIFRha2VzIGEgZnVuY3Rpb24gYW5kXG4gKiBhIFtmdW5jdG9yXShodHRwczovL2dpdGh1Yi5jb20vZmFudGFzeWxhbmQvZmFudGFzeS1sYW5kI2Z1bmN0b3IpLFxuICogYXBwbGllcyB0aGUgZnVuY3Rpb24gdG8gZWFjaCBvZiB0aGUgZnVuY3RvcidzIHZhbHVlcywgYW5kIHJldHVybnNcbiAqIGEgZnVuY3RvciBvZiB0aGUgc2FtZSBzaGFwZS5cbiAqXG4gKiBSYW1kYSBwcm92aWRlcyBzdWl0YWJsZSBgbWFwYCBpbXBsZW1lbnRhdGlvbnMgZm9yIGBBcnJheWAgYW5kIGBPYmplY3RgLFxuICogc28gdGhpcyBmdW5jdGlvbiBtYXkgYmUgYXBwbGllZCB0byBgWzEsIDIsIDNdYCBvciBge3g6IDEsIHk6IDIsIHo6IDN9YC5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgbWFwYCBtZXRob2Qgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBBY3RzIGFzIGEgdHJhbnNkdWNlciBpZiBhIHRyYW5zZm9ybWVyIGlzIGdpdmVuIGluIGxpc3QgcG9zaXRpb24uXG4gKlxuICogQWxzbyB0cmVhdHMgZnVuY3Rpb25zIGFzIGZ1bmN0b3JzIGFuZCB3aWxsIGNvbXBvc2UgdGhlbSB0b2dldGhlci5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIEZ1bmN0b3IgZiA9PiAoYSAtPiBiKSAtPiBmIGEgLT4gZiBiXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGV2ZXJ5IGVsZW1lbnQgb2YgdGhlIGlucHV0IGBsaXN0YC5cbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgVGhlIGxpc3QgdG8gYmUgaXRlcmF0ZWQgb3Zlci5cbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgbmV3IGxpc3QuXG4gKiBAc2VlIFIudHJhbnNkdWNlLCBSLmFkZEluZGV4XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGRvdWJsZSA9IHggPT4geCAqIDI7XG4gKlxuICogICAgICBSLm1hcChkb3VibGUsIFsxLCAyLCAzXSk7IC8vPT4gWzIsIDQsIDZdXG4gKlxuICogICAgICBSLm1hcChkb3VibGUsIHt4OiAxLCB5OiAyLCB6OiAzfSk7IC8vPT4ge3g6IDIsIHk6IDQsIHo6IDZ9XG4gKiBAc3ltYiBSLm1hcChmLCBbYSwgYl0pID0gW2YoYSksIGYoYildXG4gKiBAc3ltYiBSLm1hcChmLCB7IHg6IGEsIHk6IGIgfSkgPSB7IHg6IGYoYSksIHk6IGYoYikgfVxuICogQHN5bWIgUi5tYXAoZiwgZnVuY3Rvcl9vKSA9IGZ1bmN0b3Jfby5tYXAoZilcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKF9kaXNwYXRjaGFibGUoWydtYXAnXSwgX3htYXAsIGZ1bmN0aW9uIG1hcChmbiwgZnVuY3Rvcikge1xuICBzd2l0Y2ggKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmdW5jdG9yKSkge1xuICAgIGNhc2UgJ1tvYmplY3QgRnVuY3Rpb25dJzpcbiAgICAgIHJldHVybiBjdXJyeU4oZnVuY3Rvci5sZW5ndGgsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBmdW5jdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgICAgfSk7XG4gICAgY2FzZSAnW29iamVjdCBPYmplY3RdJzpcbiAgICAgIHJldHVybiBfcmVkdWNlKGZ1bmN0aW9uKGFjYywga2V5KSB7XG4gICAgICAgIGFjY1trZXldID0gZm4oZnVuY3RvcltrZXldKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9LCBrZXlzKGZ1bmN0b3IpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIF9tYXAoZm4sIGZ1bmN0b3IpO1xuICB9XG59KSk7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdG9yO1xuIiwiLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlaXIgaW5kZXhlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXBsYWNlSG9sZGVycztcbiIsIi8qKlxuICogTGlzdCBvZiBVUyBEcml2ZXIgbGljZW5zZXMgcmVnZXhcbiAqIEFsbCBjcmVkaXQgZm9yIGNvbXBpbGluZyB0aGlzIGxpc3QgZ29lcyB0byBnaXRodWIgdXNlciBtaWtlbWZsZW1pbmdcbiAqIFlvdSBtYXkgc2VlIGhpcyBvcmlnaW5hbCBDTEkgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSBoZXJlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pa2VtZmxlbWluZy9zdGF0ZS1kcml2ZXJzLWxpY2Vuc2UtcmVnZXhcbiAqIEFuZCB0byB0aGUgb3JpZ2luYWwgY29tcGlsZXIgb2YgYWxsIHRoZSByZWdleCwgZ2l0aHViIHVzZXIgYWRhbWJ1bGxtZXJcbiAqIFlvdSBtYXkgc2VlIGhpcyBvcmlnaW5hbCBhcHByb2FjaCB0byB0aGlzIG1vZHVsZSAoaW4gUEhQKSBoZXJlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FkYW1idWxsbWVyL1VTRExSZWdleFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBTDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3LDh9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJOTk5OTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs2LDd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gIF0sXG4gIEFLOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezd9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJOTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDdcIixcbiAgICB9LFxuICBdLFxuICBBWjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgQVI6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk4gTWluTGVuZ3RoID0gOSBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgXSxcbiAgQ0E6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIENPOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezMsNn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OIG1pbiBsZW5ndGggNCBtYXggN1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXsxLDV9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQUFOTk5OTiBtaW4gbGVuZ3RoIDMgbWF4IDdcIixcbiAgICB9LFxuICBdLFxuICBDVDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIERFOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezEsN30kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxLTcgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIERDOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17N30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBGTDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTJ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDEyIG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezExfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTk5OTiBNaW5MZW5ndGggPSAxMiBNYXhMZW5ndGggPSAxMlwiLFxuICAgIH0sXG4gIF0sXG4gIEdBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Nyw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEdVOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezEwfSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OTiBNaW5MZW5ndGggPSAxMCBNYXhMZW5ndGggPSAxMFwiLFxuICAgIH0sXG4gIF0sXG4gIEhJOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElEOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs2fVtBLVpdezF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTGljZW5zZSBtdXN0IGJlIDIgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnMgZm9sbG93ZWQgYnkgMSBsZXR0ZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElMOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTEgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElOOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OSwxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOS0xMCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgSUE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezN9W0EtWl17Mn1bMC05XXs0fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAzIG51bWJlcnMgZm9sbG93ZWQgYnkgMiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDQgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEtTOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEtZOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDgtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBMQTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezEsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS05IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBNRTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17N31bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3IG51bWJlcnMgZm9sbG93ZWQgYnkgMSBsZXR0ZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDggbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1EOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MSwyfVswLTldezExLDEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAxIG9yIDIgbGV0dGVycyBmb2xsb3dlZCBieSAxMSBvciAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTUE6IFtcbiAgICB7XG4gICAgICByZWdleDogLyheW0EtWl17MX1bMC05XXs4fSR8XltBLVpdezJ9WzAtOV17N30kKS9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDggbnVtYmVycyBvciAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNyBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTUk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTU46IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTVM6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICAvLyBUT0RPOiBUZXN0IHJlbWFpbmluZyBMaWNlbnNlc1xuICBNTzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17NSw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA1LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs2fVtSXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDYgbnVtYmVycyBmb2xsb3dlZCBieSBcIlJcIicsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fVtBLVpdezF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVycyBmb2xsb3dlZCBieSAxIGxldHRlclwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXszfVtBLVpdezF9WzAtOV17Nn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMyBudW1iZXJzICsgMSBhbGZhbnVtZXJpYyArIDYgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7NSw2fVtBLVpdJC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQU5OTk5OQSBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDcgT1IgQU5OTk5OQSBNaW5MZW5ndGggPSA4IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICBdLFxuICBNVDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezEzfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxMyBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkKFxcZHxbQS1aXSlcXGR7Mn1bQS1aXXszfVxcZCQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOWE5OQUFBTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlthLXpdezN9XFxkezEwfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRocmVlIGxldHRlcnMgYW5kIDEwIGRpZ2l0c1wiLFxuICAgIH0sXG4gIF0sXG4gIE5FOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7Myw4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA0IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBOVjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezksMTB9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDktMTAgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17MTJ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEyIG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIE5IOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC8oXlswLTldezJ9W0EtWl17M31bMC05XXs1fSR8XltBLVpdezN9WzAtOV17OH0kKS9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTGljZW5zZSBtdXN0IGJlIDIgbnVtYmVycyBmb2xsb3dlZCBieSAzIGxldHRlcnMgZm9sbG93ZWQgYnkgNSBudW1iZXJzIE9SIDMgbGV0dGVycyBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBOSjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTR9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDE0IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBOTTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezgsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOC05IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBOWTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17N30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgNyBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezE3LDE4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxNy0xOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDgtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTkM6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxLDEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxLTEyIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBORDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezN9WzAtOV17Nn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMyBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDYgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgT0g6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsyfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDIgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBPSzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7Nyw5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIE9SOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17NSw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA1LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7N30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTiBNaW5MZW5ndGggPSA4IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVowLTldezYsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJYWFhYWFhYWFggTWluTGVuZ3RoID0gNiBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgXSxcbiAgUEE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBSSTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezcsOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBvciA4IG51bWJlcnMgd2l0aG91dCBsZXR0ZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDYgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFNDOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17NiwxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNi0xMSBudW1iZXJzIChuZXc6IDksIG9sZCBmb3JtYXQ6IDYtMTEpXCIsXG4gICAgfSxcbiAgXSxcbiAgU0Q6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs2LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDYtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVE46IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDctOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVFg6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7NSw4fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk4gTWluTGVuZ3RoID0gNSBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgXSxcbiAgVVQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs0LDEwfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA0LTEwIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBWVDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezcsfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3LTggbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17N31bQV0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogJ0xpY2Vuc2UgbXVzdCBiZSA3IG51bWJlcnMgZm9sbG93ZWQgYnkgXCJBXCInLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezd9W0EtWl0/JC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTk5OTk5OTkEgTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4IE9SIE5OTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgVkE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDggbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBWSTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxMH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTAgTWF4TGVuZ3RoID0gMTBcIixcbiAgICB9LFxuICBdLFxuICBXQTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXig/PS57MTJ9JClbQS1aXXsxLDd9W0EtWjAtOVxcXFwqXXs0LDExfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnTGljZW5zZSBtdXN0IGJlIDEtNyBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBudW1iZXJzLCBvciBcIipcIiBmb3IgYSB0b3RhbCBvZiAxMiBjaGFyYWN0ZXJzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVowLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlhYWFhYWFhYWFhYWCBNaW5MZW5ndGggPSAxMiBNYXhMZW5ndGggPSAxMlwiLFxuICAgIH0sXG4gIF0sXG4gIFdWOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17N30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsyfVswLTldezV9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDIgbGV0dGVycyBmb2xsb3dlZCBieSA1IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezEsMn1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxLTIgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDdcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9XFxkezUsNn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBQU5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gNyBPUiBBQU5OTk5OTiBNaW5MZW5ndGggPSA4IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZFtBLVpdXFxkezV9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTkFOTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDdcIixcbiAgICB9LFxuICBdLFxuICBXSTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTN9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDEzIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBXWTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgUFI6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7Nyw5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG59O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBfaGFzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faGFzJyk7XG52YXIgX2lzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNBcmd1bWVudHMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGFsbCB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBvZlxuICogdGhlIHN1cHBsaWVkIG9iamVjdC5cbiAqIE5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIG91dHB1dCBhcnJheSBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBjb25zaXN0ZW50XG4gKiBhY3Jvc3MgZGlmZmVyZW50IEpTIHBsYXRmb3Jtcy5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBzaWcge2s6IHZ9IC0+IFtrXVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGV4dHJhY3QgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgdGhlIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIua2V5cyh7YTogMSwgYjogMiwgYzogM30pOyAvLz0+IFsnYScsICdiJywgJ2MnXVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHtcbiAgLy8gY292ZXIgSUUgPCA5IGtleXMgaXNzdWVzXG4gIHZhciBoYXNFbnVtQnVnID0gISh7dG9TdHJpbmc6IG51bGx9KS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsnY29uc3RydWN0b3InLCAndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcbiAgLy8gU2FmYXJpIGJ1Z1xuICB2YXIgaGFzQXJnc0VudW1CdWcgPSAoZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIHJldHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoJ2xlbmd0aCcpO1xuICB9KCkpO1xuXG4gIHZhciBjb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIGl0ZW0pIHtcbiAgICB2YXIgaWR4ID0gMDtcbiAgICB3aGlsZSAoaWR4IDwgbGlzdC5sZW5ndGgpIHtcbiAgICAgIGlmIChsaXN0W2lkeF0gPT09IGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHJldHVybiB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgIWhhc0FyZ3NFbnVtQnVnID9cbiAgICBfY3VycnkxKGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gICAgICByZXR1cm4gT2JqZWN0KG9iaikgIT09IG9iaiA/IFtdIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICB9KSA6XG4gICAgX2N1cnJ5MShmdW5jdGlvbiBrZXlzKG9iaikge1xuICAgICAgaWYgKE9iamVjdChvYmopICE9PSBvYmopIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHByb3AsIG5JZHg7XG4gICAgICB2YXIga3MgPSBbXTtcbiAgICAgIHZhciBjaGVja0FyZ3NMZW5ndGggPSBoYXNBcmdzRW51bUJ1ZyAmJiBfaXNBcmd1bWVudHMob2JqKTtcbiAgICAgIGZvciAocHJvcCBpbiBvYmopIHtcbiAgICAgICAgaWYgKF9oYXMocHJvcCwgb2JqKSAmJiAoIWNoZWNrQXJnc0xlbmd0aCB8fCBwcm9wICE9PSAnbGVuZ3RoJykpIHtcbiAgICAgICAgICBrc1trcy5sZW5ndGhdID0gcHJvcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGhhc0VudW1CdWcpIHtcbiAgICAgICAgbklkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAobklkeCA+PSAwKSB7XG4gICAgICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tuSWR4XTtcbiAgICAgICAgICBpZiAoX2hhcyhwcm9wLCBvYmopICYmICFjb250YWlucyhrcywgcHJvcCkpIHtcbiAgICAgICAgICAgIGtzW2tzLmxlbmd0aF0gPSBwcm9wO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuSWR4IC09IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBrcztcbiAgICB9KTtcbn0oKSk7XG4iLCJ2YXIgX2N1cnJ5MyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MycpO1xudmFyIF9yZWR1Y2UgPSByZXF1aXJlKCcuL2ludGVybmFsL19yZWR1Y2UnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBzaW5nbGUgaXRlbSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbGlzdCwgc3VjY2Vzc2l2ZWx5IGNhbGxpbmdcbiAqIHRoZSBpdGVyYXRvciBmdW5jdGlvbiBhbmQgcGFzc2luZyBpdCBhbiBhY2N1bXVsYXRvciB2YWx1ZSBhbmQgdGhlIGN1cnJlbnRcbiAqIHZhbHVlIGZyb20gdGhlIGFycmF5LCBhbmQgdGhlbiBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIG5leHQgY2FsbC5cbiAqXG4gKiBUaGUgaXRlcmF0b3IgZnVuY3Rpb24gcmVjZWl2ZXMgdHdvIHZhbHVlczogKihhY2MsIHZhbHVlKSouIEl0IG1heSB1c2VcbiAqIGBSLnJlZHVjZWRgIHRvIHNob3J0Y3V0IHRoZSBpdGVyYXRpb24uXG4gKlxuICogVGhlIGFyZ3VtZW50cycgb3JkZXIgb2YgYHJlZHVjZVJpZ2h0YCdzIGl0ZXJhdG9yIGZ1bmN0aW9uIGlzICoodmFsdWUsIGFjYykqLlxuICpcbiAqIE5vdGU6IGBSLnJlZHVjZWAgZG9lcyBub3Qgc2tpcCBkZWxldGVkIG9yIHVuYXNzaWduZWQgaW5kaWNlcyAoc3BhcnNlXG4gKiBhcnJheXMpLCB1bmxpa2UgdGhlIG5hdGl2ZSBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kLiBGb3IgbW9yZSBkZXRhaWxzXG4gKiBvbiB0aGlzIGJlaGF2aW9yLCBzZWU6XG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9yZWR1Y2UjRGVzY3JpcHRpb25cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgcmVkdWNlYCBtZXRob2Qgb2YgdGhlIHRoaXJkIGFyZ3VtZW50LCBpZiBwcmVzZW50LlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExpc3RcbiAqIEBzaWcgKChhLCBiKSAtPiBhKSAtPiBhIC0+IFtiXSAtPiBhXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgaXRlcmF0b3IgZnVuY3Rpb24uIFJlY2VpdmVzIHR3byB2YWx1ZXMsIHRoZSBhY2N1bXVsYXRvciBhbmQgdGhlXG4gKiAgICAgICAgY3VycmVudCBlbGVtZW50IGZyb20gdGhlIGFycmF5LlxuICogQHBhcmFtIHsqfSBhY2MgVGhlIGFjY3VtdWxhdG9yIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgbGlzdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcmV0dXJuIHsqfSBUaGUgZmluYWwsIGFjY3VtdWxhdGVkIHZhbHVlLlxuICogQHNlZSBSLnJlZHVjZWQsIFIuYWRkSW5kZXgsIFIucmVkdWNlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnJlZHVjZShSLnN1YnRyYWN0LCAwLCBbMSwgMiwgMywgNF0pIC8vID0+ICgoKCgwIC0gMSkgLSAyKSAtIDMpIC0gNCkgPSAtMTBcbiAqICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAtMTBcbiAqICAgICAgICAgICAgICAgLyBcXCAgICAgICAgICAgICAgLyBcXFxuICogICAgICAgICAgICAgIC0gICA0ICAgICAgICAgICAtNiAgIDRcbiAqICAgICAgICAgICAgIC8gXFwgICAgICAgICAgICAgIC8gXFxcbiAqICAgICAgICAgICAgLSAgIDMgICA9PT4gICAgIC0zICAgM1xuICogICAgICAgICAgIC8gXFwgICAgICAgICAgICAgIC8gXFxcbiAqICAgICAgICAgIC0gICAyICAgICAgICAgICAtMSAgIDJcbiAqICAgICAgICAgLyBcXCAgICAgICAgICAgICAgLyBcXFxuICogICAgICAgIDAgICAxICAgICAgICAgICAgMCAgIDFcbiAqXG4gKiBAc3ltYiBSLnJlZHVjZShmLCBhLCBbYiwgYywgZF0pID0gZihmKGYoYSwgYiksIGMpLCBkKVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoX3JlZHVjZSk7XG4iLCJ2YXIgX2lzQXJyYXkgPSByZXF1aXJlKCcuL19pc0FycmF5Jyk7XG5cblxuLyoqXG4gKiBUaGlzIGNoZWNrcyB3aGV0aGVyIGEgZnVuY3Rpb24gaGFzIGEgW21ldGhvZG5hbWVdIGZ1bmN0aW9uLiBJZiBpdCBpc24ndCBhblxuICogYXJyYXkgaXQgd2lsbCBleGVjdXRlIHRoYXQgZnVuY3Rpb24gb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgcmFtZGFcbiAqIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiByYW1kYSBpbXBsZW10YXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RuYW1lIHByb3BlcnR5IHRvIGNoZWNrIGZvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICogQHJldHVybiB7T2JqZWN0fSBXaGF0ZXZlciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBtZXRob2QgaXMuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2NoZWNrRm9yTWV0aG9kKG1ldGhvZG5hbWUsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9XG4gICAgdmFyIG9iaiA9IGFyZ3VtZW50c1tsZW5ndGggLSAxXTtcbiAgICByZXR1cm4gKF9pc0FycmF5KG9iaikgfHwgdHlwZW9mIG9ialttZXRob2RuYW1lXSAhPT0gJ2Z1bmN0aW9uJykgP1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6XG4gICAgICBvYmpbbWV0aG9kbmFtZV0uYXBwbHkob2JqLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIGxlbmd0aCAtIDEpKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIElnbm9yZSAqLyB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbnZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19kaXJfXyA9IDE7XG4gIHRoaXMuX19maWx0ZXJlZF9fID0gZmFsc2U7XG4gIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIO1xuICB0aGlzLl9fdmlld3NfXyA9IFtdO1xufVxuXG4vLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExhenlXcmFwcGVyO1xuIiwiLyoqXG4gKiBUaGUgZnVuY3Rpb24gd2hvc2UgcHJvdG90eXBlIGNoYWluIHNlcXVlbmNlIHdyYXBwZXJzIGluaGVyaXQgZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBiYXNlTG9kYXNoKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VMb2Rhc2g7XG4iLCIvKipcbiAqIEdldHMgdGhlIGFyZ3VtZW50IHBsYWNlaG9sZGVyIHZhbHVlIGZvciBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldEhvbGRlcihmdW5jKSB7XG4gIHZhciBvYmplY3QgPSBmdW5jO1xuICByZXR1cm4gb2JqZWN0LnBsYWNlaG9sZGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEhvbGRlcjtcbiIsIihmdW5jdGlvbihmKSB7XG5cbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cyAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgZXhwb3J0cy5ub2RlVHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGYgKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICE9IG51bGwpIHtcbiAgICBkZWZpbmUgKFtdLCBmKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYmFzZTY0ID0gZiAoKTtcbiAgICB2YXIgZ2xvYmFsID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6ICQuZ2xvYmFsO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsLmJ0b2EgIT09ICdmdW5jdGlvbicpIGdsb2JhbC5idG9hID0gYmFzZTY0LmJ0b2E7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuYXRvYiAhPT0gJ2Z1bmN0aW9uJykgZ2xvYmFsLmF0b2IgPSBiYXNlNjQuYXRvYjtcbiAgfVxuXG59IChmdW5jdGlvbigpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcblxuICBmdW5jdGlvbiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIH1cbiAgSW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvciAoKTtcbiAgSW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cbiAgLy8gZW5jb2RlclxuICAvLyBbaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vOTk5MTY2XSBieSBbaHR0cHM6Ly9naXRodWIuY29tL25pZ25hZ11cbiAgZnVuY3Rpb24gYnRvYShpbnB1dCkge1xuICAgIHZhciBzdHIgPSBTdHJpbmcgKGlucHV0KTtcbiAgICBmb3IgKFxuICAgICAgLy8gaW5pdGlhbGl6ZSByZXN1bHQgYW5kIGNvdW50ZXJcbiAgICAgIHZhciBibG9jaywgY2hhckNvZGUsIGlkeCA9IDAsIG1hcCA9IGNoYXJzLCBvdXRwdXQgPSAnJztcbiAgICAgIC8vIGlmIHRoZSBuZXh0IHN0ciBpbmRleCBkb2VzIG5vdCBleGlzdDpcbiAgICAgIC8vICAgY2hhbmdlIHRoZSBtYXBwaW5nIHRhYmxlIHRvIFwiPVwiXG4gICAgICAvLyAgIGNoZWNrIGlmIGQgaGFzIG5vIGZyYWN0aW9uYWwgZGlnaXRzXG4gICAgICBzdHIuY2hhckF0IChpZHggfCAwKSB8fCAobWFwID0gJz0nLCBpZHggJSAxKTtcbiAgICAgIC8vIFwiOCAtIGlkeCAlIDEgKiA4XCIgZ2VuZXJhdGVzIHRoZSBzZXF1ZW5jZSAyLCA0LCA2LCA4XG4gICAgICBvdXRwdXQgKz0gbWFwLmNoYXJBdCAoNjMgJiBibG9jayA+PiA4IC0gaWR4ICUgMSAqIDgpXG4gICAgKSB7XG4gICAgICBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0IChpZHggKz0gMyAvIDQpO1xuICAgICAgaWYgKGNoYXJDb2RlID4gMHhGRikge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yIChcIididG9hJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlIExhdGluMSByYW5nZS5cIik7XG4gICAgICB9XG4gICAgICBibG9jayA9IGJsb2NrIDw8IDggfCBjaGFyQ29kZTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8vIGRlY29kZXJcbiAgLy8gW2h0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEwMjAzOTZdIGJ5IFtodHRwczovL2dpdGh1Yi5jb20vYXRrXVxuICBmdW5jdGlvbiBhdG9iKGlucHV0KSB7XG4gICAgdmFyIHN0ciA9IChTdHJpbmcgKGlucHV0KSkucmVwbGFjZSAoL1s9XSskLywgJycpOyAvLyAjMzE6IEV4dGVuZFNjcmlwdCBiYWQgcGFyc2Ugb2YgLz1cbiAgICBpZiAoc3RyLmxlbmd0aCAlIDQgPT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgKFwiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC5cIik7XG4gICAgfVxuICAgIGZvciAoXG4gICAgICAvLyBpbml0aWFsaXplIHJlc3VsdCBhbmQgY291bnRlcnNcbiAgICAgIHZhciBiYyA9IDAsIGJzLCBidWZmZXIsIGlkeCA9IDAsIG91dHB1dCA9ICcnO1xuICAgICAgLy8gZ2V0IG5leHQgY2hhcmFjdGVyXG4gICAgICBidWZmZXIgPSBzdHIuY2hhckF0IChpZHgrKyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgICAgIC8vIGNoYXJhY3RlciBmb3VuZCBpbiB0YWJsZT8gaW5pdGlhbGl6ZSBiaXQgc3RvcmFnZSBhbmQgYWRkIGl0cyBhc2NpaSB2YWx1ZTtcbiAgICAgIH5idWZmZXIgJiYgKGJzID0gYmMgJSA0ID8gYnMgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcixcbiAgICAgICAgLy8gYW5kIGlmIG5vdCBmaXJzdCBvZiBlYWNoIDQgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIG9uZSBhc2NpaSBjaGFyYWN0ZXJcbiAgICAgICAgYmMrKyAlIDQpID8gb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKDI1NSAmIGJzID4+ICgtMiAqIGJjICYgNikpIDogMFxuICAgICkge1xuICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hhcmFjdGVyIGluIHRhYmxlICgwLTYzLCBub3QgZm91bmQgPT4gLTEpXG4gICAgICBidWZmZXIgPSBjaGFycy5pbmRleE9mIChidWZmZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgcmV0dXJuIHtidG9hOiBidG9hLCBhdG9iOiBhdG9ifTtcblxufSkpO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICogfVxuICpcbiAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICpcbiAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAqIGdyZWV0RnJlZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkJ1xuICovXG52YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcGFydGlhbDtcbiIsInZhciBkcml2ZXJzTGljZW5zZVJlZ2V4ID0gcmVxdWlyZShcIi4vbGljZW5zZS1yZWdleFwiKTtcbnZhciBpc1ZhbGlkVVNMaWNlbnNlID0gcmVxdWlyZShcIi4vaXMtdmFsaWQtdXMtbGljZW5zZVwiKTtcbnZhciB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UgPSByZXF1aXJlKFwiLi92YWxpZGF0ZS1kcml2ZXJzLWxpY2Vuc2VcIik7XG52YXIgc3VwcG9ydGVkU3RhdGVzID0gcmVxdWlyZShcIi4vc3VwcG9ydGVkLXN0YXRlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRyaXZlcnNMaWNlbnNlUmVnZXg6IGRyaXZlcnNMaWNlbnNlUmVnZXgsXG4gIGlzVmFsaWRVU0xpY2Vuc2U6IGlzVmFsaWRVU0xpY2Vuc2UsXG4gIHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZTogdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlLFxuICBzdXBwb3J0ZWRTdGF0ZXM6IHN1cHBvcnRlZFN0YXRlc1xufTtcbiIsIi8qKiBNb2JYIC0gKGMpIE1pY2hlbCBXZXN0c3RyYXRlIDIwMTUgLSAyMDIwIC0gTUlUIExpY2Vuc2VkICovXG52YXIgT0JGVVNDQVRFRF9FUlJPUiA9IFwiQW4gaW52YXJpYW50IGZhaWxlZCwgaG93ZXZlciB0aGUgZXJyb3IgaXMgb2JmdXNjYXRlZCBiZWNhdXNlIHRoaXMgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlwiO1xudmFyIEVNUFRZX0FSUkFZID0gW107XG5PYmplY3QuZnJlZXplKEVNUFRZX0FSUkFZKTtcbnZhciBFTVBUWV9PQkpFQ1QgPSB7fTtcbk9iamVjdC5mcmVlemUoRU1QVFlfT0JKRUNUKTtcbmZ1bmN0aW9uIGdldE5leHRJZCgpIHtcbiAgICByZXR1cm4gKytnbG9iYWxTdGF0ZS5tb2J4R3VpZDtcbn1cbmZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICAgIGludmFyaWFudChmYWxzZSwgbWVzc2FnZSk7XG4gICAgdGhyb3cgXCJYXCI7IC8vIHVucmVhY2hhYmxlXG59XG5mdW5jdGlvbiBpbnZhcmlhbnQoY2hlY2ssIG1lc3NhZ2UpIHtcbiAgICBpZiAoIWNoZWNrKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbbW9ieF0gXCIgKyAobWVzc2FnZSB8fCBPQkZVU0NBVEVEX0VSUk9SKSk7XG59XG4vKipcbiAqIFByaW50cyBhIGRlcHJlY2F0aW9uIG1lc3NhZ2UsIGJ1dCBvbmx5IG9uZSB0aW1lLlxuICogUmV0dXJucyBmYWxzZSBpZiB0aGUgZGVwcmVjYXRlZCBtZXNzYWdlIHdhcyBhbHJlYWR5IHByaW50ZWQgYmVmb3JlXG4gKi9cbnZhciBkZXByZWNhdGVkTWVzc2FnZXMgPSBbXTtcbmZ1bmN0aW9uIGRlcHJlY2F0ZWQobXNnLCB0aGluZykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpbmcpIHtcbiAgICAgICAgcmV0dXJuIGRlcHJlY2F0ZWQoXCInXCIgKyBtc2cgKyBcIicsIHVzZSAnXCIgKyB0aGluZyArIFwiJyBpbnN0ZWFkLlwiKTtcbiAgICB9XG4gICAgaWYgKGRlcHJlY2F0ZWRNZXNzYWdlcy5pbmRleE9mKG1zZykgIT09IC0xKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGVwcmVjYXRlZE1lc3NhZ2VzLnB1c2gobXNnKTtcbiAgICBjb25zb2xlLmVycm9yKFwiW21vYnhdIERlcHJlY2F0ZWQ6IFwiICsgbXNnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogTWFrZXMgc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiBpcyBpbnZva2VkIGF0IG1vc3Qgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZShmdW5jKSB7XG4gICAgdmFyIGludm9rZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaW52b2tlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaW52b2tlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyB9O1xuZnVuY3Rpb24gdW5pcXVlKGxpc3QpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChyZXMuaW5kZXhPZihpdGVtKSA9PT0gLTEpXG4gICAgICAgICAgICByZXMucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIHJldHVybiBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb01hcChkYXRhU3RydWN0dXJlKSB7XG4gICAgaWYgKGlzRVM2TWFwKGRhdGFTdHJ1Y3R1cmUpIHx8IGlzT2JzZXJ2YWJsZU1hcChkYXRhU3RydWN0dXJlKSkge1xuICAgICAgICByZXR1cm4gZGF0YVN0cnVjdHVyZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhU3RydWN0dXJlKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1hcChkYXRhU3RydWN0dXJlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChkYXRhU3RydWN0dXJlKSkge1xuICAgICAgICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YVN0cnVjdHVyZSkge1xuICAgICAgICAgICAgbWFwLnNldChrZXksIGRhdGFTdHJ1Y3R1cmVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWlsKFwiQ2Fubm90IGNvbnZlcnQgdG8gbWFwIGZyb20gJ1wiICsgZGF0YVN0cnVjdHVyZSArIFwiJ1wiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRIaWRkZW5Qcm9wKG9iamVjdCwgcHJvcE5hbWUsIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcE5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xufVxuZnVuY3Rpb24gYWRkSGlkZGVuRmluYWxQcm9wKG9iamVjdCwgcHJvcE5hbWUsIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcE5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUHJvcGVydHlDb25maWd1cmFibGUob2JqZWN0LCBwcm9wKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcCk7XG4gICAgcmV0dXJuICFkZXNjcmlwdG9yIHx8IChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSAhPT0gZmFsc2UgJiYgZGVzY3JpcHRvci53cml0YWJsZSAhPT0gZmFsc2UpO1xufVxuZnVuY3Rpb24gYXNzZXJ0UHJvcGVydHlDb25maWd1cmFibGUob2JqZWN0LCBwcm9wKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShvYmplY3QsIHByb3ApKVxuICAgICAgICBmYWlsKFwiQ2Fubm90IG1ha2UgcHJvcGVydHkgJ1wiICsgcHJvcC50b1N0cmluZygpICsgXCInIG9ic2VydmFibGUsIGl0IGlzIG5vdCBjb25maWd1cmFibGUgYW5kIHdyaXRhYmxlIGluIHRoZSB0YXJnZXQgb2JqZWN0XCIpO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShuYW1lLCBjbGF6eikge1xuICAgIHZhciBwcm9wTmFtZSA9IFwiaXNNb2JYXCIgKyBuYW1lO1xuICAgIGNsYXp6LnByb3RvdHlwZVtwcm9wTmFtZV0gPSB0cnVlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoeCkgJiYgeFtwcm9wTmFtZV0gPT09IHRydWU7XG4gICAgfTtcbn1cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgZGlzcmVnYXJkaW5nIG9ic2VydmFiaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh4KSB8fCBpc09ic2VydmFibGVBcnJheSh4KTtcbn1cbmZ1bmN0aW9uIGlzRVM2TWFwKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgTWFwO1xufVxuZnVuY3Rpb24gaXNFUzZTZXQodGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiBTZXQ7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZvbGxvd2luZzogb3duIGtleXMsIHByb3RvdHlwZSBrZXlzICYgb3duIHN5bWJvbCBrZXlzLCBpZiB0aGV5IGFyZSBlbnVtZXJhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRQbGFpbk9iamVjdEtleXMob2JqZWN0KSB7XG4gICAgdmFyIGVudW1lcmFibGVzID0gbmV3IFNldCgpO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpXG4gICAgICAgIGVudW1lcmFibGVzLmFkZChrZXkpOyAvLyAqYWxsKiBlbnVtZXJhYmxlc1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgaykuZW51bWVyYWJsZSlcbiAgICAgICAgICAgIGVudW1lcmFibGVzLmFkZChrKTtcbiAgICB9KTsgLy8gKm93biogc3ltYm9sc1xuICAgIC8vIE5vdGU6IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbWlzc2luZyBlbnVtZXJhYmxlLCBpbmhlcml0ZWQsIHN5bWJvbGljIHByb3BlcnR5IG5hbWVzISBUaGF0IHdvdWxkIGhvd2V2ZXIgcHJldHR5IGV4cGVuc2l2ZSB0byBhZGQsXG4gICAgLy8gYXMgdGhlcmUgaXMgbm8gZWZmaWNpZW50IGl0ZXJhdG9yIHRoYXQgcmV0dXJucyAqYWxsKiBwcm9wZXJ0aWVzXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZW51bWVyYWJsZXMpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5S2V5KGtleSkge1xuICAgIGlmIChrZXkgJiYga2V5LnRvU3RyaW5nKVxuICAgICAgICByZXR1cm4ga2V5LnRvU3RyaW5nKCk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhrZXkpLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyBcIlwiICsgdmFsdWUgOiB2YWx1ZTtcbn1cbnZhciBvd25LZXlzID0gdHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5vd25LZXlzXG4gICAgPyBSZWZsZWN0Lm93bktleXNcbiAgICA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbiAgICAgICAgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikpOyB9XG4gICAgICAgIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG5cbnZhciAkbW9ieCA9IFN5bWJvbChcIm1vYnggYWRtaW5pc3RyYXRpb25cIik7XG52YXIgQXRvbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgYXRvbS4gRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpdCBpcyByZWNvbW1lbmRlZCB0byBnaXZlIGl0IGEgbmFtZS5cbiAgICAgKiBUaGUgb25CZWNvbWVPYnNlcnZlZCBhbmQgb25CZWNvbWVVbm9ic2VydmVkIGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBBdG9tKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gXCJBdG9tQFwiICsgZ2V0TmV4dElkKCk7IH1cbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pc1BlbmRpbmdVbm9ic2VydmF0aW9uID0gZmFsc2U7IC8vIGZvciBlZmZlY3RpdmUgdW5vYnNlcnZpbmcuIEJhc2VBdG9tIGhhcyB0cnVlLCBmb3IgZXh0cmEgb3B0aW1pemF0aW9uLCBzbyBpdHMgb25CZWNvbWVVbm9ic2VydmVkIG5ldmVyIGdldHMgY2FsbGVkLCBiZWNhdXNlIGl0J3Mgbm90IG5lZWRlZFxuICAgICAgICB0aGlzLmlzQmVpbmdPYnNlcnZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5kaWZmVmFsdWUgPSAwO1xuICAgICAgICB0aGlzLmxhc3RBY2Nlc3NlZEJ5ID0gMDtcbiAgICAgICAgdGhpcy5sb3dlc3RPYnNlcnZlclN0YXRlID0gSURlcml2YXRpb25TdGF0ZS5OT1RfVFJBQ0tJTkc7XG4gICAgfVxuICAgIEF0b20ucHJvdG90eXBlLm9uQmVjb21lT2JzZXJ2ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLm9uQmVjb21lT2JzZXJ2ZWRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHRoaXMub25CZWNvbWVPYnNlcnZlZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikgeyByZXR1cm4gbGlzdGVuZXIoKTsgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEF0b20ucHJvdG90eXBlLm9uQmVjb21lVW5vYnNlcnZlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMub25CZWNvbWVVbm9ic2VydmVkTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm9uQmVjb21lVW5vYnNlcnZlZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikgeyByZXR1cm4gbGlzdGVuZXIoKTsgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEludm9rZSB0aGlzIG1ldGhvZCB0byBub3RpZnkgbW9ieCB0aGF0IHlvdXIgYXRvbSBoYXMgYmVlbiB1c2VkIHNvbWVob3cuXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHJlYWN0aXZlIGNvbnRleHQuXG4gICAgICovXG4gICAgQXRvbS5wcm90b3R5cGUucmVwb3J0T2JzZXJ2ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXBvcnRPYnNlcnZlZCh0aGlzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEludm9rZSB0aGlzIG1ldGhvZCBfYWZ0ZXJfIHRoaXMgbWV0aG9kIGhhcyBjaGFuZ2VkIHRvIHNpZ25hbCBtb2J4IHRoYXQgYWxsIGl0cyBvYnNlcnZlcnMgc2hvdWxkIGludmFsaWRhdGUuXG4gICAgICovXG4gICAgQXRvbS5wcm90b3R5cGUucmVwb3J0Q2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3RhcnRCYXRjaCgpO1xuICAgICAgICBwcm9wYWdhdGVDaGFuZ2VkKHRoaXMpO1xuICAgICAgICBlbmRCYXRjaCgpO1xuICAgIH07XG4gICAgQXRvbS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfTtcbiAgICByZXR1cm4gQXRvbTtcbn0oKSk7XG52YXIgaXNBdG9tID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIkF0b21cIiwgQXRvbSk7XG5mdW5jdGlvbiBjcmVhdGVBdG9tKG5hbWUsIG9uQmVjb21lT2JzZXJ2ZWRIYW5kbGVyLCBvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyKSB7XG4gICAgaWYgKG9uQmVjb21lT2JzZXJ2ZWRIYW5kbGVyID09PSB2b2lkIDApIHsgb25CZWNvbWVPYnNlcnZlZEhhbmRsZXIgPSBub29wOyB9XG4gICAgaWYgKG9uQmVjb21lVW5vYnNlcnZlZEhhbmRsZXIgPT09IHZvaWQgMCkgeyBvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyID0gbm9vcDsgfVxuICAgIHZhciBhdG9tID0gbmV3IEF0b20obmFtZSk7XG4gICAgLy8gZGVmYXVsdCBgbm9vcGAgbGlzdGVuZXIgd2lsbCBub3QgaW5pdGlhbGl6ZSB0aGUgaG9vayBTZXRcbiAgICBpZiAob25CZWNvbWVPYnNlcnZlZEhhbmRsZXIgIT09IG5vb3ApIHtcbiAgICAgICAgb25CZWNvbWVPYnNlcnZlZChhdG9tLCBvbkJlY29tZU9ic2VydmVkSGFuZGxlcik7XG4gICAgfVxuICAgIGlmIChvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyICE9PSBub29wKSB7XG4gICAgICAgIG9uQmVjb21lVW5vYnNlcnZlZChhdG9tLCBvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGF0b207XG59XG5cbmZ1bmN0aW9uIGlkZW50aXR5Q29tcGFyZXIoYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xufVxuZnVuY3Rpb24gc3RydWN0dXJhbENvbXBhcmVyKGEsIGIpIHtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIpO1xufVxuZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmVyKGEsIGIpIHtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIDEpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmVyKGEsIGIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmlzKGEsIGIpO1xufVxudmFyIGNvbXBhcmVyID0ge1xuICAgIGlkZW50aXR5OiBpZGVudGl0eUNvbXBhcmVyLFxuICAgIHN0cnVjdHVyYWw6IHN0cnVjdHVyYWxDb21wYXJlcixcbiAgICBkZWZhdWx0OiBkZWZhdWx0Q29tcGFyZXIsXG4gICAgc2hhbGxvdzogc2hhbGxvd0NvbXBhcmVyXG59O1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxuXG52YXIgbW9ieERpZFJ1bkxhenlJbml0aWFsaXplcnNTeW1ib2wgPSBTeW1ib2woXCJtb2J4IGRpZCBydW4gbGF6eSBpbml0aWFsaXplcnNcIik7XG52YXIgbW9ieFBlbmRpbmdEZWNvcmF0b3JzID0gU3ltYm9sKFwibW9ieCBwZW5kaW5nIGRlY29yYXRvcnNcIik7XG52YXIgZW51bWVyYWJsZURlc2NyaXB0b3JDYWNoZSA9IHt9O1xudmFyIG5vbkVudW1lcmFibGVEZXNjcmlwdG9yQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5SW5pdGlhbGl6ZXJEZXNjcmlwdG9yKHByb3AsIGVudW1lcmFibGUpIHtcbiAgICB2YXIgY2FjaGUgPSBlbnVtZXJhYmxlID8gZW51bWVyYWJsZURlc2NyaXB0b3JDYWNoZSA6IG5vbkVudW1lcmFibGVEZXNjcmlwdG9yQ2FjaGU7XG4gICAgcmV0dXJuIChjYWNoZVtwcm9wXSB8fFxuICAgICAgICAoY2FjaGVbcHJvcF0gPSB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBlbnVtZXJhYmxlLFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXNbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZUluc3RhbmNlKHRhcmdldCkge1xuICAgIHZhciBlXzEsIF9hO1xuICAgIGlmICh0YXJnZXRbbW9ieERpZFJ1bkxhenlJbml0aWFsaXplcnNTeW1ib2xdID09PSB0cnVlKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIGRlY29yYXRvcnMgPSB0YXJnZXRbbW9ieFBlbmRpbmdEZWNvcmF0b3JzXTtcbiAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgICBhZGRIaWRkZW5Qcm9wKHRhcmdldCwgbW9ieERpZFJ1bkxhenlJbml0aWFsaXplcnNTeW1ib2wsIHRydWUpO1xuICAgICAgICAvLyBCdWlsZCBwcm9wZXJ0eSBrZXkgYXJyYXkgZnJvbSBib3RoIHN0cmluZ3MgYW5kIHN5bWJvbHNcbiAgICAgICAgdmFyIGtleXMgPSBfX3NwcmVhZChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRlY29yYXRvcnMpLCBPYmplY3Qua2V5cyhkZWNvcmF0b3JzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXlzXzEgPSBfX3ZhbHVlcyhrZXlzKSwga2V5c18xXzEgPSBrZXlzXzEubmV4dCgpOyAha2V5c18xXzEuZG9uZTsga2V5c18xXzEgPSBrZXlzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHZhciBkID0gZGVjb3JhdG9yc1trZXldO1xuICAgICAgICAgICAgICAgIGQucHJvcGVydHlDcmVhdG9yKHRhcmdldCwgZC5wcm9wLCBkLmRlc2NyaXB0b3IsIGQuZGVjb3JhdG9yVGFyZ2V0LCBkLmRlY29yYXRvckFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChrZXlzXzFfMSAmJiAha2V5c18xXzEuZG9uZSAmJiAoX2EgPSBrZXlzXzEucmV0dXJuKSkgX2EuY2FsbChrZXlzXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUHJvcERlY29yYXRvcihwcm9wZXJ0eUluaXRpYWxseUVudW1lcmFibGUsIHByb3BlcnR5Q3JlYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3JGYWN0b3J5KCkge1xuICAgICAgICB2YXIgZGVjb3JhdG9yQXJndW1lbnRzO1xuICAgICAgICB2YXIgZGVjb3JhdG9yID0gZnVuY3Rpb24gZGVjb3JhdGUodGFyZ2V0LCBwcm9wLCBkZXNjcmlwdG9yLCBhcHBseUltbWVkaWF0ZWx5XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIHBhcmFtZXRlciB0byBzaWduYWwgdGhlIGRpcmVjdCBhcHBsaWNhdGlvbiBvZiBhIGRlY29yYXRvciwgYWxsb3cgZXh0ZW5kT2JzZXJ2YWJsZSB0byBza2lwIHRoZSBlbnRpcmUgdHlwZSBkZWNvcmF0aW9uIHBhcnQsXG4gICAgICAgIC8vIGFzIHRoZSBpbnN0YW5jZSB0byBhcHBseSB0aGUgZGVjb3JhdG9yIHRvIGVxdWFscyB0aGUgdGFyZ2V0XG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGFwcGx5SW1tZWRpYXRlbHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUNyZWF0b3IodGFyZ2V0LCBwcm9wLCBkZXNjcmlwdG9yLCB0YXJnZXQsIGRlY29yYXRvckFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICFxdWFja3NMaWtlQURlY29yYXRvcihhcmd1bWVudHMpKVxuICAgICAgICAgICAgICAgIGZhaWwoXCJUaGlzIGZ1bmN0aW9uIGlzIGEgZGVjb3JhdG9yLCBidXQgaXQgd2Fzbid0IGludm9rZWQgbGlrZSBhIGRlY29yYXRvclwiKTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgbW9ieFBlbmRpbmdEZWNvcmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIHZhciBpbmhlcml0ZWREZWNvcmF0b3JzID0gdGFyZ2V0W21vYnhQZW5kaW5nRGVjb3JhdG9yc107XG4gICAgICAgICAgICAgICAgYWRkSGlkZGVuUHJvcCh0YXJnZXQsIG1vYnhQZW5kaW5nRGVjb3JhdG9ycywgX19hc3NpZ24oe30sIGluaGVyaXRlZERlY29yYXRvcnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldFttb2J4UGVuZGluZ0RlY29yYXRvcnNdW3Byb3BdID0ge1xuICAgICAgICAgICAgICAgIHByb3A6IHByb3AsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlDcmVhdG9yOiBwcm9wZXJ0eUNyZWF0b3IsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogZGVzY3JpcHRvcixcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JUYXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JBcmd1bWVudHM6IGRlY29yYXRvckFyZ3VtZW50c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVQcm9wZXJ0eUluaXRpYWxpemVyRGVzY3JpcHRvcihwcm9wLCBwcm9wZXJ0eUluaXRpYWxseUVudW1lcmFibGUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAocXVhY2tzTGlrZUFEZWNvcmF0b3IoYXJndW1lbnRzKSkge1xuICAgICAgICAgICAgLy8gQGRlY29yYXRvclxuICAgICAgICAgICAgZGVjb3JhdG9yQXJndW1lbnRzID0gRU1QVFlfQVJSQVk7XG4gICAgICAgICAgICByZXR1cm4gZGVjb3JhdG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBAZGVjb3JhdG9yKGFyZ3MpXG4gICAgICAgICAgICBkZWNvcmF0b3JBcmd1bWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRvcjtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBxdWFja3NMaWtlQURlY29yYXRvcihhcmdzKSB7XG4gICAgcmV0dXJuICgoKGFyZ3MubGVuZ3RoID09PSAyIHx8IGFyZ3MubGVuZ3RoID09PSAzKSAmJlxuICAgICAgICAodHlwZW9mIGFyZ3NbMV0gPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGFyZ3NbMV0gPT09IFwic3ltYm9sXCIpKSB8fFxuICAgICAgICAoYXJncy5sZW5ndGggPT09IDQgJiYgYXJnc1szXSA9PT0gdHJ1ZSkpO1xufVxuXG5mdW5jdGlvbiBkZWVwRW5oYW5jZXIodiwgXywgbmFtZSkge1xuICAgIC8vIGl0IGlzIGFuIG9ic2VydmFibGUgYWxyZWFkeSwgZG9uZVxuICAgIGlmIChpc09ic2VydmFibGUodikpXG4gICAgICAgIHJldHVybiB2O1xuICAgIC8vIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgYW5kIG11dGF0ZWQ/XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikpXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLmFycmF5KHYsIHsgbmFtZTogbmFtZSB9KTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdCh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUub2JqZWN0KHYsIHVuZGVmaW5lZCwgeyBuYW1lOiBuYW1lIH0pO1xuICAgIGlmIChpc0VTNk1hcCh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUubWFwKHYsIHsgbmFtZTogbmFtZSB9KTtcbiAgICBpZiAoaXNFUzZTZXQodikpXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnNldCh2LCB7IG5hbWU6IG5hbWUgfSk7XG4gICAgcmV0dXJuIHY7XG59XG5mdW5jdGlvbiBzaGFsbG93RW5oYW5jZXIodiwgXywgbmFtZSkge1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdCh2KSB8fCBpc09ic2VydmFibGVBcnJheSh2KSB8fCBpc09ic2VydmFibGVNYXAodikgfHwgaXNPYnNlcnZhYmxlU2V0KHYpKVxuICAgICAgICByZXR1cm4gdjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuYXJyYXkodiwgeyBuYW1lOiBuYW1lLCBkZWVwOiBmYWxzZSB9KTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdCh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUub2JqZWN0KHYsIHVuZGVmaW5lZCwgeyBuYW1lOiBuYW1lLCBkZWVwOiBmYWxzZSB9KTtcbiAgICBpZiAoaXNFUzZNYXAodikpXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLm1hcCh2LCB7IG5hbWU6IG5hbWUsIGRlZXA6IGZhbHNlIH0pO1xuICAgIGlmIChpc0VTNlNldCh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc2V0KHYsIHsgbmFtZTogbmFtZSwgZGVlcDogZmFsc2UgfSk7XG4gICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgIFwiVGhlIHNoYWxsb3cgbW9kaWZpZXIgLyBkZWNvcmF0b3IgY2FuIG9ubHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGFycmF5cywgb2JqZWN0cywgbWFwcyBhbmQgc2V0c1wiKTtcbn1cbmZ1bmN0aW9uIHJlZmVyZW5jZUVuaGFuY2VyKG5ld1ZhbHVlKSB7XG4gICAgLy8gbmV2ZXIgdHVybiBpbnRvIGFuIG9ic2VydmFibGVcbiAgICByZXR1cm4gbmV3VmFsdWU7XG59XG5mdW5jdGlvbiByZWZTdHJ1Y3RFbmhhbmNlcih2LCBvbGRWYWx1ZSwgbmFtZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgaXNPYnNlcnZhYmxlKHYpKVxuICAgICAgICB0aHJvdyBcIm9ic2VydmFibGUuc3RydWN0IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIG9ic2VydmFibGUgdmFsdWVzXCI7XG4gICAgaWYgKGRlZXBFcXVhbCh2LCBvbGRWYWx1ZSkpXG4gICAgICAgIHJldHVybiBvbGRWYWx1ZTtcbiAgICByZXR1cm4gdjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIoZW5oYW5jZXIpIHtcbiAgICBpbnZhcmlhbnQoZW5oYW5jZXIpO1xuICAgIHZhciBkZWNvcmF0b3IgPSBjcmVhdGVQcm9wRGVjb3JhdG9yKHRydWUsIGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgX2RlY29yYXRvclRhcmdldCwgZGVjb3JhdG9yQXJncykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBpbnZhcmlhbnQoIWRlc2NyaXB0b3IgfHwgIWRlc2NyaXB0b3IuZ2V0LCBcIkBvYnNlcnZhYmxlIGNhbm5vdCBiZSB1c2VkIG9uIGdldHRlciAocHJvcGVydHkgXFxcIlwiICsgc3RyaW5naWZ5S2V5KHByb3BlcnR5TmFtZSkgKyBcIlxcXCIpLCB1c2UgQGNvbXB1dGVkIGluc3RlYWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbml0aWFsVmFsdWUgPSBkZXNjcmlwdG9yXG4gICAgICAgICAgICA/IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXJcbiAgICAgICAgICAgICAgICA/IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIuY2FsbCh0YXJnZXQpXG4gICAgICAgICAgICAgICAgOiBkZXNjcmlwdG9yLnZhbHVlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgYXNPYnNlcnZhYmxlT2JqZWN0KHRhcmdldCkuYWRkT2JzZXJ2YWJsZVByb3AocHJvcGVydHlOYW1lLCBpbml0aWFsVmFsdWUsIGVuaGFuY2VyKTtcbiAgICB9KTtcbiAgICB2YXIgcmVzID0gXG4gICAgLy8gRXh0cmEgcHJvY2VzcyBjaGVja3MsIGFzIHRoaXMgaGFwcGVucyBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uXG4gICAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiXG4gICAgICAgID8gZnVuY3Rpb24gb2JzZXJ2YWJsZURlY29yYXRvcigpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBpcyBqdXN0IHRvIGRldGVjdCBpbGxlZ2FsIGRlY29yYXRvciBpbnZvY2F0aW9ucywgZGVwcmVjYXRlIGluIGEgbmV4dCB2ZXJzaW9uXG4gICAgICAgICAgICAvLyBhbmQgc2ltcGx5IHJldHVybiB0aGUgY3JlYXRlZCBwcm9wIGRlY29yYXRvclxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKFwiSW5jb3JyZWN0IGRlY29yYXRvciBpbnZvY2F0aW9uLiBAb2JzZXJ2YWJsZSBkZWNvcmF0b3IgZG9lc24ndCBleHBlY3QgYW55IGFyZ3VtZW50c1wiKTtcbiAgICAgICAgICAgIHJldHVybiBkZWNvcmF0b3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICA6IGRlY29yYXRvcjtcbiAgICByZXMuZW5oYW5jZXIgPSBlbmhhbmNlcjtcbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBQcmVkZWZpbmVkIGJhZ3Mgb2YgY3JlYXRlIG9ic2VydmFibGUgb3B0aW9ucywgdG8gYXZvaWQgYWxsb2NhdGluZyB0ZW1wb3JhcmlseSBvcHRpb24gb2JqZWN0c1xuLy8gaW4gdGhlIG1ham9yaXR5IG9mIGNhc2VzXG52YXIgZGVmYXVsdENyZWF0ZU9ic2VydmFibGVPcHRpb25zID0ge1xuICAgIGRlZXA6IHRydWUsXG4gICAgbmFtZTogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHREZWNvcmF0b3I6IHVuZGVmaW5lZCxcbiAgICBwcm94eTogdHJ1ZVxufTtcbk9iamVjdC5mcmVlemUoZGVmYXVsdENyZWF0ZU9ic2VydmFibGVPcHRpb25zKTtcbmZ1bmN0aW9uIGFzc2VydFZhbGlkT3B0aW9uKGtleSkge1xuICAgIGlmICghL14oZGVlcHxuYW1lfGVxdWFsc3xkZWZhdWx0RGVjb3JhdG9yfHByb3h5KSQvLnRlc3Qoa2V5KSlcbiAgICAgICAgZmFpbChcImludmFsaWQgb3B0aW9uIGZvciAoZXh0ZW5kKW9ic2VydmFibGU6IFwiICsga2V5KTtcbn1cbmZ1bmN0aW9uIGFzQ3JlYXRlT2JzZXJ2YWJsZU9wdGlvbnModGhpbmcpIHtcbiAgICBpZiAodGhpbmcgPT09IG51bGwgfHwgdGhpbmcgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDcmVhdGVPYnNlcnZhYmxlT3B0aW9ucztcbiAgICBpZiAodHlwZW9mIHRoaW5nID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4geyBuYW1lOiB0aGluZywgZGVlcDogdHJ1ZSwgcHJveHk6IHRydWUgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpbmcgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm4gZmFpbChcImV4cGVjdGVkIG9wdGlvbnMgb2JqZWN0XCIpO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGluZykuZm9yRWFjaChhc3NlcnRWYWxpZE9wdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGluZztcbn1cbnZhciBkZWVwRGVjb3JhdG9yID0gY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIoZGVlcEVuaGFuY2VyKTtcbnZhciBzaGFsbG93RGVjb3JhdG9yID0gY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIoc2hhbGxvd0VuaGFuY2VyKTtcbnZhciByZWZEZWNvcmF0b3IgPSBjcmVhdGVEZWNvcmF0b3JGb3JFbmhhbmNlcihyZWZlcmVuY2VFbmhhbmNlcik7XG52YXIgcmVmU3RydWN0RGVjb3JhdG9yID0gY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIocmVmU3RydWN0RW5oYW5jZXIpO1xuZnVuY3Rpb24gZ2V0RW5oYW5jZXJGcm9tT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZGVmYXVsdERlY29yYXRvclxuICAgICAgICA/IG9wdGlvbnMuZGVmYXVsdERlY29yYXRvci5lbmhhbmNlclxuICAgICAgICA6IG9wdGlvbnMuZGVlcCA9PT0gZmFsc2VcbiAgICAgICAgICAgID8gcmVmZXJlbmNlRW5oYW5jZXJcbiAgICAgICAgICAgIDogZGVlcEVuaGFuY2VyO1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3QsIGFycmF5IG9yIGZ1bmN0aW9uIGludG8gYSByZWFjdGl2ZSBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gdiB0aGUgdmFsdWUgd2hpY2ggc2hvdWxkIGJlY29tZSBvYnNlcnZhYmxlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVPYnNlcnZhYmxlKHYsIGFyZzIsIGFyZzMpIHtcbiAgICAvLyBAb2JzZXJ2YWJsZSBzb21lUHJvcDtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgIHJldHVybiBkZWVwRGVjb3JhdG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIC8vIGl0IGlzIGFuIG9ic2VydmFibGUgYWxyZWFkeSwgZG9uZVxuICAgIGlmIChpc09ic2VydmFibGUodikpXG4gICAgICAgIHJldHVybiB2O1xuICAgIC8vIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgYW5kIG11dGF0ZWQ/XG4gICAgdmFyIHJlcyA9IGlzUGxhaW5PYmplY3QodilcbiAgICAgICAgPyBvYnNlcnZhYmxlLm9iamVjdCh2LCBhcmcyLCBhcmczKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkodilcbiAgICAgICAgICAgID8gb2JzZXJ2YWJsZS5hcnJheSh2LCBhcmcyKVxuICAgICAgICAgICAgOiBpc0VTNk1hcCh2KVxuICAgICAgICAgICAgICAgID8gb2JzZXJ2YWJsZS5tYXAodiwgYXJnMilcbiAgICAgICAgICAgICAgICA6IGlzRVM2U2V0KHYpXG4gICAgICAgICAgICAgICAgICAgID8gb2JzZXJ2YWJsZS5zZXQodiwgYXJnMilcbiAgICAgICAgICAgICAgICAgICAgOiB2O1xuICAgIC8vIHRoaXMgdmFsdWUgY291bGQgYmUgY29udmVydGVkIHRvIGEgbmV3IG9ic2VydmFibGUgZGF0YSBzdHJ1Y3R1cmUsIHJldHVybiBpdFxuICAgIGlmIChyZXMgIT09IHYpXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgLy8gb3RoZXJ3aXNlLCBqdXN0IGJveCBpdFxuICAgIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgIFwiVGhlIHByb3ZpZGVkIHZhbHVlIGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgaW50byBhbiBvYnNlcnZhYmxlLiBJZiB5b3Ugd2FudCBqdXN0IGNyZWF0ZSBhbiBvYnNlcnZhYmxlIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHVzZSAnb2JzZXJ2YWJsZS5ib3godmFsdWUpJ1wiKTtcbn1cbnZhciBvYnNlcnZhYmxlRmFjdG9yaWVzID0ge1xuICAgIGJveDogZnVuY3Rpb24gKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMilcbiAgICAgICAgICAgIGluY29ycmVjdGx5VXNlZEFzRGVjb3JhdG9yKFwiYm94XCIpO1xuICAgICAgICB2YXIgbyA9IGFzQ3JlYXRlT2JzZXJ2YWJsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZVZhbHVlKHZhbHVlLCBnZXRFbmhhbmNlckZyb21PcHRpb25zKG8pLCBvLm5hbWUsIHRydWUsIG8uZXF1YWxzKTtcbiAgICB9LFxuICAgIGFycmF5OiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlcywgb3B0aW9ucykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpXG4gICAgICAgICAgICBpbmNvcnJlY3RseVVzZWRBc0RlY29yYXRvcihcImFycmF5XCIpO1xuICAgICAgICB2YXIgbyA9IGFzQ3JlYXRlT2JzZXJ2YWJsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVPYnNlcnZhYmxlQXJyYXkoaW5pdGlhbFZhbHVlcywgZ2V0RW5oYW5jZXJGcm9tT3B0aW9ucyhvKSwgby5uYW1lKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKVxuICAgICAgICAgICAgaW5jb3JyZWN0bHlVc2VkQXNEZWNvcmF0b3IoXCJtYXBcIik7XG4gICAgICAgIHZhciBvID0gYXNDcmVhdGVPYnNlcnZhYmxlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlTWFwKGluaXRpYWxWYWx1ZXMsIGdldEVuaGFuY2VyRnJvbU9wdGlvbnMobyksIG8ubmFtZSk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWVzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMilcbiAgICAgICAgICAgIGluY29ycmVjdGx5VXNlZEFzRGVjb3JhdG9yKFwic2V0XCIpO1xuICAgICAgICB2YXIgbyA9IGFzQ3JlYXRlT2JzZXJ2YWJsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZVNldChpbml0aWFsVmFsdWVzLCBnZXRFbmhhbmNlckZyb21PcHRpb25zKG8pLCBvLm5hbWUpO1xuICAgIH0sXG4gICAgb2JqZWN0OiBmdW5jdGlvbiAocHJvcHMsIGRlY29yYXRvcnMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBpbmNvcnJlY3RseVVzZWRBc0RlY29yYXRvcihcIm9iamVjdFwiKTtcbiAgICAgICAgdmFyIG8gPSBhc0NyZWF0ZU9ic2VydmFibGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoby5wcm94eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRlbmRPYnNlcnZhYmxlKHt9LCBwcm9wcywgZGVjb3JhdG9ycywgbyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdERlY29yYXRvciA9IGdldERlZmF1bHREZWNvcmF0b3JGcm9tT2JqZWN0T3B0aW9ucyhvKTtcbiAgICAgICAgICAgIHZhciBiYXNlID0gZXh0ZW5kT2JzZXJ2YWJsZSh7fSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG8pO1xuICAgICAgICAgICAgdmFyIHByb3h5ID0gY3JlYXRlRHluYW1pY09ic2VydmFibGVPYmplY3QoYmFzZSk7XG4gICAgICAgICAgICBleHRlbmRPYnNlcnZhYmxlT2JqZWN0V2l0aFByb3BlcnRpZXMocHJveHksIHByb3BzLCBkZWNvcmF0b3JzLCBkZWZhdWx0RGVjb3JhdG9yKTtcbiAgICAgICAgICAgIHJldHVybiBwcm94eTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVmOiByZWZEZWNvcmF0b3IsXG4gICAgc2hhbGxvdzogc2hhbGxvd0RlY29yYXRvcixcbiAgICBkZWVwOiBkZWVwRGVjb3JhdG9yLFxuICAgIHN0cnVjdDogcmVmU3RydWN0RGVjb3JhdG9yXG59O1xudmFyIG9ic2VydmFibGUgPSBjcmVhdGVPYnNlcnZhYmxlO1xuLy8gd2VpcmQgdHJpY2sgdG8ga2VlcCBvdXIgdHlwaW5ncyBuaWNlbHkgd2l0aCBvdXIgZnVuY3MsIGFuZCBzdGlsbCBleHRlbmQgdGhlIG9ic2VydmFibGUgZnVuY3Rpb25cbk9iamVjdC5rZXlzKG9ic2VydmFibGVGYWN0b3JpZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIChvYnNlcnZhYmxlW25hbWVdID0gb2JzZXJ2YWJsZUZhY3Rvcmllc1tuYW1lXSk7IH0pO1xuZnVuY3Rpb24gaW5jb3JyZWN0bHlVc2VkQXNEZWNvcmF0b3IobWV0aG9kTmFtZSkge1xuICAgIGZhaWwoXG4gICAgLy8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgXCJFeHBlY3RlZCBvbmUgb3IgdHdvIGFyZ3VtZW50cyB0byBvYnNlcnZhYmxlLlwiICsgbWV0aG9kTmFtZSArIFwiLiBEaWQgeW91IGFjY2lkZW50YWxseSB0cnkgdG8gdXNlIG9ic2VydmFibGUuXCIgKyBtZXRob2ROYW1lICsgXCIgYXMgZGVjb3JhdG9yP1wiKTtcbn1cblxudmFyIGNvbXB1dGVkRGVjb3JhdG9yID0gY3JlYXRlUHJvcERlY29yYXRvcihmYWxzZSwgZnVuY3Rpb24gKGluc3RhbmNlLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlY29yYXRvclRhcmdldCwgZGVjb3JhdG9yQXJncykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaW52YXJpYW50KGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5nZXQsIFwiVHJ5aW5nIHRvIGRlY2xhcmUgYSBjb21wdXRlZCB2YWx1ZSBmb3IgdW5zcGVjaWZpZWQgZ2V0dGVyICdcIiArIHN0cmluZ2lmeUtleShwcm9wZXJ0eU5hbWUpICsgXCInXCIpO1xuICAgIH1cbiAgICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsIHNldCA9IGRlc2NyaXB0b3Iuc2V0OyAvLyBpbml0aWFsVmFsdWUgaXMgdGhlIGRlc2NyaXB0b3IgZm9yIGdldCAvIHNldCBwcm9wc1xuICAgIC8vIE9wdGltaXphdGlvbjogZmFzdGVyIG9uIGRlY29yYXRvciB0YXJnZXQgb3IgaW5zdGFuY2U/IEFzc3VtaW5nIHRhcmdldFxuICAgIC8vIE9wdGltaXphdGlvbjogZmluZCBvdXQgaWYgZGVjbGFyaW5nIG9uIGluc3RhbmNlIGlzbid0IGp1c3QgZmFzdGVyLiAoYWxzbyBtYWtlcyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBzaW1wbGVyKS4gQnV0LCBtb3JlIG1lbW9yeSB1c2FnZS4uXG4gICAgLy8gRm9yY2luZyBpbnN0YW5jZSBub3csIGZpeGVzIGhvdCByZWxvYWRpZyBpc3N1ZXMgb24gUmVhY3QgTmF0aXZlOlxuICAgIHZhciBvcHRpb25zID0gZGVjb3JhdG9yQXJnc1swXSB8fCB7fTtcbiAgICBhc09ic2VydmFibGVPYmplY3QoaW5zdGFuY2UpLmFkZENvbXB1dGVkUHJvcChpbnN0YW5jZSwgcHJvcGVydHlOYW1lLCBfX2Fzc2lnbih7IGdldDogZ2V0LFxuICAgICAgICBzZXQ6IHNldCwgY29udGV4dDogaW5zdGFuY2UgfSwgb3B0aW9ucykpO1xufSk7XG52YXIgY29tcHV0ZWRTdHJ1Y3REZWNvcmF0b3IgPSBjb21wdXRlZERlY29yYXRvcih7IGVxdWFsczogY29tcGFyZXIuc3RydWN0dXJhbCB9KTtcbi8qKlxuICogRGVjb3JhdG9yIGZvciBjbGFzcyBwcm9wZXJ0aWVzOiBAY29tcHV0ZWQgZ2V0IHZhbHVlKCkgeyByZXR1cm4gZXhwcjsgfS5cbiAqIEZvciBsZWdhY3kgcHVycG9zZXMgYWxzbyBpbnZva2FibGUgYXMgRVM1IG9ic2VydmFibGUgY3JlYXRlZDogYGNvbXB1dGVkKCgpID0+IGV4cHIpYDtcbiAqL1xudmFyIGNvbXB1dGVkID0gZnVuY3Rpb24gY29tcHV0ZWQoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBAY29tcHV0ZWRcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVkRGVjb3JhdG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmIChhcmcxICE9PSBudWxsICYmIHR5cGVvZiBhcmcxID09PSBcIm9iamVjdFwiICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gQGNvbXB1dGVkKHsgb3B0aW9ucyB9KVxuICAgICAgICByZXR1cm4gY29tcHV0ZWREZWNvcmF0b3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgLy8gY29tcHV0ZWQoZXhwciwgb3B0aW9ucz8pXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIGFyZzEgPT09IFwiZnVuY3Rpb25cIiwgXCJGaXJzdCBhcmd1bWVudCB0byBgY29tcHV0ZWRgIHNob3VsZCBiZSBhbiBleHByZXNzaW9uLlwiKTtcbiAgICAgICAgaW52YXJpYW50KGFyZ3VtZW50cy5sZW5ndGggPCAzLCBcIkNvbXB1dGVkIHRha2VzIG9uZSBvciB0d28gYXJndW1lbnRzIGlmIHVzZWQgYXMgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHZhciBvcHRzID0gdHlwZW9mIGFyZzIgPT09IFwib2JqZWN0XCIgPyBhcmcyIDoge307XG4gICAgb3B0cy5nZXQgPSBhcmcxO1xuICAgIG9wdHMuc2V0ID0gdHlwZW9mIGFyZzIgPT09IFwiZnVuY3Rpb25cIiA/IGFyZzIgOiBvcHRzLnNldDtcbiAgICBvcHRzLm5hbWUgPSBvcHRzLm5hbWUgfHwgYXJnMS5uYW1lIHx8IFwiXCI7IC8qIGZvciBnZW5lcmF0ZWQgbmFtZSAqL1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWRWYWx1ZShvcHRzKTtcbn07XG5jb21wdXRlZC5zdHJ1Y3QgPSBjb21wdXRlZFN0cnVjdERlY29yYXRvcjtcblxudmFyIElEZXJpdmF0aW9uU3RhdGU7XG4oZnVuY3Rpb24gKElEZXJpdmF0aW9uU3RhdGUpIHtcbiAgICAvLyBiZWZvcmUgYmVpbmcgcnVuIG9yIChvdXRzaWRlIGJhdGNoIGFuZCBub3QgYmVpbmcgb2JzZXJ2ZWQpXG4gICAgLy8gYXQgdGhpcyBwb2ludCBkZXJpdmF0aW9uIGlzIG5vdCBob2xkaW5nIGFueSBkYXRhIGFib3V0IGRlcGVuZGVuY3kgdHJlZVxuICAgIElEZXJpdmF0aW9uU3RhdGVbSURlcml2YXRpb25TdGF0ZVtcIk5PVF9UUkFDS0lOR1wiXSA9IC0xXSA9IFwiTk9UX1RSQUNLSU5HXCI7XG4gICAgLy8gbm8gc2hhbGxvdyBkZXBlbmRlbmN5IGNoYW5nZWQgc2luY2UgbGFzdCBjb21wdXRhdGlvblxuICAgIC8vIHdvbid0IHJlY2FsY3VsYXRlIGRlcml2YXRpb25cbiAgICAvLyB0aGlzIGlzIHdoYXQgbWFrZXMgbW9ieCBmYXN0XG4gICAgSURlcml2YXRpb25TdGF0ZVtJRGVyaXZhdGlvblN0YXRlW1wiVVBfVE9fREFURVwiXSA9IDBdID0gXCJVUF9UT19EQVRFXCI7XG4gICAgLy8gc29tZSBkZWVwIGRlcGVuZGVuY3kgY2hhbmdlZCwgYnV0IGRvbid0IGtub3cgaWYgc2hhbGxvdyBkZXBlbmRlbmN5IGNoYW5nZWRcbiAgICAvLyB3aWxsIHJlcXVpcmUgdG8gY2hlY2sgZmlyc3QgaWYgVVBfVE9fREFURSBvciBQT1NTSUJMWV9TVEFMRVxuICAgIC8vIGN1cnJlbnRseSBvbmx5IENvbXB1dGVkVmFsdWUgd2lsbCBwcm9wYWdhdGUgUE9TU0lCTFlfU1RBTEVcbiAgICAvL1xuICAgIC8vIGhhdmluZyB0aGlzIHN0YXRlIGlzIHNlY29uZCBiaWcgb3B0aW1pemF0aW9uOlxuICAgIC8vIGRvbid0IGhhdmUgdG8gcmVjb21wdXRlIG9uIGV2ZXJ5IGRlcGVuZGVuY3kgY2hhbmdlLCBidXQgb25seSB3aGVuIGl0J3MgbmVlZGVkXG4gICAgSURlcml2YXRpb25TdGF0ZVtJRGVyaXZhdGlvblN0YXRlW1wiUE9TU0lCTFlfU1RBTEVcIl0gPSAxXSA9IFwiUE9TU0lCTFlfU1RBTEVcIjtcbiAgICAvLyBBIHNoYWxsb3cgZGVwZW5kZW5jeSBoYXMgY2hhbmdlZCBzaW5jZSBsYXN0IGNvbXB1dGF0aW9uIGFuZCB0aGUgZGVyaXZhdGlvblxuICAgIC8vIHdpbGwgbmVlZCB0byByZWNvbXB1dGUgd2hlbiBpdCdzIG5lZWRlZCBuZXh0LlxuICAgIElEZXJpdmF0aW9uU3RhdGVbSURlcml2YXRpb25TdGF0ZVtcIlNUQUxFXCJdID0gMl0gPSBcIlNUQUxFXCI7XG59KShJRGVyaXZhdGlvblN0YXRlIHx8IChJRGVyaXZhdGlvblN0YXRlID0ge30pKTtcbnZhciBUcmFjZU1vZGU7XG4oZnVuY3Rpb24gKFRyYWNlTW9kZSkge1xuICAgIFRyYWNlTW9kZVtUcmFjZU1vZGVbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICBUcmFjZU1vZGVbVHJhY2VNb2RlW1wiTE9HXCJdID0gMV0gPSBcIkxPR1wiO1xuICAgIFRyYWNlTW9kZVtUcmFjZU1vZGVbXCJCUkVBS1wiXSA9IDJdID0gXCJCUkVBS1wiO1xufSkoVHJhY2VNb2RlIHx8IChUcmFjZU1vZGUgPSB7fSkpO1xudmFyIENhdWdodEV4Y2VwdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDYXVnaHRFeGNlcHRpb24oY2F1c2UpIHtcbiAgICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlO1xuICAgICAgICAvLyBFbXB0eVxuICAgIH1cbiAgICByZXR1cm4gQ2F1Z2h0RXhjZXB0aW9uO1xufSgpKTtcbmZ1bmN0aW9uIGlzQ2F1Z2h0RXhjZXB0aW9uKGUpIHtcbiAgICByZXR1cm4gZSBpbnN0YW5jZW9mIENhdWdodEV4Y2VwdGlvbjtcbn1cbi8qKlxuICogRmluZHMgb3V0IHdoZXRoZXIgYW55IGRlcGVuZGVuY3kgb2YgdGhlIGRlcml2YXRpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG4gKiBJZiBkZXBlbmRlbmNpZXNTdGF0ZSBpcyAxIHRoZW4gaXQgd2lsbCByZWNhbGN1bGF0ZSBkZXBlbmRlbmNpZXMsXG4gKiBpZiBhbnkgZGVwZW5kZW5jeSBjaGFuZ2VkIGl0IHdpbGwgcHJvcGFnYXRlIGl0IGJ5IGNoYW5naW5nIGRlcGVuZGVuY2llc1N0YXRlIHRvIDIuXG4gKlxuICogQnkgaXRlcmF0aW5nIG92ZXIgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZXBvcnRlZCBhbmRcbiAqIHN0b3BwaW5nIG9uIHRoZSBmaXJzdCBjaGFuZ2UsIGFsbCB0aGUgcmVjYWxjdWxhdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGZvciBDb21wdXRlZFZhbHVlc1xuICogdGhhdCB3aWxsIGJlIHRyYWNrZWQgYnkgZGVyaXZhdGlvbi4gVGhhdCBpcyBiZWNhdXNlIHdlIGFzc3VtZSB0aGF0IGlmIHRoZSBmaXJzdCB4XG4gKiBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcml2YXRpb24gZG9lc24ndCBjaGFuZ2UgdGhlbiB0aGUgZGVyaXZhdGlvbiBzaG91bGQgcnVuIHRoZSBzYW1lIHdheVxuICogdXAgdW50aWwgYWNjZXNzaW5nIHgtdGggZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkQ29tcHV0ZShkZXJpdmF0aW9uKSB7XG4gICAgc3dpdGNoIChkZXJpdmF0aW9uLmRlcGVuZGVuY2llc1N0YXRlKSB7XG4gICAgICAgIGNhc2UgSURlcml2YXRpb25TdGF0ZS5VUF9UT19EQVRFOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlIElEZXJpdmF0aW9uU3RhdGUuTk9UX1RSQUNLSU5HOlxuICAgICAgICBjYXNlIElEZXJpdmF0aW9uU3RhdGUuU1RBTEU6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSBJRGVyaXZhdGlvblN0YXRlLlBPU1NJQkxZX1NUQUxFOiB7XG4gICAgICAgICAgICAvLyBzdGF0ZSBwcm9wYWdhdGlvbiBjYW4gb2NjdXIgb3V0c2lkZSBvZiBhY3Rpb24vcmVhY3RpdmUgY29udGV4dCAjMjE5NVxuICAgICAgICAgICAgdmFyIHByZXZBbGxvd1N0YXRlUmVhZHMgPSBhbGxvd1N0YXRlUmVhZHNTdGFydCh0cnVlKTtcbiAgICAgICAgICAgIHZhciBwcmV2VW50cmFja2VkID0gdW50cmFja2VkU3RhcnQoKTsgLy8gbm8gbmVlZCBmb3IgdGhvc2UgY29tcHV0ZWRzIHRvIGJlIHJlcG9ydGVkLCB0aGV5IHdpbGwgYmUgcGlja2VkIHVwIGluIHRyYWNrRGVyaXZlZEZ1bmN0aW9uLlxuICAgICAgICAgICAgdmFyIG9icyA9IGRlcml2YXRpb24ub2JzZXJ2aW5nLCBsID0gb2JzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IG9ic1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNDb21wdXRlZFZhbHVlKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFN0YXRlLmRpc2FibGVFcnJvckJvdW5kYXJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5nZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmdldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlICpvciogZXhjZXB0aW9uIGF0IHRoaXMgbW9tZW50LCBidXQgaWYgdGhlcmUgaXMgb25lLCBub3RpZnkgYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW50cmFja2VkRW5kKHByZXZVbnRyYWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93U3RhdGVSZWFkc0VuZChwcmV2QWxsb3dTdGF0ZVJlYWRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBpZiBDb21wdXRlZFZhbHVlIGBvYmpgIGFjdHVhbGx5IGNoYW5nZWQgaXQgd2lsbCBiZSBjb21wdXRlZCBhbmQgcHJvcGFnYXRlZCB0byBpdHMgb2JzZXJ2ZXJzLlxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgYGRlcml2YXRpb25gIGlzIGFuIG9ic2VydmVyIG9mIGBvYmpgXG4gICAgICAgICAgICAgICAgICAgIC8vIGludmFyaWFudFNob3VsZENvbXB1dGUoZGVyaXZhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcml2YXRpb24uZGVwZW5kZW5jaWVzU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuU1RBTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVudHJhY2tlZEVuZChwcmV2VW50cmFja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93U3RhdGVSZWFkc0VuZChwcmV2QWxsb3dTdGF0ZVJlYWRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhbmdlRGVwZW5kZW5jaWVzU3RhdGVUbzAoZGVyaXZhdGlvbik7XG4gICAgICAgICAgICB1bnRyYWNrZWRFbmQocHJldlVudHJhY2tlZCk7XG4gICAgICAgICAgICBhbGxvd1N0YXRlUmVhZHNFbmQocHJldkFsbG93U3RhdGVSZWFkcyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBmdW5jdGlvbiBpbnZhcmlhbnRTaG91bGRDb21wdXRlKGRlcml2YXRpb246IElEZXJpdmF0aW9uKSB7XG4vLyAgICAgY29uc3QgbmV3RGVwU3RhdGUgPSAoZGVyaXZhdGlvbiBhcyBhbnkpLmRlcGVuZGVuY2llc1N0YXRlXG4vLyAgICAgaWYgKFxuLy8gICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgJiZcbi8vICAgICAgICAgKG5ld0RlcFN0YXRlID09PSBJRGVyaXZhdGlvblN0YXRlLlBPU1NJQkxZX1NUQUxFIHx8XG4vLyAgICAgICAgICAgICBuZXdEZXBTdGF0ZSA9PT0gSURlcml2YXRpb25TdGF0ZS5OT1RfVFJBQ0tJTkcpXG4vLyAgICAgKVxuLy8gICAgICAgICBmYWlsKFwiSWxsZWdhbCBkZXBlbmRlbmN5IHN0YXRlXCIpXG4vLyB9XG5mdW5jdGlvbiBpc0NvbXB1dGluZ0Rlcml2YXRpb24oKSB7XG4gICAgcmV0dXJuIGdsb2JhbFN0YXRlLnRyYWNraW5nRGVyaXZhdGlvbiAhPT0gbnVsbDsgLy8gZmlsdGVyIG91dCBhY3Rpb25zIGluc2lkZSBjb21wdXRhdGlvbnNcbn1cbmZ1bmN0aW9uIGNoZWNrSWZTdGF0ZU1vZGlmaWNhdGlvbnNBcmVBbGxvd2VkKGF0b20pIHtcbiAgICB2YXIgaGFzT2JzZXJ2ZXJzID0gYXRvbS5vYnNlcnZlcnMuc2l6ZSA+IDA7XG4gICAgLy8gU2hvdWxkIG5ldmVyIGJlIHBvc3NpYmxlIHRvIGNoYW5nZSBhbiBvYnNlcnZlZCBvYnNlcnZhYmxlIGZyb20gaW5zaWRlIGNvbXB1dGVkLCBzZWUgIzc5OFxuICAgIGlmIChnbG9iYWxTdGF0ZS5jb21wdXRhdGlvbkRlcHRoID4gMCAmJiBoYXNPYnNlcnZlcnMpXG4gICAgICAgIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBcIkNvbXB1dGVkIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgdG8gY2F1c2Ugc2lkZSBlZmZlY3RzIGJ5IGNoYW5naW5nIG9ic2VydmFibGVzIHRoYXQgYXJlIGFscmVhZHkgYmVpbmcgb2JzZXJ2ZWQuIFRyaWVkIHRvIG1vZGlmeTogXCIgKyBhdG9tLm5hbWUpO1xuICAgIC8vIFNob3VsZCBub3QgYmUgcG9zc2libGUgdG8gY2hhbmdlIG9ic2VydmVkIHN0YXRlIG91dHNpZGUgc3RyaWN0IG1vZGUsIGV4Y2VwdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHNlZSAjNTYzXG4gICAgaWYgKCFnbG9iYWxTdGF0ZS5hbGxvd1N0YXRlQ2hhbmdlcyAmJiAoaGFzT2JzZXJ2ZXJzIHx8IGdsb2JhbFN0YXRlLmVuZm9yY2VBY3Rpb25zID09PSBcInN0cmljdFwiKSlcbiAgICAgICAgZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgIChnbG9iYWxTdGF0ZS5lbmZvcmNlQWN0aW9uc1xuICAgICAgICAgICAgICAgID8gXCJTaW5jZSBzdHJpY3QtbW9kZSBpcyBlbmFibGVkLCBjaGFuZ2luZyBvYnNlcnZlZCBvYnNlcnZhYmxlIHZhbHVlcyBvdXRzaWRlIGFjdGlvbnMgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB3cmFwIHRoZSBjb2RlIGluIGFuIGBhY3Rpb25gIGlmIHRoaXMgY2hhbmdlIGlzIGludGVuZGVkLiBUcmllZCB0byBtb2RpZnk6IFwiXG4gICAgICAgICAgICAgICAgOiBcIlNpZGUgZWZmZWN0cyBsaWtlIGNoYW5naW5nIHN0YXRlIGFyZSBub3QgYWxsb3dlZCBhdCB0aGlzIHBvaW50LiBBcmUgeW91IHRyeWluZyB0byBtb2RpZnkgc3RhdGUgZnJvbSwgZm9yIGV4YW1wbGUsIHRoZSByZW5kZXIgZnVuY3Rpb24gb2YgYSBSZWFjdCBjb21wb25lbnQ/IFRyaWVkIHRvIG1vZGlmeTogXCIpICtcbiAgICAgICAgICAgICAgICBhdG9tLm5hbWUpO1xufVxuZnVuY3Rpb24gY2hlY2tJZlN0YXRlUmVhZHNBcmVBbGxvd2VkKG9ic2VydmFibGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICFnbG9iYWxTdGF0ZS5hbGxvd1N0YXRlUmVhZHMgJiZcbiAgICAgICAgZ2xvYmFsU3RhdGUub2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb24pIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW21vYnhdIE9ic2VydmFibGUgXCIgKyBvYnNlcnZhYmxlLm5hbWUgKyBcIiBiZWluZyByZWFkIG91dHNpZGUgYSByZWFjdGl2ZSBjb250ZXh0XCIpO1xuICAgIH1cbn1cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGBmYCBhbmQgdHJhY2tzIHdoaWNoIG9ic2VydmFibGVzIGFyZSBiZWluZyBhY2Nlc3NlZC5cbiAqIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgb24gdGhlIGBkZXJpdmF0aW9uYCBvYmplY3QgYW5kIHRoZSBkZXJpdmF0aW9uIGlzIHJlZ2lzdGVyZWRcbiAqIGFzIG9ic2VydmVyIG9mIGFueSBvZiB0aGUgYWNjZXNzZWQgb2JzZXJ2YWJsZXMuXG4gKi9cbmZ1bmN0aW9uIHRyYWNrRGVyaXZlZEZ1bmN0aW9uKGRlcml2YXRpb24sIGYsIGNvbnRleHQpIHtcbiAgICB2YXIgcHJldkFsbG93U3RhdGVSZWFkcyA9IGFsbG93U3RhdGVSZWFkc1N0YXJ0KHRydWUpO1xuICAgIC8vIHByZSBhbGxvY2F0ZSBhcnJheSBhbGxvY2F0aW9uICsgcm9vbSBmb3IgdmFyaWF0aW9uIGluIGRlcHNcbiAgICAvLyBhcnJheSB3aWxsIGJlIHRyaW1tZWQgYnkgYmluZERlcGVuZGVuY2llc1xuICAgIGNoYW5nZURlcGVuZGVuY2llc1N0YXRlVG8wKGRlcml2YXRpb24pO1xuICAgIGRlcml2YXRpb24ubmV3T2JzZXJ2aW5nID0gbmV3IEFycmF5KGRlcml2YXRpb24ub2JzZXJ2aW5nLmxlbmd0aCArIDEwMCk7XG4gICAgZGVyaXZhdGlvbi51bmJvdW5kRGVwc0NvdW50ID0gMDtcbiAgICBkZXJpdmF0aW9uLnJ1bklkID0gKytnbG9iYWxTdGF0ZS5ydW5JZDtcbiAgICB2YXIgcHJldlRyYWNraW5nID0gZ2xvYmFsU3RhdGUudHJhY2tpbmdEZXJpdmF0aW9uO1xuICAgIGdsb2JhbFN0YXRlLnRyYWNraW5nRGVyaXZhdGlvbiA9IGRlcml2YXRpb247XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoZ2xvYmFsU3RhdGUuZGlzYWJsZUVycm9yQm91bmRhcmllcyA9PT0gdHJ1ZSkge1xuICAgICAgICByZXN1bHQgPSBmLmNhbGwoY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZi5jYWxsKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgQ2F1Z2h0RXhjZXB0aW9uKGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdsb2JhbFN0YXRlLnRyYWNraW5nRGVyaXZhdGlvbiA9IHByZXZUcmFja2luZztcbiAgICBiaW5kRGVwZW5kZW5jaWVzKGRlcml2YXRpb24pO1xuICAgIHdhcm5BYm91dERlcml2YXRpb25XaXRob3V0RGVwZW5kZW5jaWVzKGRlcml2YXRpb24pO1xuICAgIGFsbG93U3RhdGVSZWFkc0VuZChwcmV2QWxsb3dTdGF0ZVJlYWRzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gd2FybkFib3V0RGVyaXZhdGlvbldpdGhvdXREZXBlbmRlbmNpZXMoZGVyaXZhdGlvbikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoZGVyaXZhdGlvbi5vYnNlcnZpbmcubGVuZ3RoICE9PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGdsb2JhbFN0YXRlLnJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlIHx8IGRlcml2YXRpb24ucmVxdWlyZXNPYnNlcnZhYmxlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlttb2J4XSBEZXJpdmF0aW9uIFwiICsgZGVyaXZhdGlvbi5uYW1lICsgXCIgaXMgY3JlYXRlZC91cGRhdGVkIHdpdGhvdXQgcmVhZGluZyBhbnkgb2JzZXJ2YWJsZSB2YWx1ZVwiKTtcbiAgICB9XG59XG4vKipcbiAqIGRpZmZzIG5ld09ic2VydmluZyB3aXRoIG9ic2VydmluZy5cbiAqIHVwZGF0ZSBvYnNlcnZpbmcgdG8gYmUgbmV3T2JzZXJ2aW5nIHdpdGggdW5pcXVlIG9ic2VydmFibGVzXG4gKiBub3RpZnkgb2JzZXJ2ZXJzIHRoYXQgYmVjb21lIG9ic2VydmVkL3Vub2JzZXJ2ZWRcbiAqL1xuZnVuY3Rpb24gYmluZERlcGVuZGVuY2llcyhkZXJpdmF0aW9uKSB7XG4gICAgLy8gaW52YXJpYW50KGRlcml2YXRpb24uZGVwZW5kZW5jaWVzU3RhdGUgIT09IElEZXJpdmF0aW9uU3RhdGUuTk9UX1RSQUNLSU5HLCBcIklOVEVSTkFMIEVSUk9SIGJpbmREZXBlbmRlbmNpZXMgZXhwZWN0cyBkZXJpdmF0aW9uLmRlcGVuZGVuY2llc1N0YXRlICE9PSAtMVwiKTtcbiAgICB2YXIgcHJldk9ic2VydmluZyA9IGRlcml2YXRpb24ub2JzZXJ2aW5nO1xuICAgIHZhciBvYnNlcnZpbmcgPSAoZGVyaXZhdGlvbi5vYnNlcnZpbmcgPSBkZXJpdmF0aW9uLm5ld09ic2VydmluZyk7XG4gICAgdmFyIGxvd2VzdE5ld09ic2VydmluZ0Rlcml2YXRpb25TdGF0ZSA9IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURTtcbiAgICAvLyBHbyB0aHJvdWdoIGFsbCBuZXcgb2JzZXJ2YWJsZXMgYW5kIGNoZWNrIGRpZmZWYWx1ZTogKHRoaXMgbGlzdCBjYW4gY29udGFpbiBkdXBsaWNhdGVzKTpcbiAgICAvLyAgIDA6IGZpcnN0IG9jY3VycmVuY2UsIGNoYW5nZSB0byAxIGFuZCBrZWVwIGl0XG4gICAgLy8gICAxOiBleHRyYSBvY2N1cnJlbmNlLCBkcm9wIGl0XG4gICAgdmFyIGkwID0gMCwgbCA9IGRlcml2YXRpb24udW5ib3VuZERlcHNDb3VudDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgZGVwID0gb2JzZXJ2aW5nW2ldO1xuICAgICAgICBpZiAoZGVwLmRpZmZWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgZGVwLmRpZmZWYWx1ZSA9IDE7XG4gICAgICAgICAgICBpZiAoaTAgIT09IGkpXG4gICAgICAgICAgICAgICAgb2JzZXJ2aW5nW2kwXSA9IGRlcDtcbiAgICAgICAgICAgIGkwKys7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBjYXN0IGlzICdzYWZlJyBoZXJlLCBiZWNhdXNlIGlmIGRlcCBpcyBJT2JzZXJ2YWJsZSwgYGRlcGVuZGVuY2llc1N0YXRlYCB3aWxsIGJlIHVuZGVmaW5lZCxcbiAgICAgICAgLy8gbm90IGhpdHRpbmcgdGhlIGNvbmRpdGlvblxuICAgICAgICBpZiAoZGVwLmRlcGVuZGVuY2llc1N0YXRlID4gbG93ZXN0TmV3T2JzZXJ2aW5nRGVyaXZhdGlvblN0YXRlKSB7XG4gICAgICAgICAgICBsb3dlc3ROZXdPYnNlcnZpbmdEZXJpdmF0aW9uU3RhdGUgPSBkZXAuZGVwZW5kZW5jaWVzU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb2JzZXJ2aW5nLmxlbmd0aCA9IGkwO1xuICAgIGRlcml2YXRpb24ubmV3T2JzZXJ2aW5nID0gbnVsbDsgLy8gbmV3T2JzZXJ2aW5nIHNob3VsZG4ndCBiZSBuZWVkZWQgb3V0c2lkZSB0cmFja2luZyAoc3RhdGVtZW50IG1vdmVkIGRvd24gdG8gd29yayBhcm91bmQgRkYgYnVnLCBzZWUgIzYxNClcbiAgICAvLyBHbyB0aHJvdWdoIGFsbCBvbGQgb2JzZXJ2YWJsZXMgYW5kIGNoZWNrIGRpZmZWYWx1ZTogKGl0IGlzIHVuaXF1ZSBhZnRlciBsYXN0IGJpbmREZXBlbmRlbmNpZXMpXG4gICAgLy8gICAwOiBpdCdzIG5vdCBpbiBuZXcgb2JzZXJ2YWJsZXMsIHVub2JzZXJ2ZSBpdFxuICAgIC8vICAgMTogaXQga2VlcHMgYmVpbmcgb2JzZXJ2ZWQsIGRvbid0IHdhbnQgdG8gbm90aWZ5IGl0LiBjaGFuZ2UgdG8gMFxuICAgIGwgPSBwcmV2T2JzZXJ2aW5nLmxlbmd0aDtcbiAgICB3aGlsZSAobC0tKSB7XG4gICAgICAgIHZhciBkZXAgPSBwcmV2T2JzZXJ2aW5nW2xdO1xuICAgICAgICBpZiAoZGVwLmRpZmZWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIoZGVwLCBkZXJpdmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBkZXAuZGlmZlZhbHVlID0gMDtcbiAgICB9XG4gICAgLy8gR28gdGhyb3VnaCBhbGwgbmV3IG9ic2VydmFibGVzIGFuZCBjaGVjayBkaWZmVmFsdWU6IChub3cgaXQgc2hvdWxkIGJlIHVuaXF1ZSlcbiAgICAvLyAgIDA6IGl0IHdhcyBzZXQgdG8gMCBpbiBsYXN0IGxvb3AuIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuXG4gICAgLy8gICAxOiBpdCB3YXNuJ3Qgb2JzZXJ2ZWQsIGxldCdzIG9ic2VydmUgaXQuIHNldCBiYWNrIHRvIDBcbiAgICB3aGlsZSAoaTAtLSkge1xuICAgICAgICB2YXIgZGVwID0gb2JzZXJ2aW5nW2kwXTtcbiAgICAgICAgaWYgKGRlcC5kaWZmVmFsdWUgPT09IDEpIHtcbiAgICAgICAgICAgIGRlcC5kaWZmVmFsdWUgPSAwO1xuICAgICAgICAgICAgYWRkT2JzZXJ2ZXIoZGVwLCBkZXJpdmF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTb21lIG5ldyBvYnNlcnZlZCBkZXJpdmF0aW9ucyBtYXkgYmVjb21lIHN0YWxlIGR1cmluZyB0aGlzIGRlcml2YXRpb24gY29tcHV0YXRpb25cbiAgICAvLyBzbyB0aGV5IGhhdmUgaGFkIG5vIGNoYW5jZSB0byBwcm9wYWdhdGUgc3RhbGVuZXNzICgjOTE2KVxuICAgIGlmIChsb3dlc3ROZXdPYnNlcnZpbmdEZXJpdmF0aW9uU3RhdGUgIT09IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURSkge1xuICAgICAgICBkZXJpdmF0aW9uLmRlcGVuZGVuY2llc1N0YXRlID0gbG93ZXN0TmV3T2JzZXJ2aW5nRGVyaXZhdGlvblN0YXRlO1xuICAgICAgICBkZXJpdmF0aW9uLm9uQmVjb21lU3RhbGUoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjbGVhck9ic2VydmluZyhkZXJpdmF0aW9uKSB7XG4gICAgLy8gaW52YXJpYW50KGdsb2JhbFN0YXRlLmluQmF0Y2ggPiAwLCBcIklOVEVSTkFMIEVSUk9SIGNsZWFyT2JzZXJ2aW5nIHNob3VsZCBiZSBjYWxsZWQgb25seSBpbnNpZGUgYmF0Y2hcIik7XG4gICAgdmFyIG9icyA9IGRlcml2YXRpb24ub2JzZXJ2aW5nO1xuICAgIGRlcml2YXRpb24ub2JzZXJ2aW5nID0gW107XG4gICAgdmFyIGkgPSBvYnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pXG4gICAgICAgIHJlbW92ZU9ic2VydmVyKG9ic1tpXSwgZGVyaXZhdGlvbik7XG4gICAgZGVyaXZhdGlvbi5kZXBlbmRlbmNpZXNTdGF0ZSA9IElEZXJpdmF0aW9uU3RhdGUuTk9UX1RSQUNLSU5HO1xufVxuZnVuY3Rpb24gdW50cmFja2VkKGFjdGlvbikge1xuICAgIHZhciBwcmV2ID0gdW50cmFja2VkU3RhcnQoKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYWN0aW9uKCk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB1bnRyYWNrZWRFbmQocHJldik7XG4gICAgfVxufVxuZnVuY3Rpb24gdW50cmFja2VkU3RhcnQoKSB7XG4gICAgdmFyIHByZXYgPSBnbG9iYWxTdGF0ZS50cmFja2luZ0Rlcml2YXRpb247XG4gICAgZ2xvYmFsU3RhdGUudHJhY2tpbmdEZXJpdmF0aW9uID0gbnVsbDtcbiAgICByZXR1cm4gcHJldjtcbn1cbmZ1bmN0aW9uIHVudHJhY2tlZEVuZChwcmV2KSB7XG4gICAgZ2xvYmFsU3RhdGUudHJhY2tpbmdEZXJpdmF0aW9uID0gcHJldjtcbn1cbmZ1bmN0aW9uIGFsbG93U3RhdGVSZWFkc1N0YXJ0KGFsbG93U3RhdGVSZWFkcykge1xuICAgIHZhciBwcmV2ID0gZ2xvYmFsU3RhdGUuYWxsb3dTdGF0ZVJlYWRzO1xuICAgIGdsb2JhbFN0YXRlLmFsbG93U3RhdGVSZWFkcyA9IGFsbG93U3RhdGVSZWFkcztcbiAgICByZXR1cm4gcHJldjtcbn1cbmZ1bmN0aW9uIGFsbG93U3RhdGVSZWFkc0VuZChwcmV2KSB7XG4gICAgZ2xvYmFsU3RhdGUuYWxsb3dTdGF0ZVJlYWRzID0gcHJldjtcbn1cbi8qKlxuICogbmVlZGVkIHRvIGtlZXAgYGxvd2VzdE9ic2VydmVyU3RhdGVgIGNvcnJlY3QuIHdoZW4gY2hhbmdpbmcgZnJvbSAoMiBvciAxKSB0byAwXG4gKlxuICovXG5mdW5jdGlvbiBjaGFuZ2VEZXBlbmRlbmNpZXNTdGF0ZVRvMChkZXJpdmF0aW9uKSB7XG4gICAgaWYgKGRlcml2YXRpb24uZGVwZW5kZW5jaWVzU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGRlcml2YXRpb24uZGVwZW5kZW5jaWVzU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlVQX1RPX0RBVEU7XG4gICAgdmFyIG9icyA9IGRlcml2YXRpb24ub2JzZXJ2aW5nO1xuICAgIHZhciBpID0gb2JzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKVxuICAgICAgICBvYnNbaV0ubG93ZXN0T2JzZXJ2ZXJTdGF0ZSA9IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURTtcbn1cblxuLy8gd2UgZG9uJ3QgdXNlIGdsb2JhbFN0YXRlIGZvciB0aGVzZSBpbiBvcmRlciB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXMgd2l0aCBtdWx0aXBsZVxuLy8gbW9ieCB2ZXJzaW9uc1xudmFyIGN1cnJlbnRBY3Rpb25JZCA9IDA7XG52YXIgbmV4dEFjdGlvbklkID0gMTtcbnZhciBmdW5jdGlvbk5hbWVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7IH0sIFwibmFtZVwiKTtcbnZhciBpc0Z1bmN0aW9uTmFtZUNvbmZpZ3VyYWJsZSA9IGZ1bmN0aW9uTmFtZURlc2NyaXB0b3IgJiYgZnVuY3Rpb25OYW1lRGVzY3JpcHRvci5jb25maWd1cmFibGU7XG5mdW5jdGlvbiBjcmVhdGVBY3Rpb24oYWN0aW9uTmFtZSwgZm4sIHJlZikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaW52YXJpYW50KHR5cGVvZiBmbiA9PT0gXCJmdW5jdGlvblwiLCBcImBhY3Rpb25gIGNhbiBvbmx5IGJlIGludm9rZWQgb24gZnVuY3Rpb25zXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWUgIT09IFwic3RyaW5nXCIgfHwgIWFjdGlvbk5hbWUpXG4gICAgICAgICAgICBmYWlsKFwiYWN0aW9ucyBzaG91bGQgaGF2ZSB2YWxpZCBuYW1lcywgZ290OiAnXCIgKyBhY3Rpb25OYW1lICsgXCInXCIpO1xuICAgIH1cbiAgICB2YXIgcmVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZXhlY3V0ZUFjdGlvbihhY3Rpb25OYW1lLCBmbiwgcmVmIHx8IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICByZXMuaXNNb2J4QWN0aW9uID0gdHJ1ZTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uTmFtZUNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcywgXCJuYW1lXCIsIHsgdmFsdWU6IGFjdGlvbk5hbWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGV4ZWN1dGVBY3Rpb24oYWN0aW9uTmFtZSwgZm4sIHNjb3BlLCBhcmdzKSB7XG4gICAgdmFyIHJ1bkluZm8gPSBfc3RhcnRBY3Rpb24oYWN0aW9uTmFtZSwgc2NvcGUsIGFyZ3MpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShzY29wZSwgYXJncyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcnVuSW5mby5lcnJvciA9IGVycjtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgX2VuZEFjdGlvbihydW5JbmZvKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfc3RhcnRBY3Rpb24oYWN0aW9uTmFtZSwgc2NvcGUsIGFyZ3MpIHtcbiAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCkgJiYgISFhY3Rpb25OYW1lO1xuICAgIHZhciBzdGFydFRpbWUgPSAwO1xuICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHZhciBsID0gKGFyZ3MgJiYgYXJncy5sZW5ndGgpIHx8IDA7XG4gICAgICAgIHZhciBmbGF0dGVuZEFyZ3MgPSBuZXcgQXJyYXkobCk7XG4gICAgICAgIGlmIChsID4gMClcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgICAgICAgIGZsYXR0ZW5kQXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIHNweVJlcG9ydFN0YXJ0KHtcbiAgICAgICAgICAgIHR5cGU6IFwiYWN0aW9uXCIsXG4gICAgICAgICAgICBuYW1lOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgb2JqZWN0OiBzY29wZSxcbiAgICAgICAgICAgIGFyZ3VtZW50czogZmxhdHRlbmRBcmdzXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgcHJldkRlcml2YXRpb24gPSB1bnRyYWNrZWRTdGFydCgpO1xuICAgIHN0YXJ0QmF0Y2goKTtcbiAgICB2YXIgcHJldkFsbG93U3RhdGVDaGFuZ2VzID0gYWxsb3dTdGF0ZUNoYW5nZXNTdGFydCh0cnVlKTtcbiAgICB2YXIgcHJldkFsbG93U3RhdGVSZWFkcyA9IGFsbG93U3RhdGVSZWFkc1N0YXJ0KHRydWUpO1xuICAgIHZhciBydW5JbmZvID0ge1xuICAgICAgICBwcmV2RGVyaXZhdGlvbjogcHJldkRlcml2YXRpb24sXG4gICAgICAgIHByZXZBbGxvd1N0YXRlQ2hhbmdlczogcHJldkFsbG93U3RhdGVDaGFuZ2VzLFxuICAgICAgICBwcmV2QWxsb3dTdGF0ZVJlYWRzOiBwcmV2QWxsb3dTdGF0ZVJlYWRzLFxuICAgICAgICBub3RpZnlTcHk6IG5vdGlmeVNweSxcbiAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgICAgIGFjdGlvbklkOiBuZXh0QWN0aW9uSWQrKyxcbiAgICAgICAgcGFyZW50QWN0aW9uSWQ6IGN1cnJlbnRBY3Rpb25JZFxuICAgIH07XG4gICAgY3VycmVudEFjdGlvbklkID0gcnVuSW5mby5hY3Rpb25JZDtcbiAgICByZXR1cm4gcnVuSW5mbztcbn1cbmZ1bmN0aW9uIF9lbmRBY3Rpb24ocnVuSW5mbykge1xuICAgIGlmIChjdXJyZW50QWN0aW9uSWQgIT09IHJ1bkluZm8uYWN0aW9uSWQpIHtcbiAgICAgICAgZmFpbChcImludmFsaWQgYWN0aW9uIHN0YWNrLiBkaWQgeW91IGZvcmdldCB0byBmaW5pc2ggYW4gYWN0aW9uP1wiKTtcbiAgICB9XG4gICAgY3VycmVudEFjdGlvbklkID0gcnVuSW5mby5wYXJlbnRBY3Rpb25JZDtcbiAgICBpZiAocnVuSW5mby5lcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGdsb2JhbFN0YXRlLnN1cHByZXNzUmVhY3Rpb25FcnJvcnMgPSB0cnVlO1xuICAgIH1cbiAgICBhbGxvd1N0YXRlQ2hhbmdlc0VuZChydW5JbmZvLnByZXZBbGxvd1N0YXRlQ2hhbmdlcyk7XG4gICAgYWxsb3dTdGF0ZVJlYWRzRW5kKHJ1bkluZm8ucHJldkFsbG93U3RhdGVSZWFkcyk7XG4gICAgZW5kQmF0Y2goKTtcbiAgICB1bnRyYWNrZWRFbmQocnVuSW5mby5wcmV2RGVyaXZhdGlvbik7XG4gICAgaWYgKHJ1bkluZm8ubm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBzcHlSZXBvcnRFbmQoeyB0aW1lOiBEYXRlLm5vdygpIC0gcnVuSW5mby5zdGFydFRpbWUgfSk7XG4gICAgfVxuICAgIGdsb2JhbFN0YXRlLnN1cHByZXNzUmVhY3Rpb25FcnJvcnMgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFsbG93U3RhdGVDaGFuZ2VzKGFsbG93U3RhdGVDaGFuZ2VzLCBmdW5jKSB7XG4gICAgdmFyIHByZXYgPSBhbGxvd1N0YXRlQ2hhbmdlc1N0YXJ0KGFsbG93U3RhdGVDaGFuZ2VzKTtcbiAgICB2YXIgcmVzO1xuICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IGZ1bmMoKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGFsbG93U3RhdGVDaGFuZ2VzRW5kKHByZXYpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gYWxsb3dTdGF0ZUNoYW5nZXNTdGFydChhbGxvd1N0YXRlQ2hhbmdlcykge1xuICAgIHZhciBwcmV2ID0gZ2xvYmFsU3RhdGUuYWxsb3dTdGF0ZUNoYW5nZXM7XG4gICAgZ2xvYmFsU3RhdGUuYWxsb3dTdGF0ZUNoYW5nZXMgPSBhbGxvd1N0YXRlQ2hhbmdlcztcbiAgICByZXR1cm4gcHJldjtcbn1cbmZ1bmN0aW9uIGFsbG93U3RhdGVDaGFuZ2VzRW5kKHByZXYpIHtcbiAgICBnbG9iYWxTdGF0ZS5hbGxvd1N0YXRlQ2hhbmdlcyA9IHByZXY7XG59XG5mdW5jdGlvbiBhbGxvd1N0YXRlQ2hhbmdlc0luc2lkZUNvbXB1dGVkKGZ1bmMpIHtcbiAgICB2YXIgcHJldiA9IGdsb2JhbFN0YXRlLmNvbXB1dGF0aW9uRGVwdGg7XG4gICAgZ2xvYmFsU3RhdGUuY29tcHV0YXRpb25EZXB0aCA9IDA7XG4gICAgdmFyIHJlcztcbiAgICB0cnkge1xuICAgICAgICByZXMgPSBmdW5jKCk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBnbG9iYWxTdGF0ZS5jb21wdXRhdGlvbkRlcHRoID0gcHJldjtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxudmFyIE9ic2VydmFibGVWYWx1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT2JzZXJ2YWJsZVZhbHVlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGVWYWx1ZSh2YWx1ZSwgZW5oYW5jZXIsIG5hbWUsIG5vdGlmeVNweSwgZXF1YWxzKSB7XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IFwiT2JzZXJ2YWJsZVZhbHVlQFwiICsgZ2V0TmV4dElkKCk7IH1cbiAgICAgICAgaWYgKG5vdGlmeVNweSA9PT0gdm9pZCAwKSB7IG5vdGlmeVNweSA9IHRydWU7IH1cbiAgICAgICAgaWYgKGVxdWFscyA9PT0gdm9pZCAwKSB7IGVxdWFscyA9IGNvbXBhcmVyLmRlZmF1bHQ7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZW5oYW5jZXIgPSBlbmhhbmNlcjtcbiAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIF90aGlzLmVxdWFscyA9IGVxdWFscztcbiAgICAgICAgX3RoaXMuaGFzVW5yZXBvcnRlZENoYW5nZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IGVuaGFuY2VyKHZhbHVlLCB1bmRlZmluZWQsIG5hbWUpO1xuICAgICAgICBpZiAobm90aWZ5U3B5ICYmIGlzU3B5RW5hYmxlZCgpICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgLy8gb25seSBub3RpZnkgc3B5IGlmIHRoaXMgaXMgYSBzdGFuZC1hbG9uZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICBzcHlSZXBvcnQoeyB0eXBlOiBcImNyZWF0ZVwiLCBuYW1lOiBfdGhpcy5uYW1lLCBuZXdWYWx1ZTogXCJcIiArIF90aGlzLnZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JzZXJ2YWJsZVZhbHVlLnByb3RvdHlwZS5kZWhhbmNlVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVoYW5jZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZVZhbHVlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnByZXBhcmVOZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gZ2xvYmFsU3RhdGUuVU5DSEFOR0VEKSB7XG4gICAgICAgICAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCk7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHNweVJlcG9ydFN0YXJ0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZVZhbHVlLnByb3RvdHlwZS5wcmVwYXJlTmV3VmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgY2hlY2tJZlN0YXRlTW9kaWZpY2F0aW9uc0FyZUFsbG93ZWQodGhpcyk7XG4gICAgICAgIGlmIChoYXNJbnRlcmNlcHRvcnModGhpcykpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBpbnRlcmNlcHRDaGFuZ2UodGhpcywge1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3RhdGUuVU5DSEFOR0VEO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgbW9kaWZpZXJcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmVuaGFuY2VyKG5ld1ZhbHVlLCB0aGlzLnZhbHVlLCB0aGlzLm5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHModGhpcy52YWx1ZSwgbmV3VmFsdWUpID8gZ2xvYmFsU3RhdGUuVU5DSEFOR0VEIDogbmV3VmFsdWU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLnNldE5ld1ZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgIGlmIChoYXNMaXN0ZW5lcnModGhpcykpIHtcbiAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGVWYWx1ZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVWYWx1ZS5wcm90b3R5cGUuaW50ZXJjZXB0ID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVySW50ZXJjZXB0b3IodGhpcywgaGFuZGxlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAobGlzdGVuZXIsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICBpZiAoZmlyZUltbWVkaWF0ZWx5KVxuICAgICAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJMaXN0ZW5lcih0aGlzLCBsaXN0ZW5lcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgXCJbXCIgKyB0aGlzLnZhbHVlICsgXCJdXCI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0b1ByaW1pdGl2ZSh0aGlzLmdldCgpKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVWYWx1ZS5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGVWYWx1ZTtcbn0oQXRvbSkpO1xudmFyIGlzT2JzZXJ2YWJsZVZhbHVlID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVWYWx1ZVwiLCBPYnNlcnZhYmxlVmFsdWUpO1xuXG4vKipcbiAqIEEgbm9kZSBpbiB0aGUgc3RhdGUgZGVwZW5kZW5jeSByb290IHRoYXQgb2JzZXJ2ZXMgb3RoZXIgbm9kZXMsIGFuZCBjYW4gYmUgb2JzZXJ2ZWQgaXRzZWxmLlxuICpcbiAqIENvbXB1dGVkVmFsdWUgd2lsbCByZW1lbWJlciB0aGUgcmVzdWx0IG9mIHRoZSBjb21wdXRhdGlvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBiYXRjaCwgb3JcbiAqIHdoaWxlIGJlaW5nIG9ic2VydmVkLlxuICpcbiAqIER1cmluZyB0aGlzIHRpbWUgaXQgd2lsbCByZWNvbXB1dGUgb25seSB3aGVuIG9uZSBvZiBpdHMgZGlyZWN0IGRlcGVuZGVuY2llcyBjaGFuZ2VkLFxuICogYnV0IG9ubHkgd2hlbiBpdCBpcyBiZWluZyBhY2Nlc3NlZCB3aXRoIGBDb21wdXRlZFZhbHVlLmdldCgpYC5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbiBkZXNjcmlwdGlvbjpcbiAqIDEuIEZpcnN0IHRpbWUgaXQncyBiZWluZyBhY2Nlc3NlZCBpdCB3aWxsIGNvbXB1dGUgYW5kIHJlbWVtYmVyIHJlc3VsdFxuICogICAgZ2l2ZSBiYWNrIHJlbWVtYmVyZWQgcmVzdWx0IHVudGlsIDIuIGhhcHBlbnNcbiAqIDIuIEZpcnN0IHRpbWUgYW55IGRlZXAgZGVwZW5kZW5jeSBjaGFuZ2UsIHByb3BhZ2F0ZSBQT1NTSUJMWV9TVEFMRSB0byBhbGwgb2JzZXJ2ZXJzLCB3YWl0IGZvciAzLlxuICogMy4gV2hlbiBpdCdzIGJlaW5nIGFjY2Vzc2VkLCByZWNvbXB1dGUgaWYgYW55IHNoYWxsb3cgZGVwZW5kZW5jeSBjaGFuZ2VkLlxuICogICAgaWYgcmVzdWx0IGNoYW5nZWQ6IHByb3BhZ2F0ZSBTVEFMRSB0byBhbGwgb2JzZXJ2ZXJzLCB0aGF0IHdlcmUgUE9TU0lCTFlfU1RBTEUgZnJvbSB0aGUgbGFzdCBzdGVwLlxuICogICAgZ28gdG8gc3RlcCAyLiBlaXRoZXIgd2F5XG4gKlxuICogSWYgYXQgYW55IHBvaW50IGl0J3Mgb3V0c2lkZSBiYXRjaCBhbmQgaXQgaXNuJ3Qgb2JzZXJ2ZWQ6IHJlc2V0IGV2ZXJ5dGhpbmcgYW5kIGdvIHRvIDEuXG4gKi9cbnZhciBDb21wdXRlZFZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBjb21wdXRlZCB2YWx1ZSBiYXNlZCBvbiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uXG4gICAgICpcbiAgICAgKiBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIGZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5LlxuICAgICAqXG4gICAgICogVGhlIGBlcXVhbHNgIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgY29tcGFyZXIgZnVuY3Rpb24gdG8gdXNlIHRvIGRldGVybWluZSBpZiBhIG5ld2x5IHByb2R1Y2VkXG4gICAgICogdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBwcmV2aW91cyB2YWx1ZS4gVHdvIGNvbXBhcmVycyBhcmUgcHJvdmlkZWQgaW4gdGhlIGxpYnJhcnk7IGBkZWZhdWx0Q29tcGFyZXJgXG4gICAgICogY29tcGFyZXMgYmFzZWQgb24gaWRlbnRpdHkgY29tcGFyaXNvbiAoPT09KSwgYW5kIGBzdHJ1Y3R1YWxDb21wYXJlcmAgZGVlcGx5IGNvbXBhcmVzIHRoZSBzdHJ1Y3R1cmUuXG4gICAgICogU3RydWN0dXJhbCBjb21wYXJpc29uIGNhbiBiZSBjb252ZW5pZW50IGlmIHlvdSBhbHdheXMgcHJvZHVjZSBhIG5ldyBhZ2dyZWdhdGVkIG9iamVjdCBhbmRcbiAgICAgKiBkb24ndCB3YW50IHRvIG5vdGlmeSBvYnNlcnZlcnMgaWYgaXQgaXMgc3RydWN0dXJhbGx5IHRoZSBzYW1lLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGZvciB3b3JraW5nIHdpdGggdmVjdG9ycywgbW91c2UgY29vcmRpbmF0ZXMgZXRjLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIENvbXB1dGVkVmFsdWUob3B0aW9ucykge1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llc1N0YXRlID0gSURlcml2YXRpb25TdGF0ZS5OT1RfVFJBQ0tJTkc7XG4gICAgICAgIHRoaXMub2JzZXJ2aW5nID0gW107IC8vIG5vZGVzIHdlIGFyZSBsb29raW5nIGF0LiBPdXIgdmFsdWUgZGVwZW5kcyBvbiB0aGVzZSBub2Rlc1xuICAgICAgICB0aGlzLm5ld09ic2VydmluZyA9IG51bGw7IC8vIGR1cmluZyB0cmFja2luZyBpdCdzIGFuIGFycmF5IHdpdGggbmV3IG9ic2VydmVkIG9ic2VydmVyc1xuICAgICAgICB0aGlzLmlzQmVpbmdPYnNlcnZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUGVuZGluZ1Vub2JzZXJ2YXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuZGlmZlZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5ydW5JZCA9IDA7XG4gICAgICAgIHRoaXMubGFzdEFjY2Vzc2VkQnkgPSAwO1xuICAgICAgICB0aGlzLmxvd2VzdE9ic2VydmVyU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlVQX1RPX0RBVEU7XG4gICAgICAgIHRoaXMudW5ib3VuZERlcHNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX19tYXBpZCA9IFwiI1wiICsgZ2V0TmV4dElkKCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQ2F1Z2h0RXhjZXB0aW9uKG51bGwpO1xuICAgICAgICB0aGlzLmlzQ29tcHV0aW5nID0gZmFsc2U7IC8vIHRvIGNoZWNrIGZvciBjeWNsZXNcbiAgICAgICAgdGhpcy5pc1J1bm5pbmdTZXR0ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1RyYWNpbmcgPSBUcmFjZU1vZGUuTk9ORTtcbiAgICAgICAgaW52YXJpYW50KG9wdGlvbnMuZ2V0LCBcIm1pc3Npbmcgb3B0aW9uIGZvciBjb21wdXRlZDogZ2V0XCIpO1xuICAgICAgICB0aGlzLmRlcml2YXRpb24gPSBvcHRpb25zLmdldDtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IFwiQ29tcHV0ZWRWYWx1ZUBcIiArIGdldE5leHRJZCgpO1xuICAgICAgICBpZiAob3B0aW9ucy5zZXQpXG4gICAgICAgICAgICB0aGlzLnNldHRlciA9IGNyZWF0ZUFjdGlvbih0aGlzLm5hbWUgKyBcIi1zZXR0ZXJcIiwgb3B0aW9ucy5zZXQpO1xuICAgICAgICB0aGlzLmVxdWFscyA9XG4gICAgICAgICAgICBvcHRpb25zLmVxdWFscyB8fFxuICAgICAgICAgICAgICAgIChvcHRpb25zLmNvbXBhcmVTdHJ1Y3R1cmFsIHx8IG9wdGlvbnMuc3RydWN0XG4gICAgICAgICAgICAgICAgICAgID8gY29tcGFyZXIuc3RydWN0dXJhbFxuICAgICAgICAgICAgICAgICAgICA6IGNvbXBhcmVyLmRlZmF1bHQpO1xuICAgICAgICB0aGlzLnNjb3BlID0gb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICB0aGlzLnJlcXVpcmVzUmVhY3Rpb24gPSAhIW9wdGlvbnMucmVxdWlyZXNSZWFjdGlvbjtcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSAhIW9wdGlvbnMua2VlcEFsaXZlO1xuICAgIH1cbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5vbkJlY29tZVN0YWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwcm9wYWdhdGVNYXliZUNoYW5nZWQodGhpcyk7XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5vbkJlY29tZU9ic2VydmVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5vbkJlY29tZU9ic2VydmVkTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm9uQmVjb21lT2JzZXJ2ZWRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHsgcmV0dXJuIGxpc3RlbmVyKCk7IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5vbkJlY29tZVVub2JzZXJ2ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLm9uQmVjb21lVW5vYnNlcnZlZExpc3RlbmVycykge1xuICAgICAgICAgICAgdGhpcy5vbkJlY29tZVVub2JzZXJ2ZWRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHsgcmV0dXJuIGxpc3RlbmVyKCk7IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMgY29tcHV0ZWQgdmFsdWUuXG4gICAgICogV2lsbCBldmFsdWF0ZSBpdHMgY29tcHV0YXRpb24gZmlyc3QgaWYgbmVlZGVkLlxuICAgICAqL1xuICAgIENvbXB1dGVkVmFsdWUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wdXRpbmcpXG4gICAgICAgICAgICBmYWlsKFwiQ3ljbGUgZGV0ZWN0ZWQgaW4gY29tcHV0YXRpb24gXCIgKyB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLmRlcml2YXRpb24pO1xuICAgICAgICBpZiAoZ2xvYmFsU3RhdGUuaW5CYXRjaCA9PT0gMCAmJiB0aGlzLm9ic2VydmVycy5zaXplID09PSAwICYmICF0aGlzLmtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgaWYgKHNob3VsZENvbXB1dGUodGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5BYm91dFVudHJhY2tlZFJlYWQoKTtcbiAgICAgICAgICAgICAgICBzdGFydEJhdGNoKCk7IC8vIFNlZSBwZXJmIHRlc3QgJ2NvbXB1dGVkIG1lbW9pemF0aW9uJ1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbXB1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgZW5kQmF0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydE9ic2VydmVkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHNob3VsZENvbXB1dGUodGhpcykpXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tBbmRDb21wdXRlKCkpXG4gICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUNoYW5nZUNvbmZpcm1lZCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKGlzQ2F1Z2h0RXhjZXB0aW9uKHJlc3VsdCkpXG4gICAgICAgICAgICB0aHJvdyByZXN1bHQuY2F1c2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb21wdXRlVmFsdWUoZmFsc2UpO1xuICAgICAgICBpZiAoaXNDYXVnaHRFeGNlcHRpb24ocmVzKSlcbiAgICAgICAgICAgIHRocm93IHJlcy5jYXVzZTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIENvbXB1dGVkVmFsdWUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0ZXIpIHtcbiAgICAgICAgICAgIGludmFyaWFudCghdGhpcy5pc1J1bm5pbmdTZXR0ZXIsIFwiVGhlIHNldHRlciBvZiBjb21wdXRlZCB2YWx1ZSAnXCIgKyB0aGlzLm5hbWUgKyBcIicgaXMgdHJ5aW5nIHRvIHVwZGF0ZSBpdHNlbGYuIERpZCB5b3UgaW50ZW5kIHRvIHVwZGF0ZSBhbiBfb2JzZXJ2YWJsZV8gdmFsdWUsIGluc3RlYWQgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5P1wiKTtcbiAgICAgICAgICAgIHRoaXMuaXNSdW5uaW5nU2V0dGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0ZXIuY2FsbCh0aGlzLnNjb3BlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUnVubmluZ1NldHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGludmFyaWFudChmYWxzZSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICAgICAgXCJbQ29tcHV0ZWRWYWx1ZSAnXCIgKyB0aGlzLm5hbWUgKyBcIiddIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gYSBuZXcgdmFsdWUgdG8gYSBjb21wdXRlZCB2YWx1ZS5cIik7XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS50cmFja0FuZENvbXB1dGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc1NweUVuYWJsZWQoKSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHNweVJlcG9ydCh7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnNjb3BlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiY29tcHV0ZVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdmFyIHdhc1N1c3BlbmRlZCA9IFxuICAgICAgICAvKiBzZWUgIzEyMDggKi8gdGhpcy5kZXBlbmRlbmNpZXNTdGF0ZSA9PT0gSURlcml2YXRpb25TdGF0ZS5OT1RfVFJBQ0tJTkc7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY29tcHV0ZVZhbHVlKHRydWUpO1xuICAgICAgICB2YXIgY2hhbmdlZCA9IHdhc1N1c3BlbmRlZCB8fFxuICAgICAgICAgICAgaXNDYXVnaHRFeGNlcHRpb24ob2xkVmFsdWUpIHx8XG4gICAgICAgICAgICBpc0NhdWdodEV4Y2VwdGlvbihuZXdWYWx1ZSkgfHxcbiAgICAgICAgICAgICF0aGlzLmVxdWFscyhvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGFuZ2VkO1xuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGUuY29tcHV0ZVZhbHVlID0gZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgIHRoaXMuaXNDb21wdXRpbmcgPSB0cnVlO1xuICAgICAgICBnbG9iYWxTdGF0ZS5jb21wdXRhdGlvbkRlcHRoKys7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICh0cmFjaykge1xuICAgICAgICAgICAgcmVzID0gdHJhY2tEZXJpdmVkRnVuY3Rpb24odGhpcywgdGhpcy5kZXJpdmF0aW9uLCB0aGlzLnNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChnbG9iYWxTdGF0ZS5kaXNhYmxlRXJyb3JCb3VuZGFyaWVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdGhpcy5kZXJpdmF0aW9uLmNhbGwodGhpcy5zY29wZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmRlcml2YXRpb24uY2FsbCh0aGlzLnNjb3BlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gbmV3IENhdWdodEV4Y2VwdGlvbihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsU3RhdGUuY29tcHV0YXRpb25EZXB0aC0tO1xuICAgICAgICB0aGlzLmlzQ29tcHV0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5zdXNwZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMua2VlcEFsaXZlKSB7XG4gICAgICAgICAgICBjbGVhck9ic2VydmluZyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7IC8vIGRvbid0IGhvbGQgb24gdG8gY29tcHV0ZWQgdmFsdWUhXG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbXB1dGVkVmFsdWUucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAobGlzdGVuZXIsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcbiAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGF1dG9ydW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gX3RoaXMuZ2V0KCk7XG4gICAgICAgICAgICBpZiAoIWZpcnN0VGltZSB8fCBmaXJlSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJldlUgPSB1bnRyYWNrZWRTdGFydCgpO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBfdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZTogcHJldlZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkRW5kKHByZXZVKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJldlZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGUud2FybkFib3V0VW50cmFja2VkUmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZXNSZWFjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZmFpbChcIlttb2J4XSBDb21wdXRlZCB2YWx1ZSBcIiArIHRoaXMubmFtZSArIFwiIGlzIHJlYWQgb3V0c2lkZSBhIHJlYWN0aXZlIGNvbnRleHRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNUcmFjaW5nICE9PSBUcmFjZU1vZGUuTk9ORSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbbW9ieC50cmFjZV0gJ1wiICsgdGhpcy5uYW1lICsgXCInIGlzIGJlaW5nIHJlYWQgb3V0c2lkZSBhIHJlYWN0aXZlIGNvbnRleHQuIERvaW5nIGEgZnVsbCByZWNvbXB1dGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2JhbFN0YXRlLmNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW21vYnhdIENvbXB1dGVkIHZhbHVlIFwiICsgdGhpcy5uYW1lICsgXCIgaXMgYmVpbmcgcmVhZCBvdXRzaWRlIGEgcmVhY3RpdmUgY29udGV4dC4gRG9pbmcgYSBmdWxsIHJlY29tcHV0ZVwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKTtcbiAgICB9O1xuICAgIENvbXB1dGVkVmFsdWUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgXCJbXCIgKyB0aGlzLmRlcml2YXRpb24udG9TdHJpbmcoKSArIFwiXVwiO1xuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRvUHJpbWl0aXZlKHRoaXMuZ2V0KCkpO1xuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbXB1dGVkVmFsdWU7XG59KCkpO1xudmFyIGlzQ29tcHV0ZWRWYWx1ZSA9IGNyZWF0ZUluc3RhbmNlb2ZQcmVkaWNhdGUoXCJDb21wdXRlZFZhbHVlXCIsIENvbXB1dGVkVmFsdWUpO1xuXG4vKipcbiAqIFRoZXNlIHZhbHVlcyB3aWxsIHBlcnNpc3QgaWYgZ2xvYmFsIHN0YXRlIGlzIHJlc2V0XG4gKi9cbnZhciBwZXJzaXN0ZW50S2V5cyA9IFtcbiAgICBcIm1vYnhHdWlkXCIsXG4gICAgXCJzcHlMaXN0ZW5lcnNcIixcbiAgICBcImVuZm9yY2VBY3Rpb25zXCIsXG4gICAgXCJjb21wdXRlZFJlcXVpcmVzUmVhY3Rpb25cIixcbiAgICBcInJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlXCIsXG4gICAgXCJvYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvblwiLFxuICAgIFwiYWxsb3dTdGF0ZVJlYWRzXCIsXG4gICAgXCJkaXNhYmxlRXJyb3JCb3VuZGFyaWVzXCIsXG4gICAgXCJydW5JZFwiLFxuICAgIFwiVU5DSEFOR0VEXCJcbl07XG52YXIgTW9iWEdsb2JhbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTW9iWEdsb2JhbHMoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNb2JYR2xvYmFscyB2ZXJzaW9uLlxuICAgICAgICAgKiBNb2JYIGNvbXBhdGlibGl0eSB3aXRoIG90aGVyIHZlcnNpb25zIGxvYWRlZCBpbiBtZW1vcnkgYXMgbG9uZyBhcyB0aGlzIHZlcnNpb24gbWF0Y2hlcy5cbiAgICAgICAgICogSXQgaW5kaWNhdGVzIHRoYXQgdGhlIGdsb2JhbCBzdGF0ZSBzdGlsbCBzdG9yZXMgc2ltaWxhciBpbmZvcm1hdGlvblxuICAgICAgICAgKlxuICAgICAgICAgKiBOLkI6IHRoaXMgdmVyc2lvbiBpcyB1bnJlbGF0ZWQgdG8gdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiBNb2JYLCBhbmQgaXMgb25seSB0aGUgdmVyc2lvbiBvZiB0aGVcbiAgICAgICAgICogaW50ZXJuYWwgc3RhdGUgc3RvcmFnZSBvZiBNb2JYLCBhbmQgY2FuIGJlIHRoZSBzYW1lIGFjcm9zcyBtYW55IGRpZmZlcmVudCBwYWNrYWdlIHZlcnNpb25zXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZlcnNpb24gPSA1O1xuICAgICAgICAvKipcbiAgICAgICAgICogZ2xvYmFsbHkgdW5pcXVlIHRva2VuIHRvIHNpZ25hbCB1bmNoYW5nZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuVU5DSEFOR0VEID0ge307XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDdXJyZW50bHkgcnVubmluZyBkZXJpdmF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRyYWNraW5nRGVyaXZhdGlvbiA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBcmUgd2UgcnVubmluZyBhIGNvbXB1dGF0aW9uIGN1cnJlbnRseT8gKG5vdCBhIHJlYWN0aW9uKVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21wdXRhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVhY2ggdGltZSBhIGRlcml2YXRpb24gaXMgdHJhY2tlZCwgaXQgaXMgYXNzaWduZWQgYSB1bmlxdWUgcnVuLWlkXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJ1bklkID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqICdndWlkJyBmb3IgZ2VuZXJhbCBwdXJwb3NlLiBXaWxsIGJlIHBlcnNpc3RlZCBhbW9uZ3N0IHJlc2V0cy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW9ieEd1aWQgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXJlIHdlIGluIGEgYmF0Y2ggYmxvY2s/IChhbmQgaG93IG1hbnkgb2YgdGhlbSlcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5CYXRjaCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPYnNlcnZhYmxlcyB0aGF0IGRvbid0IGhhdmUgb2JzZXJ2ZXJzIGFueW1vcmUsIGFuZCBhcmUgYWJvdXQgdG8gYmVcbiAgICAgICAgICogc3VzcGVuZGVkLCB1bmxlc3Mgc29tZWJvZHkgZWxzZSBhY2Nlc3NlcyBpdCBpbiB0aGUgc2FtZSBiYXRjaFxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7SU9ic2VydmFibGVbXX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVuZGluZ1Vub2JzZXJ2YXRpb25zID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0IG9mIHNjaGVkdWxlZCwgbm90IHlldCBleGVjdXRlZCwgcmVhY3Rpb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVhY3Rpb25zID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBcmUgd2UgY3VycmVudGx5IHByb2Nlc3NpbmcgcmVhY3Rpb25zP1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc1J1bm5pbmdSZWFjdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIGl0IGFsbG93ZWQgdG8gY2hhbmdlIG9ic2VydmFibGVzIGF0IHRoaXMgcG9pbnQ/XG4gICAgICAgICAqIEluIGdlbmVyYWwsIE1vYlggZG9lc24ndCBhbGxvdyB0aGF0IHdoZW4gcnVubmluZyBjb21wdXRhdGlvbnMgYW5kIFJlYWN0LnJlbmRlci5cbiAgICAgICAgICogVG8gZW5zdXJlIHRoYXQgdGhvc2UgZnVuY3Rpb25zIHN0YXkgcHVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWxsb3dTdGF0ZUNoYW5nZXMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSXMgaXQgYWxsb3dlZCB0byByZWFkIG9ic2VydmFibGVzIGF0IHRoaXMgcG9pbnQ/XG4gICAgICAgICAqIFVzZWQgdG8gaG9sZCB0aGUgc3RhdGUgbmVlZGVkIGZvciBgb2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb25gXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFsbG93U3RhdGVSZWFkcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzdHJpY3QgbW9kZSBpcyBlbmFibGVkLCBzdGF0ZSBjaGFuZ2VzIGFyZSBieSBkZWZhdWx0IG5vdCBhbGxvd2VkXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVuZm9yY2VBY3Rpb25zID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcHkgY2FsbGJhY2tzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNweUxpc3RlbmVycyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2xvYmFsbHkgYXR0YWNoZWQgZXJyb3IgaGFuZGxlcnMgdGhhdCByZWFjdCBzcGVjaWZpY2FsbHkgdG8gZXJyb3JzIGluIHJlYWN0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5nbG9iYWxSZWFjdGlvbkVycm9ySGFuZGxlcnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdhcm4gaWYgY29tcHV0ZWQgdmFsdWVzIGFyZSBhY2Nlc3NlZCBvdXRzaWRlIGEgcmVhY3RpdmUgY29udGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21wdXRlZFJlcXVpcmVzUmVhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIChFeHBlcmltZW50YWwpXG4gICAgICAgICAqIFdhcm4gaWYgeW91IHRyeSB0byBjcmVhdGUgdG8gZGVyaXZhdGlvbiAvIHJlYWN0aXZlIGNvbnRleHQgd2l0aG91dCBhY2Nlc3NpbmcgYW55IG9ic2VydmFibGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAoRXhwZXJpbWVudGFsKVxuICAgICAgICAgKiBXYXJuIGlmIG9ic2VydmFibGVzIGFyZSBhY2Nlc3NlZCBvdXRzaWRlIGEgcmVhY3RpdmUgY29udGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQWxsb3dzIG92ZXJ3cml0aW5nIG9mIGNvbXB1dGVkIHByb3BlcnRpZXMsIHVzZWZ1bCBpbiB0ZXN0cyBidXQgbm90IHByb2QgYXMgaXQgY2FuIGNhdXNlXG4gICAgICAgICAqIG1lbW9yeSBsZWFrcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2J4anMvbW9ieC9pc3N1ZXMvMTg2N1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21wdXRlZENvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuICAgICAgICAvKlxuICAgICAgICAgKiBEb24ndCBjYXRjaCBhbmQgcmV0aHJvdyBleGNlcHRpb25zLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW5zcGVjdGluZyB0aGUgc3RhdGUgb2ZcbiAgICAgICAgICogdGhlIHN0YWNrIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyB3aGlsZSBkZWJ1Z2dpbmcuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRpc2FibGVFcnJvckJvdW5kYXJpZXMgPSBmYWxzZTtcbiAgICAgICAgLypcbiAgICAgICAgICogSWYgdHJ1ZSwgd2UgYXJlIGFscmVhZHkgaGFuZGxpbmcgYW4gZXhjZXB0aW9uIGluIGFuIGFjdGlvbi4gQW55IGVycm9ycyBpbiByZWFjdGlvbnMgc2hvdWxkIGJlIHN1cHByZXNzZWQsIGFzXG4gICAgICAgICAqIHRoZXkgYXJlIG5vdCB0aGUgY2F1c2UsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vYnhqcy9tb2J4L2lzc3Vlcy8xODM2XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN1cHByZXNzUmVhY3Rpb25FcnJvcnMgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIE1vYlhHbG9iYWxzO1xufSgpKTtcbnZhciBtb2NrR2xvYmFsID0ge307XG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgICByZXR1cm4gbW9ja0dsb2JhbDtcbn1cbnZhciBjYW5NZXJnZUdsb2JhbFN0YXRlID0gdHJ1ZTtcbnZhciBpc29sYXRlQ2FsbGVkID0gZmFsc2U7XG52YXIgZ2xvYmFsU3RhdGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbiAgICBpZiAoZ2xvYmFsLl9fbW9ieEluc3RhbmNlQ291bnQgPiAwICYmICFnbG9iYWwuX19tb2J4R2xvYmFscylcbiAgICAgICAgY2FuTWVyZ2VHbG9iYWxTdGF0ZSA9IGZhbHNlO1xuICAgIGlmIChnbG9iYWwuX19tb2J4R2xvYmFscyAmJiBnbG9iYWwuX19tb2J4R2xvYmFscy52ZXJzaW9uICE9PSBuZXcgTW9iWEdsb2JhbHMoKS52ZXJzaW9uKVxuICAgICAgICBjYW5NZXJnZUdsb2JhbFN0YXRlID0gZmFsc2U7XG4gICAgaWYgKCFjYW5NZXJnZUdsb2JhbFN0YXRlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFpc29sYXRlQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgZmFpbChcIlRoZXJlIGFyZSBtdWx0aXBsZSwgZGlmZmVyZW50IHZlcnNpb25zIG9mIE1vYlggYWN0aXZlLiBNYWtlIHN1cmUgTW9iWCBpcyBsb2FkZWQgb25seSBvbmNlIG9yIHVzZSBgY29uZmlndXJlKHsgaXNvbGF0ZUdsb2JhbFN0YXRlOiB0cnVlIH0pYFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMSk7XG4gICAgICAgIHJldHVybiBuZXcgTW9iWEdsb2JhbHMoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZ2xvYmFsLl9fbW9ieEdsb2JhbHMpIHtcbiAgICAgICAgZ2xvYmFsLl9fbW9ieEluc3RhbmNlQ291bnQgKz0gMTtcbiAgICAgICAgaWYgKCFnbG9iYWwuX19tb2J4R2xvYmFscy5VTkNIQU5HRUQpXG4gICAgICAgICAgICBnbG9iYWwuX19tb2J4R2xvYmFscy5VTkNIQU5HRUQgPSB7fTsgLy8gbWFrZSBtZXJnZSBiYWNrd2FyZCBjb21wYXRpYmxlXG4gICAgICAgIHJldHVybiBnbG9iYWwuX19tb2J4R2xvYmFscztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdsb2JhbC5fX21vYnhJbnN0YW5jZUNvdW50ID0gMTtcbiAgICAgICAgcmV0dXJuIChnbG9iYWwuX19tb2J4R2xvYmFscyA9IG5ldyBNb2JYR2xvYmFscygpKTtcbiAgICB9XG59KSgpO1xuZnVuY3Rpb24gaXNvbGF0ZUdsb2JhbFN0YXRlKCkge1xuICAgIGlmIChnbG9iYWxTdGF0ZS5wZW5kaW5nUmVhY3Rpb25zLmxlbmd0aCB8fFxuICAgICAgICBnbG9iYWxTdGF0ZS5pbkJhdGNoIHx8XG4gICAgICAgIGdsb2JhbFN0YXRlLmlzUnVubmluZ1JlYWN0aW9ucylcbiAgICAgICAgZmFpbChcImlzb2xhdGVHbG9iYWxTdGF0ZSBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBNb2JYIGlzIHJ1bm5pbmcgYW55IHJlYWN0aW9uc1wiKTtcbiAgICBpc29sYXRlQ2FsbGVkID0gdHJ1ZTtcbiAgICBpZiAoY2FuTWVyZ2VHbG9iYWxTdGF0ZSkge1xuICAgICAgICBpZiAoLS1nZXRHbG9iYWwoKS5fX21vYnhJbnN0YW5jZUNvdW50ID09PSAwKVxuICAgICAgICAgICAgZ2V0R2xvYmFsKCkuX19tb2J4R2xvYmFscyA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ2xvYmFsU3RhdGUgPSBuZXcgTW9iWEdsb2JhbHMoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRHbG9iYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU3RhdGU7XG59XG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHk7IHRoaXMgd2lsbCBicmVhayB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgZXhpc3Rpbmcgb2JzZXJ2YWJsZXMsXG4gKiBidXQgY2FuIGJlIHVzZWQgdG8gZ2V0IGJhY2sgYXQgYSBzdGFibGUgc3RhdGUgYWZ0ZXIgdGhyb3dpbmcgZXJyb3JzXG4gKi9cbmZ1bmN0aW9uIHJlc2V0R2xvYmFsU3RhdGUoKSB7XG4gICAgdmFyIGRlZmF1bHRHbG9iYWxzID0gbmV3IE1vYlhHbG9iYWxzKCk7XG4gICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRHbG9iYWxzKVxuICAgICAgICBpZiAocGVyc2lzdGVudEtleXMuaW5kZXhPZihrZXkpID09PSAtMSlcbiAgICAgICAgICAgIGdsb2JhbFN0YXRlW2tleV0gPSBkZWZhdWx0R2xvYmFsc1trZXldO1xuICAgIGdsb2JhbFN0YXRlLmFsbG93U3RhdGVDaGFuZ2VzID0gIWdsb2JhbFN0YXRlLmVuZm9yY2VBY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBoYXNPYnNlcnZlcnMob2JzZXJ2YWJsZSkge1xuICAgIHJldHVybiBvYnNlcnZhYmxlLm9ic2VydmVycyAmJiBvYnNlcnZhYmxlLm9ic2VydmVycy5zaXplID4gMDtcbn1cbmZ1bmN0aW9uIGdldE9ic2VydmVycyhvYnNlcnZhYmxlKSB7XG4gICAgcmV0dXJuIG9ic2VydmFibGUub2JzZXJ2ZXJzO1xufVxuLy8gZnVuY3Rpb24gaW52YXJpYW50T2JzZXJ2ZXJzKG9ic2VydmFibGU6IElPYnNlcnZhYmxlKSB7XG4vLyAgICAgY29uc3QgbGlzdCA9IG9ic2VydmFibGUub2JzZXJ2ZXJzXG4vLyAgICAgY29uc3QgbWFwID0gb2JzZXJ2YWJsZS5vYnNlcnZlcnNJbmRleGVzXG4vLyAgICAgY29uc3QgbCA9IGxpc3QubGVuZ3RoXG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbi8vICAgICAgICAgY29uc3QgaWQgPSBsaXN0W2ldLl9fbWFwaWRcbi8vICAgICAgICAgaWYgKGkpIHtcbi8vICAgICAgICAgICAgIGludmFyaWFudChtYXBbaWRdID09PSBpLCBcIklOVEVSTkFMIEVSUk9SIG1hcHMgZGVyaXZhdGlvbi5fX21hcGlkIHRvIGluZGV4IGluIGxpc3RcIikgLy8gZm9yIHBlcmZvcm1hbmNlXG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgICBpbnZhcmlhbnQoIShpZCBpbiBtYXApLCBcIklOVEVSTkFMIEVSUk9SIG9ic2VydmVyIG9uIGluZGV4IDAgc2hvdWxkbid0IGJlIGhlbGQgaW4gbWFwLlwiKSAvLyBmb3IgcGVyZm9ybWFuY2Vcbi8vICAgICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBpbnZhcmlhbnQoXG4vLyAgICAgICAgIGxpc3QubGVuZ3RoID09PSAwIHx8IE9iamVjdC5rZXlzKG1hcCkubGVuZ3RoID09PSBsaXN0Lmxlbmd0aCAtIDEsXG4vLyAgICAgICAgIFwiSU5URVJOQUwgRVJST1IgdGhlcmUgaXMgbm8ganVuayBpbiBtYXBcIlxuLy8gICAgIClcbi8vIH1cbmZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmFibGUsIG5vZGUpIHtcbiAgICAvLyBpbnZhcmlhbnQobm9kZS5kZXBlbmRlbmNpZXNTdGF0ZSAhPT0gLTEsIFwiSU5URVJOQUwgRVJST1IsIGNhbiBhZGQgb25seSBkZXBlbmRlbmNpZXNTdGF0ZSAhPT0gLTFcIik7XG4gICAgLy8gaW52YXJpYW50KG9ic2VydmFibGUuX29ic2VydmVycy5pbmRleE9mKG5vZGUpID09PSAtMSwgXCJJTlRFUk5BTCBFUlJPUiBhZGQgYWxyZWFkeSBhZGRlZCBub2RlXCIpO1xuICAgIC8vIGludmFyaWFudE9ic2VydmVycyhvYnNlcnZhYmxlKTtcbiAgICBvYnNlcnZhYmxlLm9ic2VydmVycy5hZGQobm9kZSk7XG4gICAgaWYgKG9ic2VydmFibGUubG93ZXN0T2JzZXJ2ZXJTdGF0ZSA+IG5vZGUuZGVwZW5kZW5jaWVzU3RhdGUpXG4gICAgICAgIG9ic2VydmFibGUubG93ZXN0T2JzZXJ2ZXJTdGF0ZSA9IG5vZGUuZGVwZW5kZW5jaWVzU3RhdGU7XG4gICAgLy8gaW52YXJpYW50T2JzZXJ2ZXJzKG9ic2VydmFibGUpO1xuICAgIC8vIGludmFyaWFudChvYnNlcnZhYmxlLl9vYnNlcnZlcnMuaW5kZXhPZihub2RlKSAhPT0gLTEsIFwiSU5URVJOQUwgRVJST1IgZGlkbid0IGFkZCBub2RlXCIpO1xufVxuZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2YWJsZSwgbm9kZSkge1xuICAgIC8vIGludmFyaWFudChnbG9iYWxTdGF0ZS5pbkJhdGNoID4gMCwgXCJJTlRFUk5BTCBFUlJPUiwgcmVtb3ZlIHNob3VsZCBiZSBjYWxsZWQgb25seSBpbnNpZGUgYmF0Y2hcIik7XG4gICAgLy8gaW52YXJpYW50KG9ic2VydmFibGUuX29ic2VydmVycy5pbmRleE9mKG5vZGUpICE9PSAtMSwgXCJJTlRFUk5BTCBFUlJPUiByZW1vdmUgYWxyZWFkeSByZW1vdmVkIG5vZGVcIik7XG4gICAgLy8gaW52YXJpYW50T2JzZXJ2ZXJzKG9ic2VydmFibGUpO1xuICAgIG9ic2VydmFibGUub2JzZXJ2ZXJzLmRlbGV0ZShub2RlKTtcbiAgICBpZiAob2JzZXJ2YWJsZS5vYnNlcnZlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAvLyBkZWxldGluZyBsYXN0IG9ic2VydmVyXG4gICAgICAgIHF1ZXVlRm9yVW5vYnNlcnZhdGlvbihvYnNlcnZhYmxlKTtcbiAgICB9XG4gICAgLy8gaW52YXJpYW50T2JzZXJ2ZXJzKG9ic2VydmFibGUpO1xuICAgIC8vIGludmFyaWFudChvYnNlcnZhYmxlLl9vYnNlcnZlcnMuaW5kZXhPZihub2RlKSA9PT0gLTEsIFwiSU5URVJOQUwgRVJST1IgcmVtb3ZlIGFscmVhZHkgcmVtb3ZlZCBub2RlMlwiKTtcbn1cbmZ1bmN0aW9uIHF1ZXVlRm9yVW5vYnNlcnZhdGlvbihvYnNlcnZhYmxlKSB7XG4gICAgaWYgKG9ic2VydmFibGUuaXNQZW5kaW5nVW5vYnNlcnZhdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gaW52YXJpYW50KG9ic2VydmFibGUuX29ic2VydmVycy5sZW5ndGggPT09IDAsIFwiSU5URVJOQUwgRVJST1IsIHNob3VsZCBvbmx5IHF1ZXVlIGZvciB1bm9ic2VydmF0aW9uIHVub2JzZXJ2ZWQgb2JzZXJ2YWJsZXNcIik7XG4gICAgICAgIG9ic2VydmFibGUuaXNQZW5kaW5nVW5vYnNlcnZhdGlvbiA9IHRydWU7XG4gICAgICAgIGdsb2JhbFN0YXRlLnBlbmRpbmdVbm9ic2VydmF0aW9ucy5wdXNoKG9ic2VydmFibGUpO1xuICAgIH1cbn1cbi8qKlxuICogQmF0Y2ggc3RhcnRzIGEgdHJhbnNhY3Rpb24sIGF0IGxlYXN0IGZvciBwdXJwb3NlcyBvZiBtZW1vaXppbmcgQ29tcHV0ZWRWYWx1ZXMgd2hlbiBub3RoaW5nIGVsc2UgZG9lcy5cbiAqIER1cmluZyBhIGJhdGNoIGBvbkJlY29tZVVub2JzZXJ2ZWRgIHdpbGwgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBwZXIgb2JzZXJ2YWJsZS5cbiAqIEF2b2lkcyB1bm5lY2Vzc2FyeSByZWNhbGN1bGF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc3RhcnRCYXRjaCgpIHtcbiAgICBnbG9iYWxTdGF0ZS5pbkJhdGNoKys7XG59XG5mdW5jdGlvbiBlbmRCYXRjaCgpIHtcbiAgICBpZiAoLS1nbG9iYWxTdGF0ZS5pbkJhdGNoID09PSAwKSB7XG4gICAgICAgIHJ1blJlYWN0aW9ucygpO1xuICAgICAgICAvLyB0aGUgYmF0Y2ggaXMgYWN0dWFsbHkgYWJvdXQgdG8gZmluaXNoLCBhbGwgdW5vYnNlcnZpbmcgc2hvdWxkIGhhcHBlbiBoZXJlLlxuICAgICAgICB2YXIgbGlzdCA9IGdsb2JhbFN0YXRlLnBlbmRpbmdVbm9ic2VydmF0aW9ucztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IGxpc3RbaV07XG4gICAgICAgICAgICBvYnNlcnZhYmxlLmlzUGVuZGluZ1Vub2JzZXJ2YXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZhYmxlLm9ic2VydmVycy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9ic2VydmFibGUuaXNCZWluZ09ic2VydmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgb2JzZXJ2YWJsZSBoYWQgcmVhY3RpdmUgb2JzZXJ2ZXJzLCB0cmlnZ2VyIHRoZSBob29rc1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLmlzQmVpbmdPYnNlcnZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLm9uQmVjb21lVW5vYnNlcnZlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JzZXJ2YWJsZSBpbnN0YW5jZW9mIENvbXB1dGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZWQgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHRlYXJlZCBkb3duIHdoZW4gdGhlIGxhc3Qgb2JzZXJ2ZXIgbGVhdmVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgcHJvY2VzcyBoYXBwZW5zIHJlY3Vyc2l2ZWx5LCB0aGlzIGNvbXB1dGVkIG1pZ2h0IGJlIHRoZSBsYXN0IG9ic2VydmFibGUgb2YgYW5vdGhlciwgZXRjLi5cbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS5zdXNwZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbFN0YXRlLnBlbmRpbmdVbm9ic2VydmF0aW9ucyA9IFtdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcG9ydE9ic2VydmVkKG9ic2VydmFibGUpIHtcbiAgICBjaGVja0lmU3RhdGVSZWFkc0FyZUFsbG93ZWQob2JzZXJ2YWJsZSk7XG4gICAgdmFyIGRlcml2YXRpb24gPSBnbG9iYWxTdGF0ZS50cmFja2luZ0Rlcml2YXRpb247XG4gICAgaWYgKGRlcml2YXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNpbXBsZSBvcHRpbWl6YXRpb24sIGdpdmUgZWFjaCBkZXJpdmF0aW9uIHJ1biBhbiB1bmlxdWUgaWQgKHJ1bklkKVxuICAgICAgICAgKiBDaGVjayBpZiBsYXN0IHRpbWUgdGhpcyBvYnNlcnZhYmxlIHdhcyBhY2Nlc3NlZCB0aGUgc2FtZSBydW5JZCBpcyB1c2VkXG4gICAgICAgICAqIGlmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSByZWxhdGlvbiBpcyBhbHJlYWR5IGtub3duXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZGVyaXZhdGlvbi5ydW5JZCAhPT0gb2JzZXJ2YWJsZS5sYXN0QWNjZXNzZWRCeSkge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZS5sYXN0QWNjZXNzZWRCeSA9IGRlcml2YXRpb24ucnVuSWQ7XG4gICAgICAgICAgICAvLyBUcmllZCBzdG9yaW5nIG5ld09ic2VydmluZywgb3Igb2JzZXJ2aW5nLCBvciBib3RoIGFzIFNldCwgYnV0IHBlcmZvcm1hbmNlIGRpZG4ndCBjb21lIGNsb3NlLi4uXG4gICAgICAgICAgICBkZXJpdmF0aW9uLm5ld09ic2VydmluZ1tkZXJpdmF0aW9uLnVuYm91bmREZXBzQ291bnQrK10gPSBvYnNlcnZhYmxlO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZhYmxlLmlzQmVpbmdPYnNlcnZlZCkge1xuICAgICAgICAgICAgICAgIG9ic2VydmFibGUuaXNCZWluZ09ic2VydmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLm9uQmVjb21lT2JzZXJ2ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAob2JzZXJ2YWJsZS5vYnNlcnZlcnMuc2l6ZSA9PT0gMCAmJiBnbG9iYWxTdGF0ZS5pbkJhdGNoID4gMCkge1xuICAgICAgICBxdWV1ZUZvclVub2JzZXJ2YXRpb24ob2JzZXJ2YWJsZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIGZ1bmN0aW9uIGludmFyaWFudExPUyhvYnNlcnZhYmxlOiBJT2JzZXJ2YWJsZSwgbXNnOiBzdHJpbmcpIHtcbi8vICAgICAvLyBpdCdzIGV4cGVuc2l2ZSBzbyBiZXR0ZXIgbm90IHJ1biBpdCBpbiBwcm9kdWNpdG9uLiBidXQgdGVtcG9yYXJpbHkgaGVscGZ1bCBmb3IgdGVzdGluZ1xuLy8gICAgIGNvbnN0IG1pbiA9IGdldE9ic2VydmVycyhvYnNlcnZhYmxlKS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIuZGVwZW5kZW5jaWVzU3RhdGUpLCAyKVxuLy8gICAgIGlmIChtaW4gPj0gb2JzZXJ2YWJsZS5sb3dlc3RPYnNlcnZlclN0YXRlKSByZXR1cm4gLy8gPC0gdGhlIG9ubHkgYXNzdW1wdGlvbiBhYm91dCBgbG93ZXN0T2JzZXJ2ZXJTdGF0ZWBcbi8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4vLyAgICAgICAgIFwibG93ZXN0T2JzZXJ2ZXJTdGF0ZSBpcyB3cm9uZyBmb3IgXCIgK1xuLy8gICAgICAgICAgICAgbXNnICtcbi8vICAgICAgICAgICAgIFwiIGJlY2F1c2UgXCIgK1xuLy8gICAgICAgICAgICAgbWluICtcbi8vICAgICAgICAgICAgIFwiIDwgXCIgK1xuLy8gICAgICAgICAgICAgb2JzZXJ2YWJsZS5sb3dlc3RPYnNlcnZlclN0YXRlXG4vLyAgICAgKVxuLy8gfVxuLyoqXG4gKiBOT1RFOiBjdXJyZW50IHByb3BhZ2F0aW9uIG1lY2hhbmlzbSB3aWxsIGluIGNhc2Ugb2Ygc2VsZiByZXJ1bmluZyBhdXRvcnVucyBiZWhhdmUgdW5leHBlY3RlZGx5XG4gKiBJdCB3aWxsIHByb3BhZ2F0ZSBjaGFuZ2VzIHRvIG9ic2VydmVycyBmcm9tIHByZXZpb3VzIHJ1blxuICogSXQncyBoYXJkIG9yIG1heWJlIGltcG9zc2libGUgKHdpdGggcmVhc29uYWJsZSBwZXJmKSB0byBnZXQgaXQgcmlnaHQgd2l0aCBjdXJyZW50IGFwcHJvYWNoXG4gKiBIb3BlZnVsbHkgc2VsZiByZXJ1bmluZyBhdXRvcnVucyBhcmVuJ3QgYSBmZWF0dXJlIHBlb3BsZSBzaG91bGQgZGVwZW5kIG9uXG4gKiBBbHNvIG1vc3QgYmFzaWMgdXNlIGNhc2VzIHNob3VsZCBiZSBva1xuICovXG4vLyBDYWxsZWQgYnkgQXRvbSB3aGVuIGl0cyB2YWx1ZSBjaGFuZ2VzXG5mdW5jdGlvbiBwcm9wYWdhdGVDaGFuZ2VkKG9ic2VydmFibGUpIHtcbiAgICAvLyBpbnZhcmlhbnRMT1Mob2JzZXJ2YWJsZSwgXCJjaGFuZ2VkIHN0YXJ0XCIpO1xuICAgIGlmIChvYnNlcnZhYmxlLmxvd2VzdE9ic2VydmVyU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuU1RBTEUpXG4gICAgICAgIHJldHVybjtcbiAgICBvYnNlcnZhYmxlLmxvd2VzdE9ic2VydmVyU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlNUQUxFO1xuICAgIC8vIElkZWFsbHkgd2UgdXNlIGZvci4ub2YgaGVyZSwgYnV0IHRoZSBkb3duY29tcGlsZWQgdmVyc2lvbiBpcyByZWFsbHkgc2xvdy4uLlxuICAgIG9ic2VydmFibGUub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgaWYgKGQuZGVwZW5kZW5jaWVzU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURSkge1xuICAgICAgICAgICAgaWYgKGQuaXNUcmFjaW5nICE9PSBUcmFjZU1vZGUuTk9ORSkge1xuICAgICAgICAgICAgICAgIGxvZ1RyYWNlSW5mbyhkLCBvYnNlcnZhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGQub25CZWNvbWVTdGFsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGQuZGVwZW5kZW5jaWVzU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlNUQUxFO1xuICAgIH0pO1xuICAgIC8vIGludmFyaWFudExPUyhvYnNlcnZhYmxlLCBcImNoYW5nZWQgZW5kXCIpO1xufVxuLy8gQ2FsbGVkIGJ5IENvbXB1dGVkVmFsdWUgd2hlbiBpdCByZWNhbGN1bGF0ZSBhbmQgaXRzIHZhbHVlIGNoYW5nZWRcbmZ1bmN0aW9uIHByb3BhZ2F0ZUNoYW5nZUNvbmZpcm1lZChvYnNlcnZhYmxlKSB7XG4gICAgLy8gaW52YXJpYW50TE9TKG9ic2VydmFibGUsIFwiY29uZmlybWVkIHN0YXJ0XCIpO1xuICAgIGlmIChvYnNlcnZhYmxlLmxvd2VzdE9ic2VydmVyU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuU1RBTEUpXG4gICAgICAgIHJldHVybjtcbiAgICBvYnNlcnZhYmxlLmxvd2VzdE9ic2VydmVyU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlNUQUxFO1xuICAgIG9ic2VydmFibGUub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgaWYgKGQuZGVwZW5kZW5jaWVzU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuUE9TU0lCTFlfU1RBTEUpXG4gICAgICAgICAgICBkLmRlcGVuZGVuY2llc1N0YXRlID0gSURlcml2YXRpb25TdGF0ZS5TVEFMRTtcbiAgICAgICAgZWxzZSBpZiAoZC5kZXBlbmRlbmNpZXNTdGF0ZSA9PT0gSURlcml2YXRpb25TdGF0ZS5VUF9UT19EQVRFIC8vIHRoaXMgaGFwcGVucyBkdXJpbmcgY29tcHV0aW5nIG9mIGBkYCwganVzdCBrZWVwIGxvd2VzdE9ic2VydmVyU3RhdGUgdXAgdG8gZGF0ZS5cbiAgICAgICAgKVxuICAgICAgICAgICAgb2JzZXJ2YWJsZS5sb3dlc3RPYnNlcnZlclN0YXRlID0gSURlcml2YXRpb25TdGF0ZS5VUF9UT19EQVRFO1xuICAgIH0pO1xuICAgIC8vIGludmFyaWFudExPUyhvYnNlcnZhYmxlLCBcImNvbmZpcm1lZCBlbmRcIik7XG59XG4vLyBVc2VkIGJ5IGNvbXB1dGVkIHdoZW4gaXRzIGRlcGVuZGVuY3kgY2hhbmdlZCwgYnV0IHdlIGRvbid0IHdhbid0IHRvIGltbWVkaWF0ZWx5IHJlY29tcHV0ZS5cbmZ1bmN0aW9uIHByb3BhZ2F0ZU1heWJlQ2hhbmdlZChvYnNlcnZhYmxlKSB7XG4gICAgLy8gaW52YXJpYW50TE9TKG9ic2VydmFibGUsIFwibWF5YmUgc3RhcnRcIik7XG4gICAgaWYgKG9ic2VydmFibGUubG93ZXN0T2JzZXJ2ZXJTdGF0ZSAhPT0gSURlcml2YXRpb25TdGF0ZS5VUF9UT19EQVRFKVxuICAgICAgICByZXR1cm47XG4gICAgb2JzZXJ2YWJsZS5sb3dlc3RPYnNlcnZlclN0YXRlID0gSURlcml2YXRpb25TdGF0ZS5QT1NTSUJMWV9TVEFMRTtcbiAgICBvYnNlcnZhYmxlLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIGlmIChkLmRlcGVuZGVuY2llc1N0YXRlID09PSBJRGVyaXZhdGlvblN0YXRlLlVQX1RPX0RBVEUpIHtcbiAgICAgICAgICAgIGQuZGVwZW5kZW5jaWVzU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlBPU1NJQkxZX1NUQUxFO1xuICAgICAgICAgICAgaWYgKGQuaXNUcmFjaW5nICE9PSBUcmFjZU1vZGUuTk9ORSkge1xuICAgICAgICAgICAgICAgIGxvZ1RyYWNlSW5mbyhkLCBvYnNlcnZhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGQub25CZWNvbWVTdGFsZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gaW52YXJpYW50TE9TKG9ic2VydmFibGUsIFwibWF5YmUgZW5kXCIpO1xufVxuZnVuY3Rpb24gbG9nVHJhY2VJbmZvKGRlcml2YXRpb24sIG9ic2VydmFibGUpIHtcbiAgICBjb25zb2xlLmxvZyhcIlttb2J4LnRyYWNlXSAnXCIgKyBkZXJpdmF0aW9uLm5hbWUgKyBcIicgaXMgaW52YWxpZGF0ZWQgZHVlIHRvIGEgY2hhbmdlIGluOiAnXCIgKyBvYnNlcnZhYmxlLm5hbWUgKyBcIidcIik7XG4gICAgaWYgKGRlcml2YXRpb24uaXNUcmFjaW5nID09PSBUcmFjZU1vZGUuQlJFQUspIHtcbiAgICAgICAgdmFyIGxpbmVzID0gW107XG4gICAgICAgIHByaW50RGVwVHJlZShnZXREZXBlbmRlbmN5VHJlZShkZXJpdmF0aW9uKSwgbGluZXMsIDEpO1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgbmV3IEZ1bmN0aW9uKFwiZGVidWdnZXI7XFxuLypcXG5UcmFjaW5nICdcIiArIGRlcml2YXRpb24ubmFtZSArIFwiJ1xcblxcbllvdSBhcmUgZW50ZXJpbmcgdGhpcyBicmVhayBwb2ludCBiZWNhdXNlIGRlcml2YXRpb24gJ1wiICsgZGVyaXZhdGlvbi5uYW1lICsgXCInIGlzIGJlaW5nIHRyYWNlZCBhbmQgJ1wiICsgb2JzZXJ2YWJsZS5uYW1lICsgXCInIGlzIG5vdyBmb3JjaW5nIGl0IHRvIHVwZGF0ZS5cXG5KdXN0IGZvbGxvdyB0aGUgc3RhY2t0cmFjZSB5b3Ugc2hvdWxkIG5vdyBzZWUgaW4gdGhlIGRldnRvb2xzIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBwaWVjZSBvZiB5b3VyIGNvZGUgaXMgY2F1c2luZyB0aGlzIHVwZGF0ZVxcblRoZSBzdGFja2ZyYW1lIHlvdSBhcmUgbG9va2luZyBmb3IgaXMgYXQgbGVhc3QgfjYtOCBzdGFjay1mcmFtZXMgdXAuXFxuXFxuXCIgKyAoZGVyaXZhdGlvbiBpbnN0YW5jZW9mIENvbXB1dGVkVmFsdWUgPyBkZXJpdmF0aW9uLmRlcml2YXRpb24udG9TdHJpbmcoKS5yZXBsYWNlKC9bKl1cXC8vZywgXCIvXCIpIDogXCJcIikgKyBcIlxcblxcblRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgZGVyaXZhdGlvbiBhcmU6XFxuXFxuXCIgKyBsaW5lcy5qb2luKFwiXFxuXCIpICsgXCJcXG4qL1xcbiAgICBcIikoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcmludERlcFRyZWUodHJlZSwgbGluZXMsIGRlcHRoKSB7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+PSAxMDAwKSB7XG4gICAgICAgIGxpbmVzLnB1c2goXCIoYW5kIG1hbnkgbW9yZSlcIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGluZXMucHVzaChcIlwiICsgbmV3IEFycmF5KGRlcHRoKS5qb2luKFwiXFx0XCIpICsgdHJlZS5uYW1lKTsgLy8gTVdFOiBub3QgdGhlIGZhc3Rlc3QsIGJ1dCB0aGUgZWFzaWVzdCB3YXkgOilcbiAgICBpZiAodHJlZS5kZXBlbmRlbmNpZXMpXG4gICAgICAgIHRyZWUuZGVwZW5kZW5jaWVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBwcmludERlcFRyZWUoY2hpbGQsIGxpbmVzLCBkZXB0aCArIDEpOyB9KTtcbn1cblxudmFyIFJlYWN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlYWN0aW9uKG5hbWUsIG9uSW52YWxpZGF0ZSwgZXJyb3JIYW5kbGVyLCByZXF1aXJlc09ic2VydmFibGUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gXCJSZWFjdGlvbkBcIiArIGdldE5leHRJZCgpOyB9XG4gICAgICAgIGlmIChyZXF1aXJlc09ic2VydmFibGUgPT09IHZvaWQgMCkgeyByZXF1aXJlc09ic2VydmFibGUgPSBmYWxzZTsgfVxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLm9uSW52YWxpZGF0ZSA9IG9uSW52YWxpZGF0ZTtcbiAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7XG4gICAgICAgIHRoaXMucmVxdWlyZXNPYnNlcnZhYmxlID0gcmVxdWlyZXNPYnNlcnZhYmxlO1xuICAgICAgICB0aGlzLm9ic2VydmluZyA9IFtdOyAvLyBub2RlcyB3ZSBhcmUgbG9va2luZyBhdC4gT3VyIHZhbHVlIGRlcGVuZHMgb24gdGhlc2Ugbm9kZXNcbiAgICAgICAgdGhpcy5uZXdPYnNlcnZpbmcgPSBbXTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXNTdGF0ZSA9IElEZXJpdmF0aW9uU3RhdGUuTk9UX1RSQUNLSU5HO1xuICAgICAgICB0aGlzLmRpZmZWYWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucnVuSWQgPSAwO1xuICAgICAgICB0aGlzLnVuYm91bmREZXBzQ291bnQgPSAwO1xuICAgICAgICB0aGlzLl9fbWFwaWQgPSBcIiNcIiArIGdldE5leHRJZCgpO1xuICAgICAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNUcmFja1BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNUcmFjaW5nID0gVHJhY2VNb2RlLk5PTkU7XG4gICAgfVxuICAgIFJlYWN0aW9uLnByb3RvdHlwZS5vbkJlY29tZVN0YWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNTY2hlZHVsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGdsb2JhbFN0YXRlLnBlbmRpbmdSZWFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIHJ1blJlYWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUuaXNTY2hlZHVsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NjaGVkdWxlZDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGludGVybmFsLCB1c2Ugc2NoZWR1bGUoKSBpZiB5b3UgaW50ZW5kIHRvIGtpY2sgb2ZmIGEgcmVhY3Rpb25cbiAgICAgKi9cbiAgICBSZWFjdGlvbi5wcm90b3R5cGUucnVuUmVhY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICBzdGFydEJhdGNoKCk7XG4gICAgICAgICAgICB0aGlzLl9pc1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHNob3VsZENvbXB1dGUodGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1RyYWNrUGVuZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkludmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzVHJhY2tQZW5kaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NweUVuYWJsZWQoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbkludmFsaWRhdGUgZGlkbid0IHRyaWdnZXIgdHJhY2sgcmlnaHQgYXdheS4uXG4gICAgICAgICAgICAgICAgICAgICAgICBzcHlSZXBvcnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNjaGVkdWxlZC1yZWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydEV4Y2VwdGlvbkluRGVyaXZhdGlvbihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRCYXRjaCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUudHJhY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiUmVhY3Rpb24gYWxyZWFkeSBkaXNwb3NlZFwiKSAvLyBOb3RlOiBOb3QgYSB3YXJuaW5nIC8gZXJyb3IgaW4gbW9ieCA0IGVpdGhlclxuICAgICAgICB9XG4gICAgICAgIHN0YXJ0QmF0Y2goKTtcbiAgICAgICAgdmFyIG5vdGlmeSA9IGlzU3B5RW5hYmxlZCgpO1xuICAgICAgICB2YXIgc3RhcnRUaW1lO1xuICAgICAgICBpZiAobm90aWZ5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHNweVJlcG9ydFN0YXJ0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJyZWFjdGlvblwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSB0cnVlO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdHJhY2tEZXJpdmVkRnVuY3Rpb24odGhpcywgZm4sIHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc1RyYWNrUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAvLyBkaXNwb3NlZCBkdXJpbmcgbGFzdCBydW4uIENsZWFuIHVwIGV2ZXJ5dGhpbmcgdGhhdCB3YXMgYm91bmQgYWZ0ZXIgdGhlIGRpc3Bvc2UgY2FsbC5cbiAgICAgICAgICAgIGNsZWFyT2JzZXJ2aW5nKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NhdWdodEV4Y2VwdGlvbihyZXN1bHQpKVxuICAgICAgICAgICAgdGhpcy5yZXBvcnRFeGNlcHRpb25JbkRlcml2YXRpb24ocmVzdWx0LmNhdXNlKTtcbiAgICAgICAgaWYgKG5vdGlmeSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHNweVJlcG9ydEVuZCh7XG4gICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSAtIHN0YXJ0VGltZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZW5kQmF0Y2goKTtcbiAgICB9O1xuICAgIFJlYWN0aW9uLnByb3RvdHlwZS5yZXBvcnRFeGNlcHRpb25JbkRlcml2YXRpb24gPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnJvciwgdGhpcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2JhbFN0YXRlLmRpc2FibGVFcnJvckJvdW5kYXJpZXMpXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlttb2J4XSBFbmNvdW50ZXJlZCBhbiB1bmNhdWdodCBleGNlcHRpb24gdGhhdCB3YXMgdGhyb3duIGJ5IGEgcmVhY3Rpb24gb3Igb2JzZXJ2ZXIgY29tcG9uZW50LCBpbjogJ1wiICsgdGhpcyArIFwiJ1wiO1xuICAgICAgICBpZiAoZ2xvYmFsU3RhdGUuc3VwcHJlc3NSZWFjdGlvbkVycm9ycykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW21vYnhdIChlcnJvciBpbiByZWFjdGlvbiAnXCIgKyB0aGlzLm5hbWUgKyBcIicgc3VwcHJlc3NlZCwgZml4IGVycm9yIG9mIGNhdXNpbmcgYWN0aW9uIGJlbG93KVwiKTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIGVycm9yKTtcbiAgICAgICAgICAgIC8qKiBJZiBkZWJ1Z2dpbmcgYnJvdWdodCB5b3UgaGVyZSwgcGxlYXNlLCByZWFkIHRoZSBhYm92ZSBtZXNzYWdlIDotKS4gVG54ISAqL1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NweUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgc3B5UmVwb3J0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgZXJyb3I6IFwiXCIgKyBlcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsU3RhdGUuZ2xvYmFsUmVhY3Rpb25FcnJvckhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGYoZXJyb3IsIF90aGlzKTsgfSk7XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzUnVubmluZykge1xuICAgICAgICAgICAgICAgIC8vIGlmIGRpc3Bvc2VkIHdoaWxlIHJ1bm5pbmcsIGNsZWFuIHVwIGxhdGVyLiBNYXliZSBub3Qgb3B0aW1hbCwgYnV0IHJhcmUgY2FzZVxuICAgICAgICAgICAgICAgIHN0YXJ0QmF0Y2goKTtcbiAgICAgICAgICAgICAgICBjbGVhck9ic2VydmluZyh0aGlzKTtcbiAgICAgICAgICAgICAgICBlbmRCYXRjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUuZ2V0RGlzcG9zZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5kaXNwb3NlLmJpbmQodGhpcyk7XG4gICAgICAgIHJbJG1vYnhdID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIlJlYWN0aW9uW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUudHJhY2UgPSBmdW5jdGlvbiAoZW50ZXJCcmVha1BvaW50KSB7XG4gICAgICAgIGlmIChlbnRlckJyZWFrUG9pbnQgPT09IHZvaWQgMCkgeyBlbnRlckJyZWFrUG9pbnQgPSBmYWxzZTsgfVxuICAgICAgICB0cmFjZSh0aGlzLCBlbnRlckJyZWFrUG9pbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIFJlYWN0aW9uO1xufSgpKTtcbmZ1bmN0aW9uIG9uUmVhY3Rpb25FcnJvcihoYW5kbGVyKSB7XG4gICAgZ2xvYmFsU3RhdGUuZ2xvYmFsUmVhY3Rpb25FcnJvckhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlkeCA9IGdsb2JhbFN0YXRlLmdsb2JhbFJlYWN0aW9uRXJyb3JIYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpO1xuICAgICAgICBpZiAoaWR4ID49IDApXG4gICAgICAgICAgICBnbG9iYWxTdGF0ZS5nbG9iYWxSZWFjdGlvbkVycm9ySGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfTtcbn1cbi8qKlxuICogTWFnaWMgbnVtYmVyIGFsZXJ0IVxuICogRGVmaW5lcyB3aXRoaW4gaG93IG1hbnkgdGltZXMgYSByZWFjdGlvbiBpcyBhbGxvd2VkIHRvIHJlLXRyaWdnZXIgaXRzZWxmXG4gKiB1bnRpbCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBpcyBnb25uYSBiZSBhIG5ldmVyIGVuZGluZyBsb29wLi4uXG4gKi9cbnZhciBNQVhfUkVBQ1RJT05fSVRFUkFUSU9OUyA9IDEwMDtcbnZhciByZWFjdGlvblNjaGVkdWxlciA9IGZ1bmN0aW9uIChmKSB7IHJldHVybiBmKCk7IH07XG5mdW5jdGlvbiBydW5SZWFjdGlvbnMoKSB7XG4gICAgLy8gVHJhbXBvbGluaW5nLCBpZiBydW5SZWFjdGlvbnMgYXJlIGFscmVhZHkgcnVubmluZywgbmV3IHJlYWN0aW9ucyB3aWxsIGJlIHBpY2tlZCB1cFxuICAgIGlmIChnbG9iYWxTdGF0ZS5pbkJhdGNoID4gMCB8fCBnbG9iYWxTdGF0ZS5pc1J1bm5pbmdSZWFjdGlvbnMpXG4gICAgICAgIHJldHVybjtcbiAgICByZWFjdGlvblNjaGVkdWxlcihydW5SZWFjdGlvbnNIZWxwZXIpO1xufVxuZnVuY3Rpb24gcnVuUmVhY3Rpb25zSGVscGVyKCkge1xuICAgIGdsb2JhbFN0YXRlLmlzUnVubmluZ1JlYWN0aW9ucyA9IHRydWU7XG4gICAgdmFyIGFsbFJlYWN0aW9ucyA9IGdsb2JhbFN0YXRlLnBlbmRpbmdSZWFjdGlvbnM7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIC8vIFdoaWxlIHJ1bm5pbmcgcmVhY3Rpb25zLCBuZXcgcmVhY3Rpb25zIG1pZ2h0IGJlIHRyaWdnZXJlZC5cbiAgICAvLyBIZW5jZSB3ZSB3b3JrIHdpdGggdHdvIHZhcmlhYmxlcyBhbmQgY2hlY2sgd2hldGhlclxuICAgIC8vIHdlIGNvbnZlcmdlIHRvIG5vIHJlbWFpbmluZyByZWFjdGlvbnMgYWZ0ZXIgYSB3aGlsZS5cbiAgICB3aGlsZSAoYWxsUmVhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCsraXRlcmF0aW9ucyA9PT0gTUFYX1JFQUNUSU9OX0lURVJBVElPTlMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWFjdGlvbiBkb2Vzbid0IGNvbnZlcmdlIHRvIGEgc3RhYmxlIHN0YXRlIGFmdGVyIFwiICsgTUFYX1JFQUNUSU9OX0lURVJBVElPTlMgKyBcIiBpdGVyYXRpb25zLlwiICtcbiAgICAgICAgICAgICAgICAoXCIgUHJvYmFibHkgdGhlcmUgaXMgYSBjeWNsZSBpbiB0aGUgcmVhY3RpdmUgZnVuY3Rpb246IFwiICsgYWxsUmVhY3Rpb25zWzBdKSk7XG4gICAgICAgICAgICBhbGxSZWFjdGlvbnMuc3BsaWNlKDApOyAvLyBjbGVhciByZWFjdGlvbnNcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVtYWluaW5nUmVhY3Rpb25zID0gYWxsUmVhY3Rpb25zLnNwbGljZSgwKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSByZW1haW5pbmdSZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKVxuICAgICAgICAgICAgcmVtYWluaW5nUmVhY3Rpb25zW2ldLnJ1blJlYWN0aW9uKCk7XG4gICAgfVxuICAgIGdsb2JhbFN0YXRlLmlzUnVubmluZ1JlYWN0aW9ucyA9IGZhbHNlO1xufVxudmFyIGlzUmVhY3Rpb24gPSBjcmVhdGVJbnN0YW5jZW9mUHJlZGljYXRlKFwiUmVhY3Rpb25cIiwgUmVhY3Rpb24pO1xuZnVuY3Rpb24gc2V0UmVhY3Rpb25TY2hlZHVsZXIoZm4pIHtcbiAgICB2YXIgYmFzZVNjaGVkdWxlciA9IHJlYWN0aW9uU2NoZWR1bGVyO1xuICAgIHJlYWN0aW9uU2NoZWR1bGVyID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGZuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJhc2VTY2hlZHVsZXIoZik7IH0pOyB9O1xufVxuXG5mdW5jdGlvbiBpc1NweUVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhIWdsb2JhbFN0YXRlLnNweUxpc3RlbmVycy5sZW5ndGg7XG59XG5mdW5jdGlvbiBzcHlSZXBvcnQoZXZlbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICByZXR1cm47IC8vIGRlYWQgY29kZSBlbGltaW5hdGlvbiBjYW4gZG8gdGhlIHJlc3RcbiAgICBpZiAoIWdsb2JhbFN0YXRlLnNweUxpc3RlbmVycy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgbGlzdGVuZXJzID0gZ2xvYmFsU3RhdGUuc3B5TGlzdGVuZXJzO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKylcbiAgICAgICAgbGlzdGVuZXJzW2ldKGV2ZW50KTtcbn1cbmZ1bmN0aW9uIHNweVJlcG9ydFN0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBjaGFuZ2UgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZXZlbnQpLCB7IHNweVJlcG9ydFN0YXJ0OiB0cnVlIH0pO1xuICAgIHNweVJlcG9ydChjaGFuZ2UpO1xufVxudmFyIEVORF9FVkVOVCA9IHsgc3B5UmVwb3J0RW5kOiB0cnVlIH07XG5mdW5jdGlvbiBzcHlSZXBvcnRFbmQoY2hhbmdlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChjaGFuZ2UpXG4gICAgICAgIHNweVJlcG9ydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBzcHlSZXBvcnRFbmQ6IHRydWUgfSkpO1xuICAgIGVsc2VcbiAgICAgICAgc3B5UmVwb3J0KEVORF9FVkVOVCk7XG59XG5mdW5jdGlvbiBzcHkobGlzdGVuZXIpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlttb2J4LnNweV0gSXMgYSBuby1vcCBpbiBwcm9kdWN0aW9uIGJ1aWxkc1wiKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdsb2JhbFN0YXRlLnNweUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIG9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2xvYmFsU3RhdGUuc3B5TGlzdGVuZXJzID0gZ2xvYmFsU3RhdGUuc3B5TGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAobCkgeyByZXR1cm4gbCAhPT0gbGlzdGVuZXI7IH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRvbnRSZWFzc2lnbkZpZWxkcygpIHtcbiAgICBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBcIkBhY3Rpb24gZmllbGRzIGFyZSBub3QgcmVhc3NpZ25hYmxlXCIpO1xufVxuZnVuY3Rpb24gbmFtZWRBY3Rpb25EZWNvcmF0b3IobmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wLCBkZXNjcmlwdG9yKSB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGRlc2NyaXB0b3IuZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChcIkBhY3Rpb24gY2Fubm90IGJlIHVzZWQgd2l0aCBnZXR0ZXJzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYmFiZWwgLyB0eXBlc2NyaXB0XG4gICAgICAgICAgICAvLyBAYWN0aW9uIG1ldGhvZCgpIHsgfVxuICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyB0eXBlc2NyaXB0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZUFjdGlvbihuYW1lLCBkZXNjcmlwdG9yLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUgLy8gZm9yIHR5cGVzY3JpcHQsIHRoaXMgbXVzdCBiZSB3cml0YWJsZSwgb3RoZXJ3aXNlIGl0IGNhbm5vdCBpbmhlcml0IDovIChzZWUgaW5oZXJpdGFibGUgYWN0aW9ucyB0ZXN0KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBiYWJlbCBvbmx5OiBAYWN0aW9uIG1ldGhvZCA9ICgpID0+IHt9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbGl6ZXJfMSA9IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXI7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOLkI6IHdlIGNhbid0IGltbWVkaWF0ZWx5IGludm9rZSBpbml0aWFsaXplcjsgdGhpcyB3b3VsZCBiZSB3cm9uZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQWN0aW9uKG5hbWUsIGluaXRpYWxpemVyXzEuY2FsbCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBib3VuZCBpbnN0YW5jZSBtZXRob2RzXG4gICAgICAgIHJldHVybiBhY3Rpb25GaWVsZERlY29yYXRvcihuYW1lKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG59XG5mdW5jdGlvbiBhY3Rpb25GaWVsZERlY29yYXRvcihuYW1lKSB7XG4gICAgLy8gU2ltcGxlIHByb3BlcnR5IHRoYXQgd3JpdGVzIG9uIGZpcnN0IGludm9jYXRpb24gdG8gdGhlIGN1cnJlbnQgaW5zdGFuY2VcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgcHJvcCwgZGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRIaWRkZW5Qcm9wKHRoaXMsIHByb3AsIGFjdGlvbihuYW1lLCB2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gYm91bmRBY3Rpb25EZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGFwcGx5VG9JbnN0YW5jZSkge1xuICAgIGlmIChhcHBseVRvSW5zdGFuY2UgPT09IHRydWUpIHtcbiAgICAgICAgZGVmaW5lQm91bmRBY3Rpb24odGFyZ2V0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IudmFsdWUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgLy8gaWYgKGRlc2NyaXB0b3IudmFsdWUpXG4gICAgICAgIC8vIFR5cGVzY3JpcHQgLyBCYWJlbDogQGFjdGlvbi5ib3VuZCBtZXRob2QoKSB7IH1cbiAgICAgICAgLy8gYWxzbzogYmFiZWwgQGFjdGlvbi5ib3VuZCBtZXRob2QgPSAoKSA9PiB7fVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVCb3VuZEFjdGlvbih0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IudmFsdWUgfHwgZGVzY3JpcHRvci5pbml0aWFsaXplci5jYWxsKHRoaXMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZG9udFJlYXNzaWduRmllbGRzXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIGZpZWxkIGRlY29yYXRvciBUeXBlc2NyaXB0IEBhY3Rpb24uYm91bmQgbWV0aG9kID0gKCkgPT4ge31cbiAgICByZXR1cm4ge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBkZWZpbmVCb3VuZEFjdGlvbih0aGlzLCBwcm9wZXJ0eU5hbWUsIHYpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG52YXIgYWN0aW9uID0gZnVuY3Rpb24gYWN0aW9uKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpIHtcbiAgICAvLyBhY3Rpb24oZm4oKSB7fSlcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnMSA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICByZXR1cm4gY3JlYXRlQWN0aW9uKGFyZzEubmFtZSB8fCBcIjx1bm5hbWVkIGFjdGlvbj5cIiwgYXJnMSk7XG4gICAgLy8gYWN0aW9uKFwibmFtZVwiLCBmbigpIHt9KVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBhcmcyID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHJldHVybiBjcmVhdGVBY3Rpb24oYXJnMSwgYXJnMik7XG4gICAgLy8gQGFjdGlvbihcIm5hbWVcIikgZm4oKSB7fVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmcxID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gbmFtZWRBY3Rpb25EZWNvcmF0b3IoYXJnMSk7XG4gICAgLy8gQGFjdGlvbiBmbigpIHt9XG4gICAgaWYgKGFyZzQgPT09IHRydWUpIHtcbiAgICAgICAgLy8gYXBwbHkgdG8gaW5zdGFuY2UgaW1tZWRpYXRlbHlcbiAgICAgICAgYWRkSGlkZGVuUHJvcChhcmcxLCBhcmcyLCBjcmVhdGVBY3Rpb24oYXJnMS5uYW1lIHx8IGFyZzIsIGFyZzMudmFsdWUsIHRoaXMpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuYW1lZEFjdGlvbkRlY29yYXRvcihhcmcyKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cbn07XG5hY3Rpb24uYm91bmQgPSBib3VuZEFjdGlvbkRlY29yYXRvcjtcbmZ1bmN0aW9uIHJ1bkluQWN0aW9uKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgYWN0aW9uTmFtZSA9IHR5cGVvZiBhcmcxID09PSBcInN0cmluZ1wiID8gYXJnMSA6IGFyZzEubmFtZSB8fCBcIjx1bm5hbWVkIGFjdGlvbj5cIjtcbiAgICB2YXIgZm4gPSB0eXBlb2YgYXJnMSA9PT0gXCJmdW5jdGlvblwiID8gYXJnMSA6IGFyZzI7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIGZuID09PSBcImZ1bmN0aW9uXCIgJiYgZm4ubGVuZ3RoID09PSAwLCBcImBydW5JbkFjdGlvbmAgZXhwZWN0cyBhIGZ1bmN0aW9uIHdpdGhvdXQgYXJndW1lbnRzXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWUgIT09IFwic3RyaW5nXCIgfHwgIWFjdGlvbk5hbWUpXG4gICAgICAgICAgICBmYWlsKFwiYWN0aW9ucyBzaG91bGQgaGF2ZSB2YWxpZCBuYW1lcywgZ290OiAnXCIgKyBhY3Rpb25OYW1lICsgXCInXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZXhlY3V0ZUFjdGlvbihhY3Rpb25OYW1lLCBmbiwgdGhpcywgdW5kZWZpbmVkKTtcbn1cbmZ1bmN0aW9uIGlzQWN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gXCJmdW5jdGlvblwiICYmIHRoaW5nLmlzTW9ieEFjdGlvbiA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGRlZmluZUJvdW5kQWN0aW9uKHRhcmdldCwgcHJvcGVydHlOYW1lLCBmbikge1xuICAgIGFkZEhpZGRlblByb3AodGFyZ2V0LCBwcm9wZXJ0eU5hbWUsIGNyZWF0ZUFjdGlvbihwcm9wZXJ0eU5hbWUsIGZuLmJpbmQodGFyZ2V0KSkpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuYW1lZCByZWFjdGl2ZSB2aWV3IGFuZCBrZWVwcyBpdCBhbGl2ZSwgc28gdGhhdCB0aGUgdmlldyBpcyBhbHdheXNcbiAqIHVwZGF0ZWQgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcywgZXZlbiB3aGVuIHRoZSB2aWV3IGlzIG5vdCBmdXJ0aGVyIHVzZWQgYnkgc29tZXRoaW5nIGVsc2UuXG4gKiBAcGFyYW0gdmlldyBUaGUgcmVhY3RpdmUgdmlld1xuICogQHJldHVybnMgZGlzcG9zZXIgZnVuY3Rpb24sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIHZpZXcgZnJvbSBiZWluZyB1cGRhdGVkIGluIHRoZSBmdXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGF1dG9ydW4odmlldywgb3B0cykge1xuICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsgb3B0cyA9IEVNUFRZX09CSkVDVDsgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaW52YXJpYW50KHR5cGVvZiB2aWV3ID09PSBcImZ1bmN0aW9uXCIsIFwiQXV0b3J1biBleHBlY3RzIGEgZnVuY3Rpb24gYXMgZmlyc3QgYXJndW1lbnRcIik7XG4gICAgICAgIGludmFyaWFudChpc0FjdGlvbih2aWV3KSA9PT0gZmFsc2UsIFwiQXV0b3J1biBkb2VzIG5vdCBhY2NlcHQgYWN0aW9ucyBzaW5jZSBhY3Rpb25zIGFyZSB1bnRyYWNrYWJsZVwiKTtcbiAgICB9XG4gICAgdmFyIG5hbWUgPSAob3B0cyAmJiBvcHRzLm5hbWUpIHx8IHZpZXcubmFtZSB8fCBcIkF1dG9ydW5AXCIgKyBnZXROZXh0SWQoKTtcbiAgICB2YXIgcnVuU3luYyA9ICFvcHRzLnNjaGVkdWxlciAmJiAhb3B0cy5kZWxheTtcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgaWYgKHJ1blN5bmMpIHtcbiAgICAgICAgLy8gbm9ybWFsIGF1dG9ydW5cbiAgICAgICAgcmVhY3Rpb24gPSBuZXcgUmVhY3Rpb24obmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy50cmFjayhyZWFjdGlvblJ1bm5lcik7XG4gICAgICAgIH0sIG9wdHMub25FcnJvciwgb3B0cy5yZXF1aXJlc09ic2VydmFibGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHNjaGVkdWxlcl8xID0gY3JlYXRlU2NoZWR1bGVyRnJvbU9wdGlvbnMob3B0cyk7XG4gICAgICAgIC8vIGRlYm91bmNlZCBhdXRvcnVuXG4gICAgICAgIHZhciBpc1NjaGVkdWxlZF8xID0gZmFsc2U7XG4gICAgICAgIHJlYWN0aW9uID0gbmV3IFJlYWN0aW9uKG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghaXNTY2hlZHVsZWRfMSkge1xuICAgICAgICAgICAgICAgIGlzU2NoZWR1bGVkXzEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlcl8xKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNTY2hlZHVsZWRfMSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlYWN0aW9uLmlzRGlzcG9zZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFjdGlvbi50cmFjayhyZWFjdGlvblJ1bm5lcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIG9wdHMub25FcnJvciwgb3B0cy5yZXF1aXJlc09ic2VydmFibGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFjdGlvblJ1bm5lcigpIHtcbiAgICAgICAgdmlldyhyZWFjdGlvbik7XG4gICAgfVxuICAgIHJlYWN0aW9uLnNjaGVkdWxlKCk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLmdldERpc3Bvc2VyKCk7XG59XG52YXIgcnVuID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGYoKTsgfTtcbmZ1bmN0aW9uIGNyZWF0ZVNjaGVkdWxlckZyb21PcHRpb25zKG9wdHMpIHtcbiAgICByZXR1cm4gb3B0cy5zY2hlZHVsZXJcbiAgICAgICAgPyBvcHRzLnNjaGVkdWxlclxuICAgICAgICA6IG9wdHMuZGVsYXlcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIHNldFRpbWVvdXQoZiwgb3B0cy5kZWxheSk7IH1cbiAgICAgICAgICAgIDogcnVuO1xufVxuZnVuY3Rpb24gcmVhY3Rpb24oZXhwcmVzc2lvbiwgZWZmZWN0LCBvcHRzKSB7XG4gICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgeyBvcHRzID0gRU1QVFlfT0JKRUNUOyB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIGV4cHJlc3Npb24gPT09IFwiZnVuY3Rpb25cIiwgXCJGaXJzdCBhcmd1bWVudCB0byByZWFjdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgaW52YXJpYW50KHR5cGVvZiBvcHRzID09PSBcIm9iamVjdFwiLCBcIlRoaXJkIGFyZ3VtZW50IG9mIHJlYWN0aW9ucyBzaG91bGQgYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IG9wdHMubmFtZSB8fCBcIlJlYWN0aW9uQFwiICsgZ2V0TmV4dElkKCk7XG4gICAgdmFyIGVmZmVjdEFjdGlvbiA9IGFjdGlvbihuYW1lLCBvcHRzLm9uRXJyb3IgPyB3cmFwRXJyb3JIYW5kbGVyKG9wdHMub25FcnJvciwgZWZmZWN0KSA6IGVmZmVjdCk7XG4gICAgdmFyIHJ1blN5bmMgPSAhb3B0cy5zY2hlZHVsZXIgJiYgIW9wdHMuZGVsYXk7XG4gICAgdmFyIHNjaGVkdWxlciA9IGNyZWF0ZVNjaGVkdWxlckZyb21PcHRpb25zKG9wdHMpO1xuICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuICAgIHZhciBpc1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YXIgZXF1YWxzID0gb3B0cy5jb21wYXJlU3RydWN0dXJhbFxuICAgICAgICA/IGNvbXBhcmVyLnN0cnVjdHVyYWxcbiAgICAgICAgOiBvcHRzLmVxdWFscyB8fCBjb21wYXJlci5kZWZhdWx0O1xuICAgIHZhciByID0gbmV3IFJlYWN0aW9uKG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGZpcnN0VGltZSB8fCBydW5TeW5jKSB7XG4gICAgICAgICAgICByZWFjdGlvblJ1bm5lcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc1NjaGVkdWxlZCkge1xuICAgICAgICAgICAgaXNTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2NoZWR1bGVyKHJlYWN0aW9uUnVubmVyKTtcbiAgICAgICAgfVxuICAgIH0sIG9wdHMub25FcnJvciwgb3B0cy5yZXF1aXJlc09ic2VydmFibGUpO1xuICAgIGZ1bmN0aW9uIHJlYWN0aW9uUnVubmVyKCkge1xuICAgICAgICBpc1NjaGVkdWxlZCA9IGZhbHNlOyAvLyBROiBtb3ZlIGludG8gcmVhY3Rpb24gcnVubmVyP1xuICAgICAgICBpZiAoci5pc0Rpc3Bvc2VkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICByLnRyYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBuZXh0VmFsdWUgPSBleHByZXNzaW9uKHIpO1xuICAgICAgICAgICAgY2hhbmdlZCA9IGZpcnN0VGltZSB8fCAhZXF1YWxzKHZhbHVlLCBuZXh0VmFsdWUpO1xuICAgICAgICAgICAgdmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZmlyc3RUaW1lICYmIG9wdHMuZmlyZUltbWVkaWF0ZWx5KVxuICAgICAgICAgICAgZWZmZWN0QWN0aW9uKHZhbHVlLCByKTtcbiAgICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgY2hhbmdlZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIGVmZmVjdEFjdGlvbih2YWx1ZSwgcik7XG4gICAgICAgIGlmIChmaXJzdFRpbWUpXG4gICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICB9XG4gICAgci5zY2hlZHVsZSgpO1xuICAgIHJldHVybiByLmdldERpc3Bvc2VyKCk7XG59XG5mdW5jdGlvbiB3cmFwRXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlciwgYmFzZUZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlRm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmNhbGwodGhpcywgZSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBvbkJlY29tZU9ic2VydmVkKHRoaW5nLCBhcmcyLCBhcmczKSB7XG4gICAgcmV0dXJuIGludGVyY2VwdEhvb2soXCJvbkJlY29tZU9ic2VydmVkXCIsIHRoaW5nLCBhcmcyLCBhcmczKTtcbn1cbmZ1bmN0aW9uIG9uQmVjb21lVW5vYnNlcnZlZCh0aGluZywgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiBpbnRlcmNlcHRIb29rKFwib25CZWNvbWVVbm9ic2VydmVkXCIsIHRoaW5nLCBhcmcyLCBhcmczKTtcbn1cbmZ1bmN0aW9uIGludGVyY2VwdEhvb2soaG9vaywgdGhpbmcsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgYXRvbSA9IHR5cGVvZiBhcmczID09PSBcImZ1bmN0aW9uXCIgPyBnZXRBdG9tKHRoaW5nLCBhcmcyKSA6IGdldEF0b20odGhpbmcpO1xuICAgIHZhciBjYiA9IHR5cGVvZiBhcmczID09PSBcImZ1bmN0aW9uXCIgPyBhcmczIDogYXJnMjtcbiAgICB2YXIgbGlzdGVuZXJzS2V5ID0gaG9vayArIFwiTGlzdGVuZXJzXCI7XG4gICAgaWYgKGF0b21bbGlzdGVuZXJzS2V5XSkge1xuICAgICAgICBhdG9tW2xpc3RlbmVyc0tleV0uYWRkKGNiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGF0b21bbGlzdGVuZXJzS2V5XSA9IG5ldyBTZXQoW2NiXSk7XG4gICAgfVxuICAgIHZhciBvcmlnID0gYXRvbVtob29rXTtcbiAgICBpZiAodHlwZW9mIG9yaWcgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFwiTm90IGFuIGF0b20gdGhhdCBjYW4gYmUgKHVuKW9ic2VydmVkXCIpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBob29rTGlzdGVuZXJzID0gYXRvbVtsaXN0ZW5lcnNLZXldO1xuICAgICAgICBpZiAoaG9va0xpc3RlbmVycykge1xuICAgICAgICAgICAgaG9va0xpc3RlbmVycy5kZWxldGUoY2IpO1xuICAgICAgICAgICAgaWYgKGhvb2tMaXN0ZW5lcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhdG9tW2xpc3RlbmVyc0tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjb25maWd1cmUob3B0aW9ucykge1xuICAgIHZhciBlbmZvcmNlQWN0aW9ucyA9IG9wdGlvbnMuZW5mb3JjZUFjdGlvbnMsIGNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbiA9IG9wdGlvbnMuY29tcHV0ZWRSZXF1aXJlc1JlYWN0aW9uLCBjb21wdXRlZENvbmZpZ3VyYWJsZSA9IG9wdGlvbnMuY29tcHV0ZWRDb25maWd1cmFibGUsIGRpc2FibGVFcnJvckJvdW5kYXJpZXMgPSBvcHRpb25zLmRpc2FibGVFcnJvckJvdW5kYXJpZXMsIHJlYWN0aW9uU2NoZWR1bGVyID0gb3B0aW9ucy5yZWFjdGlvblNjaGVkdWxlciwgcmVhY3Rpb25SZXF1aXJlc09ic2VydmFibGUgPSBvcHRpb25zLnJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlLCBvYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvbiA9IG9wdGlvbnMub2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb247XG4gICAgaWYgKG9wdGlvbnMuaXNvbGF0ZUdsb2JhbFN0YXRlID09PSB0cnVlKSB7XG4gICAgICAgIGlzb2xhdGVHbG9iYWxTdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAoZW5mb3JjZUFjdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVuZm9yY2VBY3Rpb25zID09PSBcImJvb2xlYW5cIiB8fCBlbmZvcmNlQWN0aW9ucyA9PT0gXCJzdHJpY3RcIilcbiAgICAgICAgICAgIGRlcHJlY2F0ZWQoXCJEZXByZWNhdGVkIHZhbHVlIGZvciAnZW5mb3JjZUFjdGlvbnMnLCB1c2UgJ2ZhbHNlJyA9PiAnXFxcIm5ldmVyXFxcIicsICd0cnVlJyA9PiAnXFxcIm9ic2VydmVkXFxcIicsICdcXFwic3RyaWN0XFxcIicgPT4gXFxcIidhbHdheXMnXFxcIiBpbnN0ZWFkXCIpO1xuICAgICAgICB2YXIgZWEgPSB2b2lkIDA7XG4gICAgICAgIHN3aXRjaCAoZW5mb3JjZUFjdGlvbnMpIHtcbiAgICAgICAgICAgIGNhc2UgdHJ1ZTpcbiAgICAgICAgICAgIGNhc2UgXCJvYnNlcnZlZFwiOlxuICAgICAgICAgICAgICAgIGVhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZmFsc2U6XG4gICAgICAgICAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgICAgICAgICAgICBlYSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInN0cmljdFwiOlxuICAgICAgICAgICAgY2FzZSBcImFsd2F5c1wiOlxuICAgICAgICAgICAgICAgIGVhID0gXCJzdHJpY3RcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmFpbChcIkludmFsaWQgdmFsdWUgZm9yICdlbmZvcmNlQWN0aW9ucyc6ICdcIiArIGVuZm9yY2VBY3Rpb25zICsgXCInLCBleHBlY3RlZCAnbmV2ZXInLCAnYWx3YXlzJyBvciAnb2JzZXJ2ZWQnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbFN0YXRlLmVuZm9yY2VBY3Rpb25zID0gZWE7XG4gICAgICAgIGdsb2JhbFN0YXRlLmFsbG93U3RhdGVDaGFuZ2VzID0gZWEgPT09IHRydWUgfHwgZWEgPT09IFwic3RyaWN0XCIgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuICAgIGlmIChjb21wdXRlZFJlcXVpcmVzUmVhY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbG9iYWxTdGF0ZS5jb21wdXRlZFJlcXVpcmVzUmVhY3Rpb24gPSAhIWNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbjtcbiAgICB9XG4gICAgaWYgKHJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZ2xvYmFsU3RhdGUucmVhY3Rpb25SZXF1aXJlc09ic2VydmFibGUgPSAhIXJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlO1xuICAgIH1cbiAgICBpZiAob2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbG9iYWxTdGF0ZS5vYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvbiA9ICEhb2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb247XG4gICAgICAgIGdsb2JhbFN0YXRlLmFsbG93U3RhdGVSZWFkcyA9ICFnbG9iYWxTdGF0ZS5vYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvbjtcbiAgICB9XG4gICAgaWYgKGNvbXB1dGVkQ29uZmlndXJhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZ2xvYmFsU3RhdGUuY29tcHV0ZWRDb25maWd1cmFibGUgPSAhIWNvbXB1dGVkQ29uZmlndXJhYmxlO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZUVycm9yQm91bmRhcmllcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChkaXNhYmxlRXJyb3JCb3VuZGFyaWVzID09PSB0cnVlKVxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiV0FSTklORzogRGVidWcgZmVhdHVyZSBvbmx5LiBNb2JYIHdpbGwgTk9UIHJlY292ZXIgZnJvbSBlcnJvcnMgd2hlbiBgZGlzYWJsZUVycm9yQm91bmRhcmllc2AgaXMgZW5hYmxlZC5cIik7XG4gICAgICAgIGdsb2JhbFN0YXRlLmRpc2FibGVFcnJvckJvdW5kYXJpZXMgPSAhIWRpc2FibGVFcnJvckJvdW5kYXJpZXM7XG4gICAgfVxuICAgIGlmIChyZWFjdGlvblNjaGVkdWxlcikge1xuICAgICAgICBzZXRSZWFjdGlvblNjaGVkdWxlcihyZWFjdGlvblNjaGVkdWxlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZSh0aGluZywgZGVjb3JhdG9ycykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBpbnZhcmlhbnQoaXNQbGFpbk9iamVjdChkZWNvcmF0b3JzKSwgXCJEZWNvcmF0b3JzIHNob3VsZCBiZSBhIGtleSB2YWx1ZSBtYXBcIik7XG4gICAgdmFyIHRhcmdldCA9IHR5cGVvZiB0aGluZyA9PT0gXCJmdW5jdGlvblwiID8gdGhpbmcucHJvdG90eXBlIDogdGhpbmc7XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICB2YXIgcHJvcGVydHlEZWNvcmF0b3JzID0gZGVjb3JhdG9yc1twcm9wXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BlcnR5RGVjb3JhdG9ycykpIHtcbiAgICAgICAgICAgIHByb3BlcnR5RGVjb3JhdG9ycyA9IFtwcm9wZXJ0eURlY29yYXRvcnNdO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgaW52YXJpYW50KHByb3BlcnR5RGVjb3JhdG9ycy5ldmVyeShmdW5jdGlvbiAoZGVjb3JhdG9yKSB7IHJldHVybiB0eXBlb2YgZGVjb3JhdG9yID09PSBcImZ1bmN0aW9uXCI7IH0pLCBcIkRlY29yYXRlOiBleHBlY3RlZCBhIGRlY29yYXRvciBmdW5jdGlvbiBvciBhcnJheSBvZiBkZWNvcmF0b3IgZnVuY3Rpb25zIGZvciAnXCIgKyBwcm9wICsgXCInXCIpO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgdmFyIG5ld0Rlc2NyaXB0b3IgPSBwcm9wZXJ0eURlY29yYXRvcnMucmVkdWNlKGZ1bmN0aW9uIChhY2NEZXNjcmlwdG9yLCBkZWNvcmF0b3IpIHsgcmV0dXJuIGRlY29yYXRvcih0YXJnZXQsIHByb3AsIGFjY0Rlc2NyaXB0b3IpOyB9LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgaWYgKG5ld0Rlc2NyaXB0b3IpXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCBuZXdEZXNjcmlwdG9yKTtcbiAgICB9O1xuICAgIGZvciAodmFyIHByb3AgaW4gZGVjb3JhdG9ycykge1xuICAgICAgICBfbG9vcF8xKHByb3ApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpbmc7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZE9ic2VydmFibGUodGFyZ2V0LCBwcm9wZXJ0aWVzLCBkZWNvcmF0b3JzLCBvcHRpb25zKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpbnZhcmlhbnQoYXJndW1lbnRzLmxlbmd0aCA+PSAyICYmIGFyZ3VtZW50cy5sZW5ndGggPD0gNCwgXCInZXh0ZW5kT2JzZXJ2YWJsZScgZXhwZWN0ZWQgMi00IGFyZ3VtZW50c1wiKTtcbiAgICAgICAgaW52YXJpYW50KHR5cGVvZiB0YXJnZXQgPT09IFwib2JqZWN0XCIsIFwiJ2V4dGVuZE9ic2VydmFibGUnIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGZpcnN0IGFyZ3VtZW50XCIpO1xuICAgICAgICBpbnZhcmlhbnQoIWlzT2JzZXJ2YWJsZU1hcCh0YXJnZXQpLCBcIidleHRlbmRPYnNlcnZhYmxlJyBzaG91bGQgbm90IGJlIHVzZWQgb24gbWFwcywgdXNlIG1hcC5tZXJnZSBpbnN0ZWFkXCIpO1xuICAgIH1cbiAgICBvcHRpb25zID0gYXNDcmVhdGVPYnNlcnZhYmxlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgZGVmYXVsdERlY29yYXRvciA9IGdldERlZmF1bHREZWNvcmF0b3JGcm9tT2JqZWN0T3B0aW9ucyhvcHRpb25zKTtcbiAgICBpbml0aWFsaXplSW5zdGFuY2UodGFyZ2V0KTsgLy8gRml4ZXMgIzE3NDBcbiAgICBhc09ic2VydmFibGVPYmplY3QodGFyZ2V0LCBvcHRpb25zLm5hbWUsIGRlZmF1bHREZWNvcmF0b3IuZW5oYW5jZXIpOyAvLyBtYWtlIHN1cmUgb2JqZWN0IGlzIG9ic2VydmFibGUsIGV2ZW4gd2l0aG91dCBpbml0aWFsIHByb3BzXG4gICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgIGV4dGVuZE9ic2VydmFibGVPYmplY3RXaXRoUHJvcGVydGllcyh0YXJnZXQsIHByb3BlcnRpZXMsIGRlY29yYXRvcnMsIGRlZmF1bHREZWNvcmF0b3IpO1xuICAgIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0RGVjb3JhdG9yRnJvbU9iamVjdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmRlZmF1bHREZWNvcmF0b3IgfHwgKG9wdGlvbnMuZGVlcCA9PT0gZmFsc2UgPyByZWZEZWNvcmF0b3IgOiBkZWVwRGVjb3JhdG9yKTtcbn1cbmZ1bmN0aW9uIGV4dGVuZE9ic2VydmFibGVPYmplY3RXaXRoUHJvcGVydGllcyh0YXJnZXQsIHByb3BlcnRpZXMsIGRlY29yYXRvcnMsIGRlZmF1bHREZWNvcmF0b3IpIHtcbiAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGludmFyaWFudCghaXNPYnNlcnZhYmxlKHByb3BlcnRpZXMpLCBcIkV4dGVuZGluZyBhbiBvYmplY3Qgd2l0aCBhbm90aGVyIG9ic2VydmFibGUgKG9iamVjdCkgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGNvbnN0cnVjdCBhbiBleHBsaWNpdCBwcm9wZXJ0eW1hcCwgdXNpbmcgYHRvSlNgIGlmIG5lZWQuIFNlZSBpc3N1ZSAjNTQwXCIpO1xuICAgICAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRQbGFpbk9iamVjdEtleXMoZGVjb3JhdG9ycyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXNfMSA9IF9fdmFsdWVzKGtleXMpLCBrZXlzXzFfMSA9IGtleXNfMS5uZXh0KCk7ICFrZXlzXzFfMS5kb25lOyBrZXlzXzFfMSA9IGtleXNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gcHJvcGVydGllcykpXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsKFwiVHJ5aW5nIHRvIGRlY2xhcmUgYSBkZWNvcmF0b3IgZm9yIHVuc3BlY2lmaWVkIHByb3BlcnR5ICdcIiArIHN0cmluZ2lmeUtleShrZXkpICsgXCInXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5c18xXzEgJiYgIWtleXNfMV8xLmRvbmUgJiYgKF9hID0ga2V5c18xLnJldHVybikpIF9hLmNhbGwoa2V5c18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0QmF0Y2goKTtcbiAgICB0cnkge1xuICAgICAgICB2YXIga2V5cyA9IG93bktleXMocHJvcGVydGllcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXlzXzIgPSBfX3ZhbHVlcyhrZXlzKSwga2V5c18yXzEgPSBrZXlzXzIubmV4dCgpOyAha2V5c18yXzEuZG9uZTsga2V5c18yXzEgPSBrZXlzXzIubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNfMl8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm9wZXJ0aWVzLCBrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHByb3BlcnRpZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbChcIidleHRlbmRPYnNlcnZhYmxlJyBvbmx5IGFjY2VwdHMgcGxhaW4gb2JqZWN0cyBhcyBzZWNvbmQgYXJndW1lbnRcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXB1dGVkKGRlc2NyaXB0b3IudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbChcIlBhc3NpbmcgYSAnY29tcHV0ZWQnIGFzIGluaXRpYWwgcHJvcGVydHkgdmFsdWUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBleHRlbmRPYnNlcnZhYmxlLiBVc2UgYSBnZXR0ZXIgb3IgZGVjb3JhdG9yIGluc3RlYWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkZWNvcmF0b3IgPSBkZWNvcmF0b3JzICYmIGtleSBpbiBkZWNvcmF0b3JzXG4gICAgICAgICAgICAgICAgICAgID8gZGVjb3JhdG9yc1trZXldXG4gICAgICAgICAgICAgICAgICAgIDogZGVzY3JpcHRvci5nZXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29tcHV0ZWREZWNvcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdERlY29yYXRvcjtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIHR5cGVvZiBkZWNvcmF0b3IgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgZmFpbChcIk5vdCBhIHZhbGlkIGRlY29yYXRvciBmb3IgJ1wiICsgc3RyaW5naWZ5S2V5KGtleSkgKyBcIicsIGdvdDogXCIgKyBkZWNvcmF0b3IpO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHREZXNjcmlwdG9yID0gZGVjb3JhdG9yKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0RGVzY3JpcHRvciAvLyBvdGhlcndpc2UsIGFzc3VtZSBhbHJlYWR5IGFwcGxpZWQsIGR1ZSB0byBgYXBwbHlUb0luc3RhbmNlYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHREZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleXNfMl8xICYmICFrZXlzXzJfMS5kb25lICYmIChfYiA9IGtleXNfMi5yZXR1cm4pKSBfYi5jYWxsKGtleXNfMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGVuZEJhdGNoKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXREZXBlbmRlbmN5VHJlZSh0aGluZywgcHJvcGVydHkpIHtcbiAgICByZXR1cm4gbm9kZVRvRGVwZW5kZW5jeVRyZWUoZ2V0QXRvbSh0aGluZywgcHJvcGVydHkpKTtcbn1cbmZ1bmN0aW9uIG5vZGVUb0RlcGVuZGVuY3lUcmVlKG5vZGUpIHtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiBub2RlLm5hbWVcbiAgICB9O1xuICAgIGlmIChub2RlLm9ic2VydmluZyAmJiBub2RlLm9ic2VydmluZy5sZW5ndGggPiAwKVxuICAgICAgICByZXN1bHQuZGVwZW5kZW5jaWVzID0gdW5pcXVlKG5vZGUub2JzZXJ2aW5nKS5tYXAobm9kZVRvRGVwZW5kZW5jeVRyZWUpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRPYnNlcnZlclRyZWUodGhpbmcsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIG5vZGVUb09ic2VydmVyVHJlZShnZXRBdG9tKHRoaW5nLCBwcm9wZXJ0eSkpO1xufVxuZnVuY3Rpb24gbm9kZVRvT2JzZXJ2ZXJUcmVlKG5vZGUpIHtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiBub2RlLm5hbWVcbiAgICB9O1xuICAgIGlmIChoYXNPYnNlcnZlcnMobm9kZSkpXG4gICAgICAgIHJlc3VsdC5vYnNlcnZlcnMgPSBBcnJheS5mcm9tKGdldE9ic2VydmVycyhub2RlKSkubWFwKG5vZGVUb09ic2VydmVyVHJlZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIGdlbmVyYXRvcklkID0gMDtcbmZ1bmN0aW9uIEZsb3dDYW5jZWxsYXRpb25FcnJvcigpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBcIkZMT1dfQ0FOQ0VMTEVEXCI7XG59XG5GbG93Q2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuZnVuY3Rpb24gaXNGbG93Q2FuY2VsbGF0aW9uRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBGbG93Q2FuY2VsbGF0aW9uRXJyb3I7XG59XG5mdW5jdGlvbiBmbG93KGdlbmVyYXRvcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKVxuICAgICAgICBmYWlsKCEhcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiYgXCJGbG93IGV4cGVjdHMgMSBhcmd1bWVudCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgZGVjb3JhdG9yXCIpO1xuICAgIHZhciBuYW1lID0gZ2VuZXJhdG9yLm5hbWUgfHwgXCI8dW5uYW1lZCBmbG93PlwiO1xuICAgIC8vIEltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS90ai9jby9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdHggPSB0aGlzO1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgdmFyIHJ1bklkID0gKytnZW5lcmF0b3JJZDtcbiAgICAgICAgdmFyIGdlbiA9IGFjdGlvbihuYW1lICsgXCIgLSBydW5pZDogXCIgKyBydW5JZCArIFwiIC0gaW5pdFwiLCBnZW5lcmF0b3IpLmFwcGx5KGN0eCwgYXJncyk7XG4gICAgICAgIHZhciByZWplY3RvcjtcbiAgICAgICAgdmFyIHBlbmRpbmdQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdGVwSWQgPSAwO1xuICAgICAgICAgICAgcmVqZWN0b3IgPSByZWplY3Q7XG4gICAgICAgICAgICBmdW5jdGlvbiBvbkZ1bGZpbGxlZChyZXMpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgcmV0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IGFjdGlvbihuYW1lICsgXCIgLSBydW5pZDogXCIgKyBydW5JZCArIFwiIC0geWllbGQgXCIgKyBzdGVwSWQrKywgZ2VuLm5leHQpLmNhbGwoZ2VuLCByZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KHJldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBvblJlamVjdGVkKGVycikge1xuICAgICAgICAgICAgICAgIHBlbmRpbmdQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciByZXQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gYWN0aW9uKG5hbWUgKyBcIiAtIHJ1bmlkOiBcIiArIHJ1bklkICsgXCIgLSB5aWVsZCBcIiArIHN0ZXBJZCsrLCBnZW4udGhyb3cpLmNhbGwoZ2VuLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KHJldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBuZXh0KHJldCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXQgJiYgdHlwZW9mIHJldC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW4gYXN5bmMgaXRlcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgcmV0LnRoZW4obmV4dCwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmV0LmRvbmUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJldC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUocmV0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVuZGluZ1Byb21pc2UudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkZ1bGZpbGxlZCh1bmRlZmluZWQpOyAvLyBraWNrIG9mZiB0aGUgcHJvY2Vzc1xuICAgICAgICB9KTtcbiAgICAgICAgcHJvbWlzZS5jYW5jZWwgPSBhY3Rpb24obmFtZSArIFwiIC0gcnVuaWQ6IFwiICsgcnVuSWQgKyBcIiAtIGNhbmNlbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUHJvbWlzZSlcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsUHJvbWlzZShwZW5kaW5nUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgLy8gRmluYWxseSBibG9jayBjYW4gcmV0dXJuIChvciB5aWVsZCkgc3R1ZmYuLlxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBnZW4ucmV0dXJuKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgLy8gZWF0IGFueXRoaW5nIHRoYXQgcHJvbWlzZSB3b3VsZCBkbywgaXQncyBjYW5jZWxsZWQhXG4gICAgICAgICAgICAgICAgdmFyIHlpZWxkZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHJlcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgeWllbGRlZFByb21pc2UudGhlbihub29wLCBub29wKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxQcm9taXNlKHlpZWxkZWRQcm9taXNlKTsgLy8gbWF5YmUgaXQgY2FuIGJlIGNhbmNlbGxlZCA6KVxuICAgICAgICAgICAgICAgIC8vIHJlamVjdCBvdXIgb3JpZ2luYWwgcHJvbWlzZVxuICAgICAgICAgICAgICAgIHJlamVjdG9yKG5ldyBGbG93Q2FuY2VsbGF0aW9uRXJyb3IoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdG9yKGUpOyAvLyB0aGVyZSBjb3VsZCBiZSBhIHRocm93aW5nIGZpbmFsbHkgYmxvY2tcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG59XG5mdW5jdGlvbiBjYW5jZWxQcm9taXNlKHByb21pc2UpIHtcbiAgICBpZiAodHlwZW9mIHByb21pc2UuY2FuY2VsID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG59XG5cbmZ1bmN0aW9uIGludGVyY2VwdFJlYWRzKHRoaW5nLCBwcm9wT3JIYW5kbGVyLCBoYW5kbGVyKSB7XG4gICAgdmFyIHRhcmdldDtcbiAgICBpZiAoaXNPYnNlcnZhYmxlTWFwKHRoaW5nKSB8fCBpc09ic2VydmFibGVBcnJheSh0aGluZykgfHwgaXNPYnNlcnZhYmxlVmFsdWUodGhpbmcpKSB7XG4gICAgICAgIHRhcmdldCA9IGdldEFkbWluaXN0cmF0aW9uKHRoaW5nKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KHRoaW5nKSkge1xuICAgICAgICBpZiAodHlwZW9mIHByb3BPckhhbmRsZXIgIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICBcIkludGVyY2VwdFJlYWRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhIHNwZWNpZmljIHByb3BlcnR5LCBub3Qgd2l0aCBhbiBvYmplY3QgaW4gZ2VuZXJhbFwiKTtcbiAgICAgICAgdGFyZ2V0ID0gZ2V0QWRtaW5pc3RyYXRpb24odGhpbmcsIHByb3BPckhhbmRsZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBcIkV4cGVjdGVkIG9ic2VydmFibGUgbWFwLCBvYmplY3Qgb3IgYXJyYXkgYXMgZmlyc3QgYXJyYXlcIik7XG4gICAgfVxuICAgIGlmICh0YXJnZXQuZGVoYW5jZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFwiQW4gaW50ZXJjZXB0IHJlYWRlciB3YXMgYWxyZWFkeSBlc3RhYmxpc2hlZFwiKTtcbiAgICB0YXJnZXQuZGVoYW5jZXIgPSB0eXBlb2YgcHJvcE9ySGFuZGxlciA9PT0gXCJmdW5jdGlvblwiID8gcHJvcE9ySGFuZGxlciA6IGhhbmRsZXI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGFyZ2V0LmRlaGFuY2VyID0gdW5kZWZpbmVkO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGludGVyY2VwdCh0aGluZywgcHJvcE9ySGFuZGxlciwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICByZXR1cm4gaW50ZXJjZXB0UHJvcGVydHkodGhpbmcsIHByb3BPckhhbmRsZXIsIGhhbmRsZXIpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGludGVyY2VwdEludGVyY2VwdGFibGUodGhpbmcsIHByb3BPckhhbmRsZXIpO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0SW50ZXJjZXB0YWJsZSh0aGluZywgaGFuZGxlcikge1xuICAgIHJldHVybiBnZXRBZG1pbmlzdHJhdGlvbih0aGluZykuaW50ZXJjZXB0KGhhbmRsZXIpO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0UHJvcGVydHkodGhpbmcsIHByb3BlcnR5LCBoYW5kbGVyKSB7XG4gICAgcmV0dXJuIGdldEFkbWluaXN0cmF0aW9uKHRoaW5nLCBwcm9wZXJ0eSkuaW50ZXJjZXB0KGhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBfaXNDb21wdXRlZCh2YWx1ZSwgcHJvcGVydHkpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChpc09ic2VydmFibGVPYmplY3QodmFsdWUpID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF2YWx1ZVskbW9ieF0udmFsdWVzLmhhcyhwcm9wZXJ0eSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBhdG9tID0gZ2V0QXRvbSh2YWx1ZSwgcHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gaXNDb21wdXRlZFZhbHVlKGF0b20pO1xuICAgIH1cbiAgICByZXR1cm4gaXNDb21wdXRlZFZhbHVlKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQ29tcHV0ZWQodmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpXG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCJpc0NvbXB1dGVkIGV4cGVjdHMgb25seSAxIGFyZ3VtZW50LiBVc2UgaXNPYnNlcnZhYmxlUHJvcCB0byBpbnNwZWN0IHRoZSBvYnNlcnZhYmlsaXR5IG9mIGEgcHJvcGVydHlcIik7XG4gICAgcmV0dXJuIF9pc0NvbXB1dGVkKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQ29tcHV0ZWRQcm9wKHZhbHVlLCBwcm9wTmFtZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcE5hbWUgIT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCJpc0NvbXB1dGVkIGV4cGVjdGVkIGEgcHJvcGVydHkgbmFtZSBhcyBzZWNvbmQgYXJndW1lbnRcIik7XG4gICAgcmV0dXJuIF9pc0NvbXB1dGVkKHZhbHVlLCBwcm9wTmFtZSk7XG59XG5cbmZ1bmN0aW9uIF9pc09ic2VydmFibGUodmFsdWUsIHByb3BlcnR5KSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICAoaXNPYnNlcnZhYmxlTWFwKHZhbHVlKSB8fCBpc09ic2VydmFibGVBcnJheSh2YWx1ZSkpKVxuICAgICAgICAgICAgcmV0dXJuIGZhaWwoXCJpc09ic2VydmFibGUob2JqZWN0LCBwcm9wZXJ0eU5hbWUpIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGFycmF5cyBhbmQgbWFwcy4gVXNlIG1hcC5oYXMgb3IgYXJyYXkubGVuZ3RoIGluc3RlYWQuXCIpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWyRtb2J4XS52YWx1ZXMuaGFzKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEZvciBmaXJzdCBjaGVjaywgc2VlICM3MDFcbiAgICByZXR1cm4gKGlzT2JzZXJ2YWJsZU9iamVjdCh2YWx1ZSkgfHxcbiAgICAgICAgISF2YWx1ZVskbW9ieF0gfHxcbiAgICAgICAgaXNBdG9tKHZhbHVlKSB8fFxuICAgICAgICBpc1JlYWN0aW9uKHZhbHVlKSB8fFxuICAgICAgICBpc0NvbXB1dGVkVmFsdWUodmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2YWJsZSh2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKVxuICAgICAgICBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCJpc09ic2VydmFibGUgZXhwZWN0cyBvbmx5IDEgYXJndW1lbnQuIFVzZSBpc09ic2VydmFibGVQcm9wIHRvIGluc3BlY3QgdGhlIG9ic2VydmFiaWxpdHkgb2YgYSBwcm9wZXJ0eVwiKTtcbiAgICByZXR1cm4gX2lzT2JzZXJ2YWJsZSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBpc09ic2VydmFibGVQcm9wKHZhbHVlLCBwcm9wTmFtZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcE5hbWUgIT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBcImV4cGVjdGVkIGEgcHJvcGVydHkgbmFtZSBhcyBzZWNvbmQgYXJndW1lbnRcIik7XG4gICAgcmV0dXJuIF9pc09ic2VydmFibGUodmFsdWUsIHByb3BOYW1lKTtcbn1cblxuZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9ialskbW9ieF0uZ2V0S2V5cygpO1xuICAgIH1cbiAgICBpZiAoaXNPYnNlcnZhYmxlTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20ob2JqLmtleXMoKSk7XG4gICAgfVxuICAgIGlmIChpc09ic2VydmFibGVTZXQob2JqKSkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShvYmoua2V5cygpKTtcbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZUFycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iai5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7IHJldHVybiBpbmRleDsgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBcIidrZXlzKCknIGNhbiBvbmx5IGJlIHVzZWQgb24gb2JzZXJ2YWJsZSBvYmplY3RzLCBhcnJheXMsIHNldHMgYW5kIG1hcHNcIik7XG59XG5mdW5jdGlvbiB2YWx1ZXMob2JqKSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBrZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG9ialtrZXldOyB9KTtcbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU1hcChvYmopKSB7XG4gICAgICAgIHJldHVybiBrZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG9iai5nZXQoa2V5KTsgfSk7XG4gICAgfVxuICAgIGlmIChpc09ic2VydmFibGVTZXQob2JqKSkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShvYmoudmFsdWVzKCkpO1xuICAgIH1cbiAgICBpZiAoaXNPYnNlcnZhYmxlQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBcIid2YWx1ZXMoKScgY2FuIG9ubHkgYmUgdXNlZCBvbiBvYnNlcnZhYmxlIG9iamVjdHMsIGFycmF5cywgc2V0cyBhbmQgbWFwc1wiKTtcbn1cbmZ1bmN0aW9uIGVudHJpZXMob2JqKSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBrZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIFtrZXksIG9ialtrZXldXTsgfSk7XG4gICAgfVxuICAgIGlmIChpc09ic2VydmFibGVNYXAob2JqKSkge1xuICAgICAgICByZXR1cm4ga2V5cyhvYmopLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBba2V5LCBvYmouZ2V0KGtleSldOyB9KTtcbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZVNldChvYmopKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG9iai5lbnRyaWVzKCkpO1xuICAgIH1cbiAgICBpZiAoaXNPYnNlcnZhYmxlQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLm1hcChmdW5jdGlvbiAoa2V5LCBpbmRleCkgeyByZXR1cm4gW2luZGV4LCBrZXldOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgIFwiJ2VudHJpZXMoKScgY2FuIG9ubHkgYmUgdXNlZCBvbiBvYnNlcnZhYmxlIG9iamVjdHMsIGFycmF5cyBhbmQgbWFwc1wiKTtcbn1cbmZ1bmN0aW9uIHNldChvYmosIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAhaXNPYnNlcnZhYmxlU2V0KG9iaikpIHtcbiAgICAgICAgc3RhcnRCYXRjaCgpO1xuICAgICAgICB2YXIgdmFsdWVzXzEgPSBrZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXlfMSBpbiB2YWx1ZXNfMSlcbiAgICAgICAgICAgICAgICBzZXQob2JqLCBrZXlfMSwgdmFsdWVzXzFba2V5XzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGVuZEJhdGNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KG9iaikpIHtcbiAgICAgICAgdmFyIGFkbSA9IG9ialskbW9ieF07XG4gICAgICAgIHZhciBleGlzdGluZ09ic2VydmFibGUgPSBhZG0udmFsdWVzLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICBhZG0ud3JpdGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhZG0uYWRkT2JzZXJ2YWJsZVByb3Aoa2V5LCB2YWx1ZSwgYWRtLmRlZmF1bHRFbmhhbmNlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlTWFwKG9iaikpIHtcbiAgICAgICAgb2JqLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlU2V0KG9iaikpIHtcbiAgICAgICAgb2JqLmFkZChrZXkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ic2VydmFibGVBcnJheShvYmopKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAga2V5ID0gcGFyc2VJbnQoa2V5LCAxMCk7XG4gICAgICAgIGludmFyaWFudChrZXkgPj0gMCwgXCJOb3QgYSB2YWxpZCBpbmRleDogJ1wiICsga2V5ICsgXCInXCIpO1xuICAgICAgICBzdGFydEJhdGNoKCk7XG4gICAgICAgIGlmIChrZXkgPj0gb2JqLmxlbmd0aClcbiAgICAgICAgICAgIG9iai5sZW5ndGggPSBrZXkgKyAxO1xuICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICBlbmRCYXRjaCgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBcIidzZXQoKScgY2FuIG9ubHkgYmUgdXNlZCBvbiBvYnNlcnZhYmxlIG9iamVjdHMsIGFycmF5cyBhbmQgbWFwc1wiKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZW1vdmUob2JqLCBrZXkpIHtcbiAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KG9iaikpIHtcbiAgICAgICAgb2JqWyRtb2J4XS5yZW1vdmUoa2V5KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlTWFwKG9iaikpIHtcbiAgICAgICAgb2JqLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ic2VydmFibGVTZXQob2JqKSkge1xuICAgICAgICBvYmouZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZUFycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBrZXkgPSBwYXJzZUludChrZXksIDEwKTtcbiAgICAgICAgaW52YXJpYW50KGtleSA+PSAwLCBcIk5vdCBhIHZhbGlkIGluZGV4OiAnXCIgKyBrZXkgKyBcIidcIik7XG4gICAgICAgIG9iai5zcGxpY2Uoa2V5LCAxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCIncmVtb3ZlKCknIGNhbiBvbmx5IGJlIHVzZWQgb24gb2JzZXJ2YWJsZSBvYmplY3RzLCBhcnJheXMgYW5kIG1hcHNcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdChvYmopKSB7XG4gICAgICAgIC8vIHJldHVybiBrZXlzKG9iaikuaW5kZXhPZihrZXkpID49IDBcbiAgICAgICAgdmFyIGFkbSA9IGdldEFkbWluaXN0cmF0aW9uKG9iaik7XG4gICAgICAgIHJldHVybiBhZG0uaGFzKGtleSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZU1hcChvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzKGtleSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZVNldChvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzKGtleSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZUFycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIGtleSA+PSAwICYmIGtleSA8IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgIFwiJ2hhcygpJyBjYW4gb25seSBiZSB1c2VkIG9uIG9ic2VydmFibGUgb2JqZWN0cywgYXJyYXlzIGFuZCBtYXBzXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldChvYmosIGtleSkge1xuICAgIGlmICghaGFzKG9iaiwga2V5KSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ic2VydmFibGVNYXAob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLmdldChrZXkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ic2VydmFibGVBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCInZ2V0KCknIGNhbiBvbmx5IGJlIHVzZWQgb24gb2JzZXJ2YWJsZSBvYmplY3RzLCBhcnJheXMgYW5kIG1hcHNcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBvYnNlcnZlKHRoaW5nLCBwcm9wT3JDYiwgY2JPckZpcmUsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgIGlmICh0eXBlb2YgY2JPckZpcmUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgcmV0dXJuIG9ic2VydmVPYnNlcnZhYmxlUHJvcGVydHkodGhpbmcsIHByb3BPckNiLCBjYk9yRmlyZSwgZmlyZUltbWVkaWF0ZWx5KTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBvYnNlcnZlT2JzZXJ2YWJsZSh0aGluZywgcHJvcE9yQ2IsIGNiT3JGaXJlKTtcbn1cbmZ1bmN0aW9uIG9ic2VydmVPYnNlcnZhYmxlKHRoaW5nLCBsaXN0ZW5lciwgZmlyZUltbWVkaWF0ZWx5KSB7XG4gICAgcmV0dXJuIGdldEFkbWluaXN0cmF0aW9uKHRoaW5nKS5vYnNlcnZlKGxpc3RlbmVyLCBmaXJlSW1tZWRpYXRlbHkpO1xufVxuZnVuY3Rpb24gb2JzZXJ2ZU9ic2VydmFibGVQcm9wZXJ0eSh0aGluZywgcHJvcGVydHksIGxpc3RlbmVyLCBmaXJlSW1tZWRpYXRlbHkpIHtcbiAgICByZXR1cm4gZ2V0QWRtaW5pc3RyYXRpb24odGhpbmcsIHByb3BlcnR5KS5vYnNlcnZlKGxpc3RlbmVyLCBmaXJlSW1tZWRpYXRlbHkpO1xufVxuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgZGV0ZWN0Q3ljbGVzOiB0cnVlLFxuICAgIGV4cG9ydE1hcHNBc09iamVjdHM6IHRydWUsXG4gICAgcmVjdXJzZUV2ZXJ5dGhpbmc6IGZhbHNlXG59O1xuZnVuY3Rpb24gY2FjaGUobWFwLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZGV0ZWN0Q3ljbGVzKVxuICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHRvSlNIZWxwZXIoc291cmNlLCBvcHRpb25zLCBfX2FscmVhZHlTZWVuKSB7XG4gICAgaWYgKCFvcHRpb25zLnJlY3Vyc2VFdmVyeXRoaW5nICYmICFpc09ic2VydmFibGUoc291cmNlKSlcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAvLyBEaXJlY3RseSByZXR1cm4gbnVsbCBpZiBzb3VyY2UgaXMgbnVsbFxuICAgIGlmIChzb3VyY2UgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vIERpcmVjdGx5IHJldHVybiB0aGUgRGF0ZSBvYmplY3QgaXRzZWxmIGlmIGNvbnRhaW5lZCBpbiB0aGUgb2JzZXJ2YWJsZVxuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIGlmIChpc09ic2VydmFibGVWYWx1ZShzb3VyY2UpKVxuICAgICAgICByZXR1cm4gdG9KU0hlbHBlcihzb3VyY2UuZ2V0KCksIG9wdGlvbnMsIF9fYWxyZWFkeVNlZW4pO1xuICAgIC8vIG1ha2Ugc3VyZSB3ZSB0cmFjayB0aGUga2V5cyBvZiB0aGUgb2JqZWN0XG4gICAgaWYgKGlzT2JzZXJ2YWJsZShzb3VyY2UpKVxuICAgICAgICBrZXlzKHNvdXJjZSk7XG4gICAgdmFyIGRldGVjdEN5Y2xlcyA9IG9wdGlvbnMuZGV0ZWN0Q3ljbGVzID09PSB0cnVlO1xuICAgIGlmIChkZXRlY3RDeWNsZXMgJiYgc291cmNlICE9PSBudWxsICYmIF9fYWxyZWFkeVNlZW4uaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIF9fYWxyZWFkeVNlZW4uZ2V0KHNvdXJjZSk7XG4gICAgfVxuICAgIGlmIChpc09ic2VydmFibGVBcnJheShzb3VyY2UpIHx8IEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICB2YXIgcmVzXzEgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIFtdLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIHRvQWRkID0gc291cmNlLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHRvSlNIZWxwZXIodmFsdWUsIG9wdGlvbnMsIF9fYWxyZWFkeVNlZW4pOyB9KTtcbiAgICAgICAgcmVzXzEubGVuZ3RoID0gdG9BZGQubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRvQWRkLmxlbmd0aDsgaSA8IGw7IGkrKylcbiAgICAgICAgICAgIHJlc18xW2ldID0gdG9BZGRbaV07XG4gICAgICAgIHJldHVybiByZXNfMTtcbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZVNldChzb3VyY2UpIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpID09PSBTZXQucHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydE1hcHNBc09iamVjdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB2YXIgcmVzXzIgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIG5ldyBTZXQoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXNfMi5hZGQodG9KU0hlbHBlcih2YWx1ZSwgb3B0aW9ucywgX19hbHJlYWR5U2VlbikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzXzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzXzMgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIFtdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc18zLnB1c2godG9KU0hlbHBlcih2YWx1ZSwgb3B0aW9ucywgX19hbHJlYWR5U2VlbikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzXzM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU1hcChzb3VyY2UpIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpID09PSBNYXAucHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydE1hcHNBc09iamVjdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB2YXIgcmVzXzQgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIG5ldyBNYXAoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIHJlc180LnNldChrZXksIHRvSlNIZWxwZXIodmFsdWUsIG9wdGlvbnMsIF9fYWxyZWFkeVNlZW4pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc180O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc181ID0gY2FjaGUoX19hbHJlYWR5U2Vlbiwgc291cmNlLCB7fSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIHJlc181W2tleV0gPSB0b0pTSGVscGVyKHZhbHVlLCBvcHRpb25zLCBfX2FscmVhZHlTZWVuKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc181O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBzaXR1YXRpb24gdGhhdCBzb3VyY2UgaXMgYW4gT2JzZXJ2YWJsZU9iamVjdCBvciBhIHBsYWluIG9iamVjdFxuICAgIHZhciByZXMgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIHt9LCBvcHRpb25zKTtcbiAgICBnZXRQbGFpbk9iamVjdEtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmVzW2tleV0gPSB0b0pTSGVscGVyKHNvdXJjZVtrZXldLCBvcHRpb25zLCBfX2FscmVhZHlTZWVuKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gdG9KUyhzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgb3B0aW9ucyA9IHsgZGV0ZWN0Q3ljbGVzOiBvcHRpb25zIH07XG4gICAgaWYgKCFvcHRpb25zKVxuICAgICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgb3B0aW9ucy5kZXRlY3RDeWNsZXMgPVxuICAgICAgICBvcHRpb25zLmRldGVjdEN5Y2xlcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG9wdGlvbnMucmVjdXJzZUV2ZXJ5dGhpbmcgPT09IHRydWVcbiAgICAgICAgICAgIDogb3B0aW9ucy5kZXRlY3RDeWNsZXMgPT09IHRydWU7XG4gICAgdmFyIF9fYWxyZWFkeVNlZW47XG4gICAgaWYgKG9wdGlvbnMuZGV0ZWN0Q3ljbGVzKVxuICAgICAgICBfX2FscmVhZHlTZWVuID0gbmV3IE1hcCgpO1xuICAgIHJldHVybiB0b0pTSGVscGVyKHNvdXJjZSwgb3B0aW9ucywgX19hbHJlYWR5U2Vlbik7XG59XG5cbmZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgZW50ZXJCcmVha1BvaW50ID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IFwiYm9vbGVhblwiKVxuICAgICAgICBlbnRlckJyZWFrUG9pbnQgPSBhcmdzLnBvcCgpO1xuICAgIHZhciBkZXJpdmF0aW9uID0gZ2V0QXRvbUZyb21BcmdzKGFyZ3MpO1xuICAgIGlmICghZGVyaXZhdGlvbikge1xuICAgICAgICByZXR1cm4gZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgIFwiJ3RyYWNlKGJyZWFrPyknIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgdHJhY2tlZCBjb21wdXRlZCB2YWx1ZSBvciBhIFJlYWN0aW9uLiBDb25zaWRlciBwYXNzaW5nIGluIHRoZSBjb21wdXRlZCB2YWx1ZSBvciByZWFjdGlvbiBleHBsaWNpdGx5XCIpO1xuICAgIH1cbiAgICBpZiAoZGVyaXZhdGlvbi5pc1RyYWNpbmcgPT09IFRyYWNlTW9kZS5OT05FKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW21vYngudHJhY2VdICdcIiArIGRlcml2YXRpb24ubmFtZSArIFwiJyB0cmFjaW5nIGVuYWJsZWRcIik7XG4gICAgfVxuICAgIGRlcml2YXRpb24uaXNUcmFjaW5nID0gZW50ZXJCcmVha1BvaW50ID8gVHJhY2VNb2RlLkJSRUFLIDogVHJhY2VNb2RlLkxPRztcbn1cbmZ1bmN0aW9uIGdldEF0b21Gcm9tQXJncyhhcmdzKSB7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3RhdGUudHJhY2tpbmdEZXJpdmF0aW9uO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gZ2V0QXRvbShhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIGdldEF0b20oYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgfVxufVxuXG4vKipcbiAqIER1cmluZyBhIHRyYW5zYWN0aW9uIG5vIHZpZXdzIGFyZSB1cGRhdGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLlxuICogVGhlIHRyYW5zYWN0aW9uIHdpbGwgYmUgcnVuIHN5bmNocm9ub3VzbHkgbm9uZXRoZWxlc3MuXG4gKlxuICogQHBhcmFtIGFjdGlvbiBhIGZ1bmN0aW9uIHRoYXQgdXBkYXRlcyBzb21lIHJlYWN0aXZlIHN0YXRlXG4gKiBAcmV0dXJucyBhbnkgdmFsdWUgdGhhdCB3YXMgcmV0dXJuZWQgYnkgdGhlICdhY3Rpb24nIHBhcmFtZXRlci5cbiAqL1xuZnVuY3Rpb24gdHJhbnNhY3Rpb24oYWN0aW9uLCB0aGlzQXJnKSB7XG4gICAgaWYgKHRoaXNBcmcgPT09IHZvaWQgMCkgeyB0aGlzQXJnID0gdW5kZWZpbmVkOyB9XG4gICAgc3RhcnRCYXRjaCgpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhY3Rpb24uYXBwbHkodGhpc0FyZyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBlbmRCYXRjaCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gd2hlbihwcmVkaWNhdGUsIGFyZzEsIGFyZzIpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSB8fCAoYXJnMSAmJiB0eXBlb2YgYXJnMSA9PT0gXCJvYmplY3RcIikpXG4gICAgICAgIHJldHVybiB3aGVuUHJvbWlzZShwcmVkaWNhdGUsIGFyZzEpO1xuICAgIHJldHVybiBfd2hlbihwcmVkaWNhdGUsIGFyZzEsIGFyZzIgfHwge30pO1xufVxuZnVuY3Rpb24gX3doZW4ocHJlZGljYXRlLCBlZmZlY3QsIG9wdHMpIHtcbiAgICB2YXIgdGltZW91dEhhbmRsZTtcbiAgICBpZiAodHlwZW9mIG9wdHMudGltZW91dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWRpc3Bvc2VyWyRtb2J4XS5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgZGlzcG9zZXIoKTtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoXCJXSEVOX1RJTUVPVVRcIik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMub25FcnJvcilcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5vbkVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBvcHRzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBvcHRzLm5hbWUgPSBvcHRzLm5hbWUgfHwgXCJXaGVuQFwiICsgZ2V0TmV4dElkKCk7XG4gICAgdmFyIGVmZmVjdEFjdGlvbiA9IGNyZWF0ZUFjdGlvbihvcHRzLm5hbWUgKyBcIi1lZmZlY3RcIiwgZWZmZWN0KTtcbiAgICB2YXIgZGlzcG9zZXIgPSBhdXRvcnVuKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoKSkge1xuICAgICAgICAgICAgci5kaXNwb3NlKCk7XG4gICAgICAgICAgICBpZiAodGltZW91dEhhbmRsZSlcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgICBlZmZlY3RBY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH0sIG9wdHMpO1xuICAgIHJldHVybiBkaXNwb3Nlcjtcbn1cbmZ1bmN0aW9uIHdoZW5Qcm9taXNlKHByZWRpY2F0ZSwgb3B0cykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgb3B0cyAmJiBvcHRzLm9uRXJyb3IpXG4gICAgICAgIHJldHVybiBmYWlsKFwidGhlIG9wdGlvbnMgJ29uRXJyb3InIGFuZCAncHJvbWlzZScgY2Fubm90IGJlIGNvbWJpbmVkXCIpO1xuICAgIHZhciBjYW5jZWw7XG4gICAgdmFyIHJlcyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGRpc3Bvc2VyID0gX3doZW4ocHJlZGljYXRlLCByZXNvbHZlLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0cyksIHsgb25FcnJvcjogcmVqZWN0IH0pKTtcbiAgICAgICAgY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGlzcG9zZXIoKTtcbiAgICAgICAgICAgIHJlamVjdChcIldIRU5fQ0FOQ0VMTEVEXCIpO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJlcy5jYW5jZWwgPSBjYW5jZWw7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0QWRtKHRhcmdldCkge1xuICAgIHJldHVybiB0YXJnZXRbJG1vYnhdO1xufVxuZnVuY3Rpb24gaXNQcm9wZXJ0eUtleSh2YWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWwgPT09IFwic3ltYm9sXCI7XG59XG4vLyBPcHRpbWl6YXRpb246IHdlIGRvbid0IG5lZWQgdGhlIGludGVybWVkaWF0ZSBvYmplY3RzIGFuZCBjb3VsZCBoYXZlIGEgY29tcGxldGVseSBjdXN0b20gYWRtaW5pc3RyYXRpb24gZm9yIER5bmFtaWNPYmplY3RzLFxuLy8gYW5kIHNraXAgZWl0aGVyIHRoZSBpbnRlcm5hbCB2YWx1ZXMgbWFwLCBvciB0aGUgYmFzZSBvYmplY3Qgd2l0aCBpdHMgcHJvcGVydHkgZGVzY3JpcHRvcnMhXG52YXIgb2JqZWN0UHJveHlUcmFwcyA9IHtcbiAgICBoYXM6IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICRtb2J4IHx8IG5hbWUgPT09IFwiY29uc3RydWN0b3JcIiB8fCBuYW1lID09PSBtb2J4RGlkUnVuTGF6eUluaXRpYWxpemVyc1N5bWJvbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB2YXIgYWRtID0gZ2V0QWRtKHRhcmdldCk7XG4gICAgICAgIC8vIE1XRTogc2hvdWxkIGBpbmAgb3BlcmF0b3IgYmUgcmVhY3RpdmU/IElmIG5vdCwgYmVsb3cgY29kZSBwYXRoIHdpbGwgYmUgZmFzdGVyIC8gbW9yZSBtZW1vcnkgZWZmaWNpZW50XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIHBlcmZvcm1hbmNlIHN0YXRzIVxuICAgICAgICAvLyBpZiAoYWRtLnZhbHVlcy5nZXQobmFtZSBhcyBzdHJpbmcpKSByZXR1cm4gdHJ1ZVxuICAgICAgICBpZiAoaXNQcm9wZXJ0eUtleShuYW1lKSlcbiAgICAgICAgICAgIHJldHVybiBhZG0uaGFzKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmFtZSBpbiB0YXJnZXQ7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICRtb2J4IHx8IG5hbWUgPT09IFwiY29uc3RydWN0b3JcIiB8fCBuYW1lID09PSBtb2J4RGlkUnVuTGF6eUluaXRpYWxpemVyc1N5bWJvbClcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRbbmFtZV07XG4gICAgICAgIHZhciBhZG0gPSBnZXRBZG0odGFyZ2V0KTtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBhZG0udmFsdWVzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKG9ic2VydmFibGUgaW5zdGFuY2VvZiBBdG9tKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JzZXJ2YWJsZS5nZXQoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgZml4ZXMgIzE3OTYsIGJlY2F1c2UgZGVsZXRpbmcgYSBwcm9wIHRoYXQgaGFzIGFuXG4gICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIHZhbHVlIHdvbid0IHJldHJpZ2dlciBhIG9ic2VydmVyIChubyB2aXNpYmxlIGVmZmVjdCksXG4gICAgICAgICAgICAgICAgLy8gdGhlIGF1dG9ydW4gd291bGRuJ3Qgc3Vic2NyaWJlIHRvIGZ1dHVyZSBrZXkgY2hhbmdlcyAoc2VlIGFsc28gbmV4dCBjb21tZW50KVxuICAgICAgICAgICAgICAgIGFkbS5oYXMobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzdGFydCBsaXN0ZW5pbmcgdG8gZnV0dXJlIGtleXNcbiAgICAgICAgLy8gbm90ZSB0aGF0IHdlIG9ubHkgZG8gdGhpcyBoZXJlIGZvciBvcHRpbWl6YXRpb25cbiAgICAgICAgaWYgKGlzUHJvcGVydHlLZXkobmFtZSkpXG4gICAgICAgICAgICBhZG0uaGFzKG5hbWUpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0W25hbWVdO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUHJvcGVydHlLZXkobmFtZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHNldCh0YXJnZXQsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwgbmFtZSkge1xuICAgICAgICBpZiAoIWlzUHJvcGVydHlLZXkobmFtZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBhZG0gPSBnZXRBZG0odGFyZ2V0KTtcbiAgICAgICAgYWRtLnJlbW92ZShuYW1lKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBvd25LZXlzOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIHZhciBhZG0gPSBnZXRBZG0odGFyZ2V0KTtcbiAgICAgICAgYWRtLmtleXNBdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0KTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGZhaWwoXCJEeW5hbWljIG9ic2VydmFibGUgb2JqZWN0cyBjYW5ub3QgYmUgZnJvemVuXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUR5bmFtaWNPYnNlcnZhYmxlT2JqZWN0KGJhc2UpIHtcbiAgICB2YXIgcHJveHkgPSBuZXcgUHJveHkoYmFzZSwgb2JqZWN0UHJveHlUcmFwcyk7XG4gICAgYmFzZVskbW9ieF0ucHJveHkgPSBwcm94eTtcbiAgICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIGhhc0ludGVyY2VwdG9ycyhpbnRlcmNlcHRhYmxlKSB7XG4gICAgcmV0dXJuIGludGVyY2VwdGFibGUuaW50ZXJjZXB0b3JzICE9PSB1bmRlZmluZWQgJiYgaW50ZXJjZXB0YWJsZS5pbnRlcmNlcHRvcnMubGVuZ3RoID4gMDtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVySW50ZXJjZXB0b3IoaW50ZXJjZXB0YWJsZSwgaGFuZGxlcikge1xuICAgIHZhciBpbnRlcmNlcHRvcnMgPSBpbnRlcmNlcHRhYmxlLmludGVyY2VwdG9ycyB8fCAoaW50ZXJjZXB0YWJsZS5pbnRlcmNlcHRvcnMgPSBbXSk7XG4gICAgaW50ZXJjZXB0b3JzLnB1c2goaGFuZGxlcik7XG4gICAgcmV0dXJuIG9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaWR4ID0gaW50ZXJjZXB0b3JzLmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgIGlmIChpZHggIT09IC0xKVxuICAgICAgICAgICAgaW50ZXJjZXB0b3JzLnNwbGljZShpZHgsIDEpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0Q2hhbmdlKGludGVyY2VwdGFibGUsIGNoYW5nZSkge1xuICAgIHZhciBwcmV2VSA9IHVudHJhY2tlZFN0YXJ0KCk7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSW50ZXJjZXB0b3IgY2FuIG1vZGlmeSB0aGUgYXJyYXksIGNvcHkgaXQgdG8gYXZvaWQgY29uY3VycmVudCBtb2RpZmljYXRpb24sIHNlZSAjMTk1MFxuICAgICAgICB2YXIgaW50ZXJjZXB0b3JzID0gX19zcHJlYWQoKGludGVyY2VwdGFibGUuaW50ZXJjZXB0b3JzIHx8IFtdKSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaW50ZXJjZXB0b3JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY2hhbmdlID0gaW50ZXJjZXB0b3JzW2ldKGNoYW5nZSk7XG4gICAgICAgICAgICBpbnZhcmlhbnQoIWNoYW5nZSB8fCBjaGFuZ2UudHlwZSwgXCJJbnRlcmNlcHQgaGFuZGxlcnMgc2hvdWxkIHJldHVybiBub3RoaW5nIG9yIGEgY2hhbmdlIG9iamVjdFwiKTtcbiAgICAgICAgICAgIGlmICghY2hhbmdlKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB1bnRyYWNrZWRFbmQocHJldlUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaGFzTGlzdGVuZXJzKGxpc3RlbmFibGUpIHtcbiAgICByZXR1cm4gbGlzdGVuYWJsZS5jaGFuZ2VMaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5hYmxlLmNoYW5nZUxpc3RlbmVycy5sZW5ndGggPiAwO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJMaXN0ZW5lcihsaXN0ZW5hYmxlLCBoYW5kbGVyKSB7XG4gICAgdmFyIGxpc3RlbmVycyA9IGxpc3RlbmFibGUuY2hhbmdlTGlzdGVuZXJzIHx8IChsaXN0ZW5hYmxlLmNoYW5nZUxpc3RlbmVycyA9IFtdKTtcbiAgICBsaXN0ZW5lcnMucHVzaChoYW5kbGVyKTtcbiAgICByZXR1cm4gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihoYW5kbGVyKTtcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpXG4gICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBub3RpZnlMaXN0ZW5lcnMobGlzdGVuYWJsZSwgY2hhbmdlKSB7XG4gICAgdmFyIHByZXZVID0gdW50cmFja2VkU3RhcnQoKTtcbiAgICB2YXIgbGlzdGVuZXJzID0gbGlzdGVuYWJsZS5jaGFuZ2VMaXN0ZW5lcnM7XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIHJldHVybjtcbiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbGlzdGVuZXJzW2ldKGNoYW5nZSk7XG4gICAgfVxuICAgIHVudHJhY2tlZEVuZChwcmV2VSk7XG59XG5cbnZhciBNQVhfU1BMSUNFX1NJWkUgPSAxMDAwMDsgLy8gU2VlIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL21vYnhqcy9tb2J4L2lzc3Vlcy84NTlcbnZhciBhcnJheVRyYXBzID0ge1xuICAgIGdldDogZnVuY3Rpb24gKHRhcmdldCwgbmFtZSkge1xuICAgICAgICBpZiAobmFtZSA9PT0gJG1vYngpXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0WyRtb2J4XTtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwibGVuZ3RoXCIpXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0WyRtb2J4XS5nZXRBcnJheUxlbmd0aCgpO1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheUV4dGVuc2lvbnMuZ2V0LmNhbGwodGFyZ2V0LCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgIWlzTmFOKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlFeHRlbnNpb25zLmdldC5jYWxsKHRhcmdldCwgcGFyc2VJbnQobmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnJheUV4dGVuc2lvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheUV4dGVuc2lvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFtuYW1lXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwibGVuZ3RoXCIpIHtcbiAgICAgICAgICAgIHRhcmdldFskbW9ieF0uc2V0QXJyYXlMZW5ndGgodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgYXJyYXlFeHRlbnNpb25zLnNldC5jYWxsKHRhcmdldCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIiB8fCBpc05hTihuYW1lKSkge1xuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBudW1lcmljIHN0cmluZ1xuICAgICAgICAgICAgYXJyYXlFeHRlbnNpb25zLnNldC5jYWxsKHRhcmdldCwgcGFyc2VJbnQobmFtZSksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGZhaWwoXCJPYnNlcnZhYmxlIGFycmF5cyBjYW5ub3QgYmUgZnJvemVuXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNyZWF0ZU9ic2VydmFibGVBcnJheShpbml0aWFsVmFsdWVzLCBlbmhhbmNlciwgbmFtZSwgb3duZWQpIHtcbiAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBcIk9ic2VydmFibGVBcnJheUBcIiArIGdldE5leHRJZCgpOyB9XG4gICAgaWYgKG93bmVkID09PSB2b2lkIDApIHsgb3duZWQgPSBmYWxzZTsgfVxuICAgIHZhciBhZG0gPSBuZXcgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24obmFtZSwgZW5oYW5jZXIsIG93bmVkKTtcbiAgICBhZGRIaWRkZW5GaW5hbFByb3AoYWRtLnZhbHVlcywgJG1vYngsIGFkbSk7XG4gICAgdmFyIHByb3h5ID0gbmV3IFByb3h5KGFkbS52YWx1ZXMsIGFycmF5VHJhcHMpO1xuICAgIGFkbS5wcm94eSA9IHByb3h5O1xuICAgIGlmIChpbml0aWFsVmFsdWVzICYmIGluaXRpYWxWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBwcmV2ID0gYWxsb3dTdGF0ZUNoYW5nZXNTdGFydCh0cnVlKTtcbiAgICAgICAgYWRtLnNwbGljZVdpdGhBcnJheSgwLCAwLCBpbml0aWFsVmFsdWVzKTtcbiAgICAgICAgYWxsb3dTdGF0ZUNoYW5nZXNFbmQocHJldik7XG4gICAgfVxuICAgIHJldHVybiBwcm94eTtcbn1cbnZhciBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbihuYW1lLCBlbmhhbmNlciwgb3duZWQpIHtcbiAgICAgICAgdGhpcy5vd25lZCA9IG93bmVkO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLnByb3h5ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhc3RLbm93bkxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuYXRvbSA9IG5ldyBBdG9tKG5hbWUgfHwgXCJPYnNlcnZhYmxlQXJyYXlAXCIgKyBnZXROZXh0SWQoKSk7XG4gICAgICAgIHRoaXMuZW5oYW5jZXIgPSBmdW5jdGlvbiAobmV3Viwgb2xkVikgeyByZXR1cm4gZW5oYW5jZXIobmV3Viwgb2xkViwgbmFtZSArIFwiWy4uXVwiKTsgfTtcbiAgICB9XG4gICAgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLmRlaGFuY2VWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5kZWhhbmNlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVoYW5jZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuZGVoYW5jZVZhbHVlcyA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVoYW5jZXIgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFwKHRoaXMuZGVoYW5jZXIpO1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLmludGVyY2VwdCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiByZWdpc3RlckludGVyY2VwdG9yKHRoaXMsIGhhbmRsZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAobGlzdGVuZXIsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICBpZiAoZmlyZUltbWVkaWF0ZWx5ID09PSB2b2lkIDApIHsgZmlyZUltbWVkaWF0ZWx5ID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwbGljZVwiLFxuICAgICAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgICAgIGFkZGVkOiB0aGlzLnZhbHVlcy5zbGljZSgpLFxuICAgICAgICAgICAgICAgIGFkZGVkQ291bnQ6IHRoaXMudmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgICAgICByZW1vdmVkQ291bnQ6IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdpc3Rlckxpc3RlbmVyKHRoaXMsIGxpc3RlbmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5nZXRBcnJheUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5hdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuc2V0QXJyYXlMZW5ndGggPSBmdW5jdGlvbiAobmV3TGVuZ3RoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3TGVuZ3RoICE9PSBcIm51bWJlclwiIHx8IG5ld0xlbmd0aCA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbbW9ieC5hcnJheV0gT3V0IG9mIHJhbmdlOiBcIiArIG5ld0xlbmd0aCk7XG4gICAgICAgIHZhciBjdXJyZW50TGVuZ3RoID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xuICAgICAgICBpZiAobmV3TGVuZ3RoID09PSBjdXJyZW50TGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBlbHNlIGlmIChuZXdMZW5ndGggPiBjdXJyZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBuZXcgQXJyYXkobmV3TGVuZ3RoIC0gY3VycmVudExlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0xlbmd0aCAtIGN1cnJlbnRMZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBuZXdJdGVtc1tpXSA9IHVuZGVmaW5lZDsgLy8gTm8gQXJyYXkuZmlsbCBldmVyeXdoZXJlLi4uXG4gICAgICAgICAgICB0aGlzLnNwbGljZVdpdGhBcnJheShjdXJyZW50TGVuZ3RoLCAwLCBuZXdJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zcGxpY2VXaXRoQXJyYXkobmV3TGVuZ3RoLCBjdXJyZW50TGVuZ3RoIC0gbmV3TGVuZ3RoKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS51cGRhdGVBcnJheUxlbmd0aCA9IGZ1bmN0aW9uIChvbGRMZW5ndGgsIGRlbHRhKSB7XG4gICAgICAgIGlmIChvbGRMZW5ndGggIT09IHRoaXMubGFzdEtub3duTGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW21vYnhdIE1vZGlmaWNhdGlvbiBleGNlcHRpb246IHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgYW4gb2JzZXJ2YWJsZSBhcnJheSB3YXMgY2hhbmdlZC5cIik7XG4gICAgICAgIHRoaXMubGFzdEtub3duTGVuZ3RoICs9IGRlbHRhO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLnNwbGljZVdpdGhBcnJheSA9IGZ1bmN0aW9uIChpbmRleCwgZGVsZXRlQ291bnQsIG5ld0l0ZW1zKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNoZWNrSWZTdGF0ZU1vZGlmaWNhdGlvbnNBcmVBbGxvd2VkKHRoaXMuYXRvbSk7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICBlbHNlIGlmIChpbmRleCA+IGxlbmd0aClcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgICBlbHNlIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICBpbmRleCA9IE1hdGgubWF4KDAsIGxlbmd0aCArIGluZGV4KTtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IGxlbmd0aCAtIGluZGV4O1xuICAgICAgICBlbHNlIGlmIChkZWxldGVDb3VudCA9PT0gdW5kZWZpbmVkIHx8IGRlbGV0ZUNvdW50ID09PSBudWxsKVxuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAwO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRlbGV0ZUNvdW50LCBsZW5ndGggLSBpbmRleCkpO1xuICAgICAgICBpZiAobmV3SXRlbXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG5ld0l0ZW1zID0gRU1QVFlfQVJSQVk7XG4gICAgICAgIGlmIChoYXNJbnRlcmNlcHRvcnModGhpcykpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBpbnRlcmNlcHRDaGFuZ2UodGhpcywge1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwbGljZVwiLFxuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICByZW1vdmVkQ291bnQ6IGRlbGV0ZUNvdW50LFxuICAgICAgICAgICAgICAgIGFkZGVkOiBuZXdJdGVtc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQVJSQVk7XG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IGNoYW5nZS5yZW1vdmVkQ291bnQ7XG4gICAgICAgICAgICBuZXdJdGVtcyA9IGNoYW5nZS5hZGRlZDtcbiAgICAgICAgfVxuICAgICAgICBuZXdJdGVtcyA9IG5ld0l0ZW1zLmxlbmd0aCA9PT0gMCA/IG5ld0l0ZW1zIDogbmV3SXRlbXMubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBfdGhpcy5lbmhhbmNlcih2LCB1bmRlZmluZWQpOyB9KTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIGxlbmd0aERlbHRhID0gbmV3SXRlbXMubGVuZ3RoIC0gZGVsZXRlQ291bnQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFycmF5TGVuZ3RoKGxlbmd0aCwgbGVuZ3RoRGVsdGEpOyAvLyBjaGVja3MgaWYgaW50ZXJuYWwgYXJyYXkgd2Fzbid0IG1vZGlmaWVkXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuc3BsaWNlSXRlbXNJbnRvVmFsdWVzKGluZGV4LCBkZWxldGVDb3VudCwgbmV3SXRlbXMpO1xuICAgICAgICBpZiAoZGVsZXRlQ291bnQgIT09IDAgfHwgbmV3SXRlbXMubGVuZ3RoICE9PSAwKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlBcnJheVNwbGljZShpbmRleCwgbmV3SXRlbXMsIHJlcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VWYWx1ZXMocmVzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5zcGxpY2VJdGVtc0ludG9WYWx1ZXMgPSBmdW5jdGlvbiAoaW5kZXgsIGRlbGV0ZUNvdW50LCBuZXdJdGVtcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPCBNQVhfU1BMSUNFX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnZhbHVlcykuc3BsaWNlLmFwcGx5KF9hLCBfX3NwcmVhZChbaW5kZXgsIGRlbGV0ZUNvdW50XSwgbmV3SXRlbXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLnZhbHVlcy5zbGljZShpbmRleCwgaW5kZXggKyBkZWxldGVDb3VudCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHRoaXMudmFsdWVzXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICAgICAgICAgIC5jb25jYXQobmV3SXRlbXMsIHRoaXMudmFsdWVzLnNsaWNlKGluZGV4ICsgZGVsZXRlQ291bnQpKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5ub3RpZnlBcnJheUNoaWxkVXBkYXRlID0gZnVuY3Rpb24gKGluZGV4LCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgdmFyIG5vdGlmeVNweSA9ICF0aGlzLm93bmVkICYmIGlzU3B5RW5hYmxlZCgpO1xuICAgICAgICB2YXIgbm90aWZ5ID0gaGFzTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICB2YXIgY2hhbmdlID0gbm90aWZ5IHx8IG5vdGlmeVNweVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnByb3h5LFxuICAgICAgICAgICAgICAgIHR5cGU6IFwidXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZTogb2xkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgdGhpcyBpcyBvbiByaWdodCBoYW5kIHNpZGUgaGVyZSAoYW5kIG5vdCBhYm92ZSksIGlzIHRoaXMgd2F5IHRoZSB1Z2xpZmllciB3aWxsIGRyb3AgaXQsIGJ1dCBpdCB3b24ndFxuICAgICAgICAvLyBjYXVzZSBhbnkgcnVudGltZSBvdmVyaGVhZCBpbiBkZXZlbG9wbWVudCBtb2RlIHdpdGhvdXQgTk9ERV9FTlYgc2V0LCB1bmxlc3Mgc3B5aW5nIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLmF0b20ubmFtZSB9KSk7XG4gICAgICAgIHRoaXMuYXRvbS5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5ub3RpZnlBcnJheVNwbGljZSA9IGZ1bmN0aW9uIChpbmRleCwgYWRkZWQsIHJlbW92ZWQpIHtcbiAgICAgICAgdmFyIG5vdGlmeVNweSA9ICF0aGlzLm93bmVkICYmIGlzU3B5RW5hYmxlZCgpO1xuICAgICAgICB2YXIgbm90aWZ5ID0gaGFzTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICB2YXIgY2hhbmdlID0gbm90aWZ5IHx8IG5vdGlmeVNweVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnByb3h5LFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BsaWNlXCIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQsXG4gICAgICAgICAgICAgICAgYWRkZWQ6IGFkZGVkLFxuICAgICAgICAgICAgICAgIHJlbW92ZWRDb3VudDogcmVtb3ZlZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgYWRkZWRDb3VudDogYWRkZWQubGVuZ3RoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgc3B5UmVwb3J0U3RhcnQoX19hc3NpZ24oX19hc3NpZ24oe30sIGNoYW5nZSksIHsgbmFtZTogdGhpcy5hdG9tLm5hbWUgfSkpO1xuICAgICAgICB0aGlzLmF0b20ucmVwb3J0Q2hhbmdlZCgpO1xuICAgICAgICAvLyBjb25mb3JtOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9vYnNlcnZlXG4gICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbjtcbn0oKSk7XG52YXIgYXJyYXlFeHRlbnNpb25zID0ge1xuICAgIGludGVyY2VwdDogZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbJG1vYnhdLmludGVyY2VwdChoYW5kbGVyKTtcbiAgICB9LFxuICAgIG9ic2VydmU6IGZ1bmN0aW9uIChsaXN0ZW5lciwgZmlyZUltbWVkaWF0ZWx5KSB7XG4gICAgICAgIGlmIChmaXJlSW1tZWRpYXRlbHkgPT09IHZvaWQgMCkgeyBmaXJlSW1tZWRpYXRlbHkgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIHJldHVybiBhZG0ub2JzZXJ2ZShsaXN0ZW5lciwgZmlyZUltbWVkaWF0ZWx5KTtcbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNwbGljZSgwKTtcbiAgICB9LFxuICAgIHJlcGxhY2U6IGZ1bmN0aW9uIChuZXdJdGVtcykge1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIHJldHVybiBhZG0uc3BsaWNlV2l0aEFycmF5KDAsIGFkbS52YWx1ZXMubGVuZ3RoLCBuZXdJdGVtcyk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGlzIGFycmF5IGJhY2sgdG8gYSAoc2hhbGxvdykgamF2YXNjcmlwdCBzdHJ1Y3R1cmUuXG4gICAgICogRm9yIGEgZGVlcCBjbG9uZSB1c2UgbW9ieC50b0pTXG4gICAgICovXG4gICAgdG9KUzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGljZSgpO1xuICAgIH0sXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFVzZWQgYnkgSlNPTi5zdHJpbmdpZnlcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KUygpO1xuICAgIH0sXG4gICAgLypcbiAgICAgKiBmdW5jdGlvbnMgdGhhdCBkbyBhbHRlciB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZSBhcnJheSwgKGJhc2VkIG9uIGxpYi5lczYuZC50cylcbiAgICAgKiBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgYWx0ZXIgdGhlIGlubmVyIHN0cnVjdHVyZSBvZiB0aGUgYXJyYXksIHRoZSBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICAgKiBCZWNhdXNlIHRoZSBoYXZlIHNpZGUgZWZmZWN0cywgdGhleSBzaG91bGQgbm90IGJlIHVzZWQgaW4gY29tcHV0ZWQgZnVuY3Rpb24sXG4gICAgICogYW5kIGZvciB0aGF0IHJlYXNvbiB0aGUgZG8gbm90IGNhbGwgZGVwZW5kZW5jeVN0YXRlLm5vdGlmeU9ic2VydmVkXG4gICAgICovXG4gICAgc3BsaWNlOiBmdW5jdGlvbiAoaW5kZXgsIGRlbGV0ZUNvdW50KSB7XG4gICAgICAgIHZhciBuZXdJdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3SXRlbXNbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFkbSA9IHRoaXNbJG1vYnhdO1xuICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkbS5zcGxpY2VXaXRoQXJyYXkoaW5kZXgpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiBhZG0uc3BsaWNlV2l0aEFycmF5KGluZGV4LCBkZWxldGVDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFkbS5zcGxpY2VXaXRoQXJyYXkoaW5kZXgsIGRlbGV0ZUNvdW50LCBuZXdJdGVtcyk7XG4gICAgfSxcbiAgICBzcGxpY2VXaXRoQXJyYXk6IGZ1bmN0aW9uIChpbmRleCwgZGVsZXRlQ291bnQsIG5ld0l0ZW1zKSB7XG4gICAgICAgIHZhciBhZG0gPSB0aGlzWyRtb2J4XTtcbiAgICAgICAgcmV0dXJuIGFkbS5zcGxpY2VXaXRoQXJyYXkoaW5kZXgsIGRlbGV0ZUNvdW50LCBuZXdJdGVtcyk7XG4gICAgfSxcbiAgICBwdXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaXRlbXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIGFkbS5zcGxpY2VXaXRoQXJyYXkoYWRtLnZhbHVlcy5sZW5ndGgsIDAsIGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIGFkbS52YWx1ZXMubGVuZ3RoO1xuICAgIH0sXG4gICAgcG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNwbGljZShNYXRoLm1heCh0aGlzWyRtb2J4XS52YWx1ZXMubGVuZ3RoIC0gMSwgMCksIDEpWzBdO1xuICAgIH0sXG4gICAgc2hpZnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BsaWNlKDAsIDEpWzBdO1xuICAgIH0sXG4gICAgdW5zaGlmdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGl0ZW1zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFkbSA9IHRoaXNbJG1vYnhdO1xuICAgICAgICBhZG0uc3BsaWNlV2l0aEFycmF5KDAsIDAsIGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIGFkbS52YWx1ZXMubGVuZ3RoO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXZlcnNlIGJ5IGRlZmF1bHQgbXV0YXRlcyBpbiBwbGFjZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByZXN1bHRcbiAgICAgICAgLy8gd2hpY2ggbWFrZXMgaXQgYm90aCBhICdkZXJpdmF0aW9uJyBhbmQgYSAnbXV0YXRpb24nLlxuICAgICAgICAvLyBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIGRlZmF1bHQgYW5kIGp1c3QgbWFrZSBpdCBhbiBkZXJ2aXRhdGlvblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbbW9ieF0gYG9ic2VydmFibGVBcnJheS5yZXZlcnNlKClgIHdpbGwgbm90IHVwZGF0ZSB0aGUgYXJyYXkgaW4gcGxhY2UuIFVzZSBgb2JzZXJ2YWJsZUFycmF5LnNsaWNlKCkucmV2ZXJzZSgpYCB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYW5kIHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBvbiBhIGNvcHksIG9yIGBvYnNlcnZhYmxlQXJyYXkucmVwbGFjZShvYnNlcnZhYmxlQXJyYXkuc2xpY2UoKS5yZXZlcnNlKCkpYCB0byByZXZlcnNlICYgdXBkYXRlIGluIHBsYWNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjbG9uZSA9IHRoaXMuc2xpY2UoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lLnJldmVyc2UuYXBwbHkoY2xvbmUsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiAoY29tcGFyZUZuKSB7XG4gICAgICAgIC8vIHNvcnQgYnkgZGVmYXVsdCBtdXRhdGVzIGluIHBsYWNlIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJlc3VsdFxuICAgICAgICAvLyB3aGljaCBnb2VzIGFnYWluc3QgYWxsIGdvb2QgcHJhY3RpY2VzLiBMZXQncyBub3QgY2hhbmdlIHRoZSBhcnJheSBpbiBwbGFjZSFcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW21vYnhdIGBvYnNlcnZhYmxlQXJyYXkuc29ydCgpYCB3aWxsIG5vdCB1cGRhdGUgdGhlIGFycmF5IGluIHBsYWNlLiBVc2UgYG9ic2VydmFibGVBcnJheS5zbGljZSgpLnNvcnQoKWAgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIGFuZCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gb24gYSBjb3B5LCBvciBgb2JzZXJ2YWJsZUFycmF5LnJlcGxhY2Uob2JzZXJ2YWJsZUFycmF5LnNsaWNlKCkuc29ydCgpKWAgdG8gc29ydCAmIHVwZGF0ZSBpbiBwbGFjZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2xvbmUgPSB0aGlzLnNsaWNlKCk7XG4gICAgICAgIHJldHVybiBjbG9uZS5zb3J0LmFwcGx5KGNsb25lLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGFkbSA9IHRoaXNbJG1vYnhdO1xuICAgICAgICB2YXIgaWR4ID0gYWRtLmRlaGFuY2VWYWx1ZXMoYWRtLnZhbHVlcykuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHZhciBhZG0gPSB0aGlzWyRtb2J4XTtcbiAgICAgICAgaWYgKGFkbSkge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgYWRtLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhZG0uYXRvbS5yZXBvcnRPYnNlcnZlZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhZG0uZGVoYW5jZVZhbHVlKGFkbS52YWx1ZXNbaW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlttb2J4LmFycmF5XSBBdHRlbXB0IHRvIHJlYWQgYW4gYXJyYXkgaW5kZXggKFwiICsgaW5kZXggKyBcIikgdGhhdCBpcyBvdXQgb2YgYm91bmRzIChcIiArIGFkbS52YWx1ZXMubGVuZ3RoICsgXCIpLiBQbGVhc2UgY2hlY2sgbGVuZ3RoIGZpcnN0LiBPdXQgb2YgYm91bmQgaW5kaWNlcyB3aWxsIG5vdCBiZSB0cmFja2VkIGJ5IE1vYlhcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGluZGV4LCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIHZhciB2YWx1ZXMgPSBhZG0udmFsdWVzO1xuICAgICAgICBpZiAoaW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgYXQgaW5kZXggaW4gcmFuZ2VcbiAgICAgICAgICAgIGNoZWNrSWZTdGF0ZU1vZGlmaWNhdGlvbnNBcmVBbGxvd2VkKGFkbS5hdG9tKTtcbiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHZhbHVlc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoaGFzSW50ZXJjZXB0b3JzKGFkbSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hhbmdlID0gaW50ZXJjZXB0Q2hhbmdlKGFkbSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IGFkbS5wcm94eSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3VmFsdWUgPSBhZG0uZW5oYW5jZXIobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgICAgIHZhciBjaGFuZ2VkID0gbmV3VmFsdWUgIT09IG9sZFZhbHVlO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgYWRtLm5vdGlmeUFycmF5Q2hpbGRVcGRhdGUoaW5kZXgsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGFkZCBhIG5ldyBpdGVtXG4gICAgICAgICAgICBhZG0uc3BsaWNlV2l0aEFycmF5KGluZGV4LCAwLCBbbmV3VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG91dCBvZiBib3VuZHNcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlttb2J4LmFycmF5XSBJbmRleCBvdXQgb2YgYm91bmRzLCBcIiArIGluZGV4ICsgXCIgaXMgbGFyZ2VyIHRoYW4gXCIgKyB2YWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5bXG4gICAgXCJjb25jYXRcIixcbiAgICBcImZsYXRcIixcbiAgICBcImluY2x1ZGVzXCIsXG4gICAgXCJpbmRleE9mXCIsXG4gICAgXCJqb2luXCIsXG4gICAgXCJsYXN0SW5kZXhPZlwiLFxuICAgIFwic2xpY2VcIixcbiAgICBcInRvU3RyaW5nXCIsXG4gICAgXCJ0b0xvY2FsZVN0cmluZ1wiXG5dLmZvckVhY2goZnVuY3Rpb24gKGZ1bmNOYW1lKSB7XG4gICAgLy8gRmVhdHVyZSBkZXRlY3Rpb24gKGVnIGZsYXQgbWF5IG5vdCBiZSBhdmFpbGFibGUpXG4gICAgaWYgKHR5cGVvZiBBcnJheS5wcm90b3R5cGVbZnVuY05hbWVdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcnJheUV4dGVuc2lvbnNbZnVuY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIGFkbS5hdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHZhciBkZWhhbmNlZFZhbHVlcyA9IGFkbS5kZWhhbmNlVmFsdWVzKGFkbS52YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZGVoYW5jZWRWYWx1ZXNbZnVuY05hbWVdLmFwcGx5KGRlaGFuY2VkVmFsdWVzLCBhcmd1bWVudHMpO1xuICAgIH07XG59KTtcbltcImV2ZXJ5XCIsIFwiZmlsdGVyXCIsIFwiZmluZFwiLCBcImZpbmRJbmRleFwiLCBcImZsYXRNYXBcIiwgXCJmb3JFYWNoXCIsIFwibWFwXCIsIFwic29tZVwiXS5mb3JFYWNoKGZ1bmN0aW9uIChmdW5jTmFtZSkge1xuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIChlZyBmbGF0TWFwIG1heSBub3QgYmUgYXZhaWxhYmxlKVxuICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlW2Z1bmNOYW1lXSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJyYXlFeHRlbnNpb25zW2Z1bmNOYW1lXSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIGFkbS5hdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHZhciBkZWhhbmNlZFZhbHVlcyA9IGFkbS5kZWhhbmNlVmFsdWVzKGFkbS52YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZGVoYW5jZWRWYWx1ZXNbZnVuY05hbWVdKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgZWxlbWVudCwgaW5kZXgsIF90aGlzKTtcbiAgICAgICAgfSwgdGhpc0FyZyk7XG4gICAgfTtcbn0pO1xuW1wicmVkdWNlXCIsIFwicmVkdWNlUmlnaHRcIl0uZm9yRWFjaChmdW5jdGlvbiAoZnVuY05hbWUpIHtcbiAgICBhcnJheUV4dGVuc2lvbnNbZnVuY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIGFkbS5hdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIC8vICMyNDMyIC0gcmVkdWNlIGJlaGF2aW9yIGRlcGVuZHMgb24gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIGFyZ3VtZW50c1swXSA9IGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCkge1xuICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYWRtLmRlaGFuY2VWYWx1ZShjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBfdGhpcyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhZG0udmFsdWVzW2Z1bmNOYW1lXS5hcHBseShhZG0udmFsdWVzLCBhcmd1bWVudHMpO1xuICAgIH07XG59KTtcbnZhciBpc09ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uXCIsIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uKTtcbmZ1bmN0aW9uIGlzT2JzZXJ2YWJsZUFycmF5KHRoaW5nKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRoaW5nKSAmJiBpc09ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uKHRoaW5nWyRtb2J4XSk7XG59XG5cbnZhciBfYTtcbnZhciBPYnNlcnZhYmxlTWFwTWFya2VyID0ge307XG4vLyBqdXN0IGV4dGVuZCBNYXA/IFNlZSBhbHNvIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL25lc3RoYXJ1cy8xM2I0ZDc0ZjJlZjRhMmY0MzU3ZGJkM2ZjMjNjMWU1NFxuLy8gQnV0OiBodHRwczovL2dpdGh1Yi5jb20vbW9ieGpzL21vYngvaXNzdWVzLzE1NTZcbnZhciBPYnNlcnZhYmxlTWFwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGVNYXAoaW5pdGlhbERhdGEsIGVuaGFuY2VyLCBuYW1lKSB7XG4gICAgICAgIGlmIChlbmhhbmNlciA9PT0gdm9pZCAwKSB7IGVuaGFuY2VyID0gZGVlcEVuaGFuY2VyOyB9XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IFwiT2JzZXJ2YWJsZU1hcEBcIiArIGdldE5leHRJZCgpOyB9XG4gICAgICAgIHRoaXMuZW5oYW5jZXIgPSBlbmhhbmNlcjtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpc1tfYV0gPSBPYnNlcnZhYmxlTWFwTWFya2VyO1xuICAgICAgICB0aGlzLl9rZXlzQXRvbSA9IGNyZWF0ZUF0b20odGhpcy5uYW1lICsgXCIua2V5cygpXCIpO1xuICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk1hcFwiO1xuICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtb2J4Lm1hcCByZXF1aXJlcyBNYXAgcG9seWZpbGwgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuIENoZWNrIGJhYmVsLXBvbHlmaWxsIG9yIGNvcmUtanMvZXM2L21hcC5qc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9oYXNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMubWVyZ2UoaW5pdGlhbERhdGEpO1xuICAgIH1cbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5faGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5oYXMoa2V5KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCFnbG9iYWxTdGF0ZS50cmFja2luZ0Rlcml2YXRpb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzKGtleSk7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX2hhc01hcC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgLy8gdG9kbzogcmVwbGFjZSB3aXRoIGF0b20gKGJyZWFraW5nIGNoYW5nZSlcbiAgICAgICAgICAgIHZhciBuZXdFbnRyeSA9IChlbnRyeSA9IG5ldyBPYnNlcnZhYmxlVmFsdWUodGhpcy5faGFzKGtleSksIHJlZmVyZW5jZUVuaGFuY2VyLCB0aGlzLm5hbWUgKyBcIi5cIiArIHN0cmluZ2lmeUtleShrZXkpICsgXCI/XCIsIGZhbHNlKSk7XG4gICAgICAgICAgICB0aGlzLl9oYXNNYXAuc2V0KGtleSwgbmV3RW50cnkpO1xuICAgICAgICAgICAgb25CZWNvbWVVbm9ic2VydmVkKG5ld0VudHJ5LCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5faGFzTWFwLmRlbGV0ZShrZXkpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkuZ2V0KCk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgaGFzS2V5ID0gdGhpcy5faGFzKGtleSk7XG4gICAgICAgIGlmIChoYXNJbnRlcmNlcHRvcnModGhpcykpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBpbnRlcmNlcHRDaGFuZ2UodGhpcywge1xuICAgICAgICAgICAgICAgIHR5cGU6IGhhc0tleSA/IFwidXBkYXRlXCIgOiBcImFkZFwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgbmFtZToga2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY2hhbmdlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgdmFsdWUgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0tleSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgY2hlY2tJZlN0YXRlTW9kaWZpY2F0aW9uc0FyZUFsbG93ZWQodGhpcy5fa2V5c0F0b20pO1xuICAgICAgICBpZiAoaGFzSW50ZXJjZXB0b3JzKHRoaXMpKSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gaW50ZXJjZXB0Q2hhbmdlKHRoaXMsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9oYXMoa2V5KSkge1xuICAgICAgICAgICAgdmFyIG5vdGlmeVNweSA9IGlzU3B5RW5hYmxlZCgpO1xuICAgICAgICAgICAgdmFyIG5vdGlmeSA9IGhhc0xpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBub3RpZnkgfHwgbm90aWZ5U3B5XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMuX2RhdGEuZ2V0KGtleSkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLm5hbWUsIGtleToga2V5IH0pKTtcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fa2V5c0F0b20ucmVwb3J0Q2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVIYXNNYXBFbnRyeShrZXksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IF90aGlzLl9kYXRhLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIG9ic2VydmFibGUuc2V0TmV3VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5fZGF0YS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgICAgIHNweVJlcG9ydEVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUuX3VwZGF0ZUhhc01hcEVudHJ5ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5faGFzTWFwLmdldChrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgIGVudHJ5LnNldE5ld1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlID0gZnVuY3Rpb24gKGtleSwgbmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSB0aGlzLl9kYXRhLmdldChrZXkpO1xuICAgICAgICBuZXdWYWx1ZSA9IG9ic2VydmFibGUucHJlcGFyZU5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBnbG9iYWxTdGF0ZS5VTkNIQU5HRUQpIHtcbiAgICAgICAgICAgIHZhciBub3RpZnlTcHkgPSBpc1NweUVuYWJsZWQoKTtcbiAgICAgICAgICAgIHZhciBub3RpZnkgPSBoYXNMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gbm90aWZ5IHx8IG5vdGlmeVNweVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvYnNlcnZhYmxlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLm5hbWUsIGtleToga2V5IH0pKTtcbiAgICAgICAgICAgIG9ic2VydmFibGUuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgICAgIHNweVJlcG9ydEVuZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5fYWRkVmFsdWUgPSBmdW5jdGlvbiAoa2V5LCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBjaGVja0lmU3RhdGVNb2RpZmljYXRpb25zQXJlQWxsb3dlZCh0aGlzLl9rZXlzQXRvbSk7XG4gICAgICAgIHRyYW5zYWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGVWYWx1ZShuZXdWYWx1ZSwgX3RoaXMuZW5oYW5jZXIsIF90aGlzLm5hbWUgKyBcIi5cIiArIHN0cmluZ2lmeUtleShrZXkpLCBmYWxzZSk7XG4gICAgICAgICAgICBfdGhpcy5fZGF0YS5zZXQoa2V5LCBvYnNlcnZhYmxlKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gb2JzZXJ2YWJsZS52YWx1ZTsgLy8gdmFsdWUgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWRcbiAgICAgICAgICAgIF90aGlzLl91cGRhdGVIYXNNYXBFbnRyeShrZXksIHRydWUpO1xuICAgICAgICAgICAgX3RoaXMuX2tleXNBdG9tLnJlcG9ydENoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBub3RpZnlTcHkgPSBpc1NweUVuYWJsZWQoKTtcbiAgICAgICAgdmFyIG5vdGlmeSA9IGhhc0xpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgdmFyIGNoYW5nZSA9IG5vdGlmeSB8fCBub3RpZnlTcHlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYWRkXCIsXG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLFxuICAgICAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLm5hbWUsIGtleToga2V5IH0pKTtcbiAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBjaGFuZ2UpO1xuICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgIHNweVJlcG9ydEVuZCgpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAodGhpcy5oYXMoa2V5KSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VWYWx1ZSh0aGlzLl9kYXRhLmdldChrZXkpLmdldCgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVoYW5jZVZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5kZWhhbmNlVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVoYW5jZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVoYW5jZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2tleXNBdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLmtleXMoKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cygpO1xuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhYmxlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2IgPSBrZXlzLm5leHQoKSwgZG9uZSA9IF9iLmRvbmUsIHZhbHVlID0gX2IudmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZTogZG9uZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRvbmUgPyB1bmRlZmluZWQgOiBzZWxmLmdldCh2YWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMoKTtcbiAgICAgICAgcmV0dXJuIG1ha2VJdGVyYWJsZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9iID0ga2V5cy5uZXh0KCksIGRvbmUgPSBfYi5kb25lLCB2YWx1ZSA9IF9iLnZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGRvbmUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkb25lID8gdW5kZWZpbmVkIDogW3ZhbHVlLCBzZWxmLmdldCh2YWx1ZSldXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZVsoX2EgPSAkbW9ieCwgU3ltYm9sLml0ZXJhdG9yKV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIGVfMSwgX2I7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfYyA9IF9fdmFsdWVzKHRoaXMpLCBfZCA9IF9jLm5leHQoKTsgIV9kLmRvbmU7IF9kID0gX2MubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9lID0gX19yZWFkKF9kLnZhbHVlLCAyKSwga2V5ID0gX2VbMF0sIHZhbHVlID0gX2VbMV07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWx1ZSwga2V5LCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKF9kICYmICFfZC5kb25lICYmIChfYiA9IF9jLnJldHVybikpIF9iLmNhbGwoX2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKiogTWVyZ2UgYW5vdGhlciBvYmplY3QgaW50byB0aGlzIG9iamVjdCwgcmV0dXJucyB0aGlzLiAqL1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLm1lcmdlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChpc09ic2VydmFibGVNYXAob3RoZXIpKSB7XG4gICAgICAgICAgICBvdGhlciA9IG90aGVyLnRvSlMoKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2FjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcHJldiA9IGFsbG93U3RhdGVDaGFuZ2VzU3RhcnQodHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KG90aGVyKSlcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGxhaW5PYmplY3RLZXlzKG90aGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXQoa2V5LCBvdGhlcltrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvdGhlcikpXG4gICAgICAgICAgICAgICAgICAgIG90aGVyLmZvckVhY2goZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2MgPSBfX3JlYWQoX2IsIDIpLCBrZXkgPSBfY1swXSwgdmFsdWUgPSBfY1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRVM2TWFwKG90aGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXIuY29uc3RydWN0b3IgIT09IE1hcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoXCJDYW5ub3QgaW5pdGlhbGl6ZSBmcm9tIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZyb20gTWFwOiBcIiArIG90aGVyLmNvbnN0cnVjdG9yLm5hbWUpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgb3RoZXIuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkgeyByZXR1cm4gX3RoaXMuc2V0KGtleSwgdmFsdWUpOyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAob3RoZXIgIT09IG51bGwgJiYgb3RoZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZmFpbChcIkNhbm5vdCBpbml0aWFsaXplIG1hcCBmcm9tIFwiICsgb3RoZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgYWxsb3dTdGF0ZUNoYW5nZXNFbmQocHJldik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0cmFuc2FjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1bnRyYWNrZWQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBlXzIsIF9iO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9jID0gX192YWx1ZXMoX3RoaXMua2V5cygpKSwgX2QgPSBfYy5uZXh0KCk7ICFfZC5kb25lOyBfZCA9IF9jLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IF9kLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZCAmJiAhX2QuZG9uZSAmJiAoX2IgPSBfYy5yZXR1cm4pKSBfYi5jYWxsKF9jKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgLy8gSW1wbGVtZW50YXRpb24gcmVxdWlyZW1lbnRzOlxuICAgICAgICAvLyAtIHJlc3BlY3Qgb3JkZXJpbmcgb2YgcmVwbGFjZW1lbnQgbWFwXG4gICAgICAgIC8vIC0gYWxsb3cgaW50ZXJjZXB0b3JzIHRvIHJ1biBhbmQgcG90ZW50aWFsbHkgcHJldmVudCBpbmRpdmlkdWFsIG9wZXJhdGlvbnNcbiAgICAgICAgLy8gLSBkb24ndCByZWNyZWF0ZSBvYnNlcnZhYmxlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gb3JpZ2luYWwgbWFwIChzbyB3ZSBkb24ndCBkZXN0cm95IGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMpXG4gICAgICAgIC8vIC0gZG9uJ3QgX2tleXNBdG9tLnJlcG9ydENoYW5nZWQgaWYgdGhlIGtleXMgb2YgcmVzdWx0aW5nIG1hcCBhcmUgaW5kZW50aWNhbCAob3JkZXIgbWF0dGVycyEpXG4gICAgICAgIC8vIC0gbm90ZSB0aGF0IHJlc3VsdCBtYXAgbWF5IGRpZmZlciBmcm9tIHJlcGxhY2VtZW50IG1hcCBkdWUgdG8gdGhlIGludGVyY2VwdG9yc1xuICAgICAgICB0cmFuc2FjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8zLCBfYiwgZV80LCBfYztcbiAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gbWFwIHNvIHdlIGNhbiBkbyBxdWljayBrZXkgbG9va3Vwc1xuICAgICAgICAgICAgdmFyIHJlcGxhY2VtZW50TWFwID0gY29udmVydFRvTWFwKHZhbHVlcyk7XG4gICAgICAgICAgICB2YXIgb3JkZXJlZERhdGEgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAvLyBVc2VkIGZvciBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgIHZhciBrZXlzUmVwb3J0Q2hhbmdlZENhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBEZWxldGUga2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHJlcGxhY2VtZW50IG1hcFxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBrZXkgZGVsZXRpb24gaXMgcHJldmVudGVkIGJ5IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgLy8gYWRkIGVudHJ5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlc3VsdCBtYXBcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IF9fdmFsdWVzKF90aGlzLl9kYXRhLmtleXMoKSksIF9lID0gX2QubmV4dCgpOyAhX2UuZG9uZTsgX2UgPSBfZC5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IF9lLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBDb25jdXJyZW50bHkgaXRlcmF0aW5nL2RlbGV0aW5nIGtleXNcbiAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0b3Igc2hvdWxkIGhhbmRsZSB0aGlzIGNvcnJlY3RseVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50TWFwLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZXRlZCA9IF90aGlzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FzIHRoZSBrZXkgcmVtb3ZlZD9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gX2tleXNBdG9tLnJlcG9ydENoYW5nZWQoKSB3YXMgYWxyZWFkeSBjYWxsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzUmVwb3J0Q2hhbmdlZENhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgcHJldmVudGVkIGJ5IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX3RoaXMuX2RhdGEuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJlZERhdGEuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfM18xKSB7IGVfMyA9IHsgZXJyb3I6IGVfM18xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZSAmJiAhX2UuZG9uZSAmJiAoX2IgPSBfZC5yZXR1cm4pKSBfYi5jYWxsKF9kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzMpIHRocm93IGVfMy5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBNZXJnZSBlbnRyaWVzXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2YgPSBfX3ZhbHVlcyhyZXBsYWNlbWVudE1hcC5lbnRyaWVzKCkpLCBfZyA9IF9mLm5leHQoKTsgIV9nLmRvbmU7IF9nID0gX2YubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfaCA9IF9fcmVhZChfZy52YWx1ZSwgMiksIGtleSA9IF9oWzBdLCB2YWx1ZSA9IF9oWzFdO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIHdhbnQgdG8ga25vdyB3aGV0aGVyIGEgbmV3IGtleSBpcyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5RXhpc3RlZCA9IF90aGlzLl9kYXRhLmhhcyhrZXkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgb3IgdXBkYXRlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFkZGl0aW9uIGNvdWxkIGhhdmUgYmVlbiBwcmV2ZW50IGJ5IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZGF0YS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVwZGF0ZSBjb3VsZCBoYXZlIGJlZW4gcHJldmVudGVkIGJ5IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgYWxzbyB3ZSB3YW50IHRvIHByZXNlcnZlIGV4aXN0aW5nIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdXNlIHZhbHVlIGZyb20gX2RhdGEgbWFwIChpbnN0ZWFkIG9mIHJlcGxhY2VtZW50IG1hcClcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZV8xID0gX3RoaXMuX2RhdGEuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmVkRGF0YS5zZXQoa2V5LCB2YWx1ZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhcyBhIG5ldyBrZXkgYWRkZWQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWtleUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBfa2V5c0F0b20ucmVwb3J0Q2hhbmdlZCgpIHdhcyBhbHJlYWR5IGNhbGxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXNSZXBvcnRDaGFuZ2VkQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzRfMSkgeyBlXzQgPSB7IGVycm9yOiBlXzRfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2cgJiYgIV9nLmRvbmUgJiYgKF9jID0gX2YucmV0dXJuKSkgX2MuY2FsbChfZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV80KSB0aHJvdyBlXzQuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBwb3NzaWJsZSBrZXkgb3JkZXIgY2hhbmdlXG4gICAgICAgICAgICBpZiAoIWtleXNSZXBvcnRDaGFuZ2VkQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9kYXRhLnNpemUgIT09IG9yZGVyZWREYXRhLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2l6ZSBkaWZmZXJzLCBrZXlzIGFyZSBkZWZpbml0ZWx5IG1vZGlmaWVkXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzQXRvbS5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcjEgPSBfdGhpcy5fZGF0YS5rZXlzKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVyMiA9IG9yZGVyZWREYXRhLmtleXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQxID0gaXRlcjEubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dDIgPSBpdGVyMi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICghbmV4dDEuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQxLnZhbHVlICE9PSBuZXh0Mi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzQXRvbS5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0MSA9IGl0ZXIxLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQyID0gaXRlcjIubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXNlIGNvcnJlY3RseSBvcmRlcmVkIG1hcFxuICAgICAgICAgICAgX3RoaXMuX2RhdGEgPSBvcmRlcmVkRGF0YTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9ic2VydmFibGVNYXAucHJvdG90eXBlLCBcInNpemVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleXNBdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5zaXplO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGlzIG1hcC5cbiAgICAgKiBOb3RlIHRoYXQgYWxsIHRoZSBrZXlzIGJlaW5nIHN0cmluZ2lmaWVkLlxuICAgICAqIElmIHRoZXJlIGFyZSBkdXBsaWNhdGluZyBrZXlzIGFmdGVyIGNvbnZlcnRpbmcgdGhlbSB0byBzdHJpbmdzLCBiZWhhdmlvdXIgaXMgdW5kZXRlcm1pbmVkLlxuICAgICAqL1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLnRvUE9KTyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfNSwgX2I7XG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIF9jID0gX192YWx1ZXModGhpcyksIF9kID0gX2MubmV4dCgpOyAhX2QuZG9uZTsgX2QgPSBfYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2UgPSBfX3JlYWQoX2QudmFsdWUsIDIpLCBrZXkgPSBfZVswXSwgdmFsdWUgPSBfZVsxXTtcbiAgICAgICAgICAgICAgICAvLyBXZSBsaWUgYWJvdXQgc3ltYm9sIGtleSB0eXBlcyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xODYzXG4gICAgICAgICAgICAgICAgcmVzW3R5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBzdHJpbmdpZnlLZXkoa2V5KV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV81XzEpIHsgZV81ID0geyBlcnJvcjogZV81XzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKF9kICYmICFfZC5kb25lICYmIChfYiA9IF9jLnJldHVybikpIF9iLmNhbGwoX2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzUpIHRocm93IGVfNS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc2hhbGxvdyBub24gb2JzZXJ2YWJsZSBvYmplY3QgY2xvbmUgb2YgdGhpcyBtYXAuXG4gICAgICogTm90ZSB0aGF0IHRoZSB2YWx1ZXMgbWlndGggc3RpbGwgYmUgb2JzZXJ2YWJsZS4gRm9yIGEgZGVlcCBjbG9uZSB1c2UgbW9ieC50b0pTLlxuICAgICAqL1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLnRvSlMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBVc2VkIGJ5IEpTT04uc3RyaW5naWZ5XG4gICAgICAgIHJldHVybiB0aGlzLnRvUE9KTygpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiAodGhpcy5uYW1lICtcbiAgICAgICAgICAgIFwiW3sgXCIgK1xuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmtleXMoKSlcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHN0cmluZ2lmeUtleShrZXkpICsgXCI6IFwiICsgKFwiXCIgKyBfdGhpcy5nZXQoa2V5KSk7IH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICBcIiB9XVwiKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIE9ic2VydmVzIHRoaXMgb2JqZWN0LiBUcmlnZ2VycyBmb3IgdGhlIGV2ZW50cyAnYWRkJywgJ3VwZGF0ZScgYW5kICdkZWxldGUnLlxuICAgICAqIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L29ic2VydmVcbiAgICAgKiBmb3IgY2FsbGJhY2sgZGV0YWlsc1xuICAgICAqL1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAobGlzdGVuZXIsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgIGludmFyaWFudChmaXJlSW1tZWRpYXRlbHkgIT09IHRydWUsIFwiYG9ic2VydmVgIGRvZXNuJ3Qgc3VwcG9ydCBmaXJlSW1tZWRpYXRlbHk9dHJ1ZSBpbiBjb21iaW5hdGlvbiB3aXRoIG1hcHMuXCIpO1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJMaXN0ZW5lcih0aGlzLCBsaXN0ZW5lcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5pbnRlcmNlcHQgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJJbnRlcmNlcHRvcih0aGlzLCBoYW5kbGVyKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlTWFwO1xufSgpKTtcbi8qICd2YXInIGZpeGVzIHNtYWxsLWJ1aWxkIGlzc3VlICovXG52YXIgaXNPYnNlcnZhYmxlTWFwID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVNYXBcIiwgT2JzZXJ2YWJsZU1hcCk7XG5cbnZhciBfYSQxO1xudmFyIE9ic2VydmFibGVTZXRNYXJrZXIgPSB7fTtcbnZhciBPYnNlcnZhYmxlU2V0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGVTZXQoaW5pdGlhbERhdGEsIGVuaGFuY2VyLCBuYW1lKSB7XG4gICAgICAgIGlmIChlbmhhbmNlciA9PT0gdm9pZCAwKSB7IGVuaGFuY2VyID0gZGVlcEVuaGFuY2VyOyB9XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IFwiT2JzZXJ2YWJsZVNldEBcIiArIGdldE5leHRJZCgpOyB9XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXNbX2EkMV0gPSBPYnNlcnZhYmxlU2V0TWFya2VyO1xuICAgICAgICB0aGlzLl9kYXRhID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9hdG9tID0gY3JlYXRlQXRvbSh0aGlzLm5hbWUpO1xuICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlNldFwiO1xuICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtb2J4LnNldCByZXF1aXJlcyBTZXQgcG9seWZpbGwgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuIENoZWNrIGJhYmVsLXBvbHlmaWxsIG9yIGNvcmUtanMvZXM2L3NldC5qc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuaGFuY2VyID0gZnVuY3Rpb24gKG5ld1YsIG9sZFYpIHsgcmV0dXJuIGVuaGFuY2VyKG5ld1YsIG9sZFYsIG5hbWUpOyB9O1xuICAgICAgICBpZiAoaW5pdGlhbERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShpbml0aWFsRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUuZGVoYW5jZVZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRlaGFuY2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdHJhbnNhY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW50cmFja2VkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZV8xLCBfYjtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYyA9IF9fdmFsdWVzKF90aGlzLl9kYXRhLnZhbHVlcygpKSwgX2QgPSBfYy5uZXh0KCk7ICFfZC5kb25lOyBfZCA9IF9jLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX2QudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2QgJiYgIV9kLmRvbmUgJiYgKF9iID0gX2MucmV0dXJuKSkgX2IuY2FsbChfYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVTZXQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2tGbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgZV8yLCBfYjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIF9jID0gX192YWx1ZXModGhpcyksIF9kID0gX2MubmV4dCgpOyAhX2QuZG9uZTsgX2QgPSBfYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfZC52YWx1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFja0ZuLmNhbGwodGhpc0FyZywgdmFsdWUsIHZhbHVlLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKF9kICYmICFfZC5kb25lICYmIChfYiA9IF9jLnJldHVybikpIF9iLmNhbGwoX2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5fYXRvbS5yZXBvcnRPYnNlcnZlZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuc2l6ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNoZWNrSWZTdGF0ZU1vZGlmaWNhdGlvbnNBcmVBbGxvd2VkKHRoaXMuX2F0b20pO1xuICAgICAgICBpZiAoaGFzSW50ZXJjZXB0b3JzKHRoaXMpKSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gaW50ZXJjZXB0Q2hhbmdlKHRoaXMsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFkZFwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAvLyBUT0RPOiBpZGVhbGx5LCB2YWx1ZSA9IGNoYW5nZS52YWx1ZSB3b3VsZCBiZSBkb25lIGhlcmUsIHNvIHRoYXQgdmFsdWVzIGNhbiBiZVxuICAgICAgICAgICAgLy8gY2hhbmdlZCBieSBpbnRlcmNlcHRvci4gU2FtZSBhcHBsaWVzIGZvciBvdGhlciBTZXQgYW5kIE1hcCBhcGkncy5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgdHJhbnNhY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl9kYXRhLmFkZChfdGhpcy5lbmhhbmNlcih2YWx1ZSwgdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICAgICAgX3RoaXMuX2F0b20ucmVwb3J0Q2hhbmdlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCk7XG4gICAgICAgICAgICB2YXIgbm90aWZ5ID0gaGFzTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IG5vdGlmeSB8fCBub3RpZnlTcHlcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhZGRcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0U3RhcnQoY2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXJzKHRoaXMsIGNoYW5nZSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGVTZXQucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoaGFzSW50ZXJjZXB0b3JzKHRoaXMpKSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gaW50ZXJjZXB0Q2hhbmdlKHRoaXMsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZTogdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhciBub3RpZnlTcHkgPSBpc1NweUVuYWJsZWQoKTtcbiAgICAgICAgICAgIHZhciBub3RpZnkgPSBoYXNMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gbm90aWZ5IHx8IG5vdGlmeVNweVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLm5hbWUgfSkpO1xuICAgICAgICAgICAgdHJhbnNhY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl9hdG9tLnJlcG9ydENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5fZGF0YS5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5KVxuICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBjaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0RW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYXRvbS5yZXBvcnRPYnNlcnZlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5oYXModGhpcy5kZWhhbmNlVmFsdWUodmFsdWUpKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVTZXQucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSAwO1xuICAgICAgICB2YXIga2V5cyA9IEFycmF5LmZyb20odGhpcy5rZXlzKCkpO1xuICAgICAgICB2YXIgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLnZhbHVlcygpKTtcbiAgICAgICAgcmV0dXJuIG1ha2VJdGVyYWJsZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICAgICAgICAgIG5leHRJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA8IHZhbHVlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyB7IHZhbHVlOiBba2V5c1tpbmRleF0sIHZhbHVlc1tpbmRleF1dLCBkb25lOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICAgIDogeyBkb25lOiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzKCk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2F0b20ucmVwb3J0T2JzZXJ2ZWQoKTtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9ic2VydmFibGVWYWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuX2RhdGEudmFsdWVzKCkpO1xuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhYmxlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEluZGV4IDwgb2JzZXJ2YWJsZVZhbHVlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyB7IHZhbHVlOiBzZWxmLmRlaGFuY2VWYWx1ZShvYnNlcnZhYmxlVmFsdWVzW25leHRJbmRleCsrXSksIGRvbmU6IGZhbHNlIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChpc09ic2VydmFibGVTZXQob3RoZXIpKSB7XG4gICAgICAgICAgICBvdGhlciA9IG90aGVyLnRvSlMoKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2FjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcHJldiA9IGFsbG93U3RhdGVDaGFuZ2VzU3RhcnQodHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG90aGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICBvdGhlci5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gX3RoaXMuYWRkKHZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRVM2U2V0KG90aGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICBvdGhlci5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gX3RoaXMuYWRkKHZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG90aGVyICE9PSBudWxsICYmIG90aGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbChcIkNhbm5vdCBpbml0aWFsaXplIHNldCBmcm9tIFwiICsgb3RoZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGFsbG93U3RhdGVDaGFuZ2VzRW5kKHByZXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24gKGxpc3RlbmVyLCBmaXJlSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgLy8gVE9ETyAnZmlyZUltbWVkaWF0ZWx5JyBjYW4gYmUgdHJ1ZT9cbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBpbnZhcmlhbnQoZmlyZUltbWVkaWF0ZWx5ICE9PSB0cnVlLCBcImBvYnNlcnZlYCBkb2Vzbid0IHN1cHBvcnQgZmlyZUltbWVkaWF0ZWx5PXRydWUgaW4gY29tYmluYXRpb24gd2l0aCBzZXRzLlwiKTtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyTGlzdGVuZXIodGhpcywgbGlzdGVuZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUuaW50ZXJjZXB0ID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVySW50ZXJjZXB0b3IodGhpcywgaGFuZGxlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS50b0pTID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNldCh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgXCJbIFwiICsgQXJyYXkuZnJvbSh0aGlzKS5qb2luKFwiLCBcIikgKyBcIiBdXCI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZVsoX2EkMSA9ICRtb2J4LCBTeW1ib2wuaXRlcmF0b3IpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZVNldDtcbn0oKSk7XG52YXIgaXNPYnNlcnZhYmxlU2V0ID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVTZXRcIiwgT2JzZXJ2YWJsZVNldCk7XG5cbnZhciBPYnNlcnZhYmxlT2JqZWN0QWRtaW5pc3RyYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uKHRhcmdldCwgdmFsdWVzLCBuYW1lLCBkZWZhdWx0RW5oYW5jZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlcyA9PT0gdm9pZCAwKSB7IHZhbHVlcyA9IG5ldyBNYXAoKTsgfVxuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZGVmYXVsdEVuaGFuY2VyID0gZGVmYXVsdEVuaGFuY2VyO1xuICAgICAgICB0aGlzLmtleXNBdG9tID0gbmV3IEF0b20obmFtZSArIFwiLmtleXNcIik7XG4gICAgfVxuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmdldChrZXkpLmdldCgpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChrZXksIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMudGFyZ2V0O1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IHRoaXMudmFsdWVzLmdldChrZXkpO1xuICAgICAgICBpZiAob2JzZXJ2YWJsZSBpbnN0YW5jZW9mIENvbXB1dGVkVmFsdWUpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGUuc2V0KG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbnRlcmNlcHRcbiAgICAgICAgaWYgKGhhc0ludGVyY2VwdG9ycyh0aGlzKSkge1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IGludGVyY2VwdENoYW5nZSh0aGlzLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMucHJveHkgfHwgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBuZXdWYWx1ZSA9IG9ic2VydmFibGUucHJlcGFyZU5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgLy8gbm90aWZ5IHNweSAmIG9ic2VydmVyc1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IGdsb2JhbFN0YXRlLlVOQ0hBTkdFRCkge1xuICAgICAgICAgICAgdmFyIG5vdGlmeSA9IGhhc0xpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBub3RpZnlTcHkgPSBpc1NweUVuYWJsZWQoKTtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBub3RpZnkgfHwgbm90aWZ5U3B5XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSB8fCBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IG9ic2VydmFibGUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgICAgIHNweVJlcG9ydFN0YXJ0KF9fYXNzaWduKF9fYXNzaWduKHt9LCBjaGFuZ2UpLCB7IG5hbWU6IHRoaXMubmFtZSwga2V5OiBrZXkgfSkpO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZS5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5KVxuICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBjaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0RW5kKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgbWFwID0gdGhpcy5wZW5kaW5nS2V5cyB8fCAodGhpcy5wZW5kaW5nS2V5cyA9IG5ldyBNYXAoKSk7XG4gICAgICAgIHZhciBlbnRyeSA9IG1hcC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KVxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmdldCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBleGlzdHMgPSAhIXRoaXMudmFsdWVzLmdldChrZXkpO1xuICAgICAgICAgICAgLy8gUG9zc2libGUgb3B0aW1pemF0aW9uOiBEb24ndCBoYXZlIGEgc2VwYXJhdGUgbWFwIGZvciBub24gZXhpc3Rpbmcga2V5cyxcbiAgICAgICAgICAgIC8vIGJ1dCBzdG9yZSB0aGVtIGluIHRoZSB2YWx1ZXMgbWFwIGluc3RlYWQsIHVzaW5nIGEgc3BlY2lhbCBzeW1ib2wgdG8gZGVub3RlIFwibm90IGV4aXN0aW5nXCJcbiAgICAgICAgICAgIGVudHJ5ID0gbmV3IE9ic2VydmFibGVWYWx1ZShleGlzdHMsIHJlZmVyZW5jZUVuaGFuY2VyLCB0aGlzLm5hbWUgKyBcIi5cIiArIHN0cmluZ2lmeUtleShrZXkpICsgXCI/XCIsIGZhbHNlKTtcbiAgICAgICAgICAgIG1hcC5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkuZ2V0KCk7IC8vIHJlYWQgdG8gc3Vic2NyaWJlXG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuYWRkT2JzZXJ2YWJsZVByb3AgPSBmdW5jdGlvbiAocHJvcE5hbWUsIG5ld1ZhbHVlLCBlbmhhbmNlcikge1xuICAgICAgICBpZiAoZW5oYW5jZXIgPT09IHZvaWQgMCkgeyBlbmhhbmNlciA9IHRoaXMuZGVmYXVsdEVuaGFuY2VyOyB9XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICAgICAgYXNzZXJ0UHJvcGVydHlDb25maWd1cmFibGUodGFyZ2V0LCBwcm9wTmFtZSk7XG4gICAgICAgIGlmIChoYXNJbnRlcmNlcHRvcnModGhpcykpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBpbnRlcmNlcHRDaGFuZ2UodGhpcywge1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSB8fCB0YXJnZXQsXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJhZGRcIixcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZVZhbHVlKG5ld1ZhbHVlLCBlbmhhbmNlciwgdGhpcy5uYW1lICsgXCIuXCIgKyBzdHJpbmdpZnlLZXkocHJvcE5hbWUpLCBmYWxzZSk7XG4gICAgICAgIHRoaXMudmFsdWVzLnNldChwcm9wTmFtZSwgb2JzZXJ2YWJsZSk7XG4gICAgICAgIG5ld1ZhbHVlID0gb2JzZXJ2YWJsZS52YWx1ZTsgLy8gb2JzZXJ2YWJsZVZhbHVlIG1pZ2h0IGhhdmUgY2hhbmdlZCBpdFxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wTmFtZSwgZ2VuZXJhdGVPYnNlcnZhYmxlUHJvcENvbmZpZyhwcm9wTmFtZSkpO1xuICAgICAgICB0aGlzLm5vdGlmeVByb3BlcnR5QWRkaXRpb24ocHJvcE5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuYWRkQ29tcHV0ZWRQcm9wID0gZnVuY3Rpb24gKHByb3BlcnR5T3duZXIsIC8vIHdoZXJlIGlzIHRoZSBwcm9wZXJ0eSBkZWNsYXJlZD9cbiAgICBwcm9wTmFtZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgICAgIG9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCB0aGlzLm5hbWUgKyBcIi5cIiArIHN0cmluZ2lmeUtleShwcm9wTmFtZSk7XG4gICAgICAgIHRoaXMudmFsdWVzLnNldChwcm9wTmFtZSwgbmV3IENvbXB1dGVkVmFsdWUob3B0aW9ucykpO1xuICAgICAgICBpZiAocHJvcGVydHlPd25lciA9PT0gdGFyZ2V0IHx8IGlzUHJvcGVydHlDb25maWd1cmFibGUocHJvcGVydHlPd25lciwgcHJvcE5hbWUpKVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BlcnR5T3duZXIsIHByb3BOYW1lLCBnZW5lcmF0ZUNvbXB1dGVkUHJvcENvbmZpZyhwcm9wTmFtZSkpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZXMuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICAgICAgaWYgKGhhc0ludGVyY2VwdG9ycyh0aGlzKSkge1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IGludGVyY2VwdENoYW5nZSh0aGlzLCB7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnByb3h5IHx8IHRhcmdldCxcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgdHlwZTogXCJyZW1vdmVcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXJ0QmF0Y2goKTtcbiAgICAgICAgICAgIHZhciBub3RpZnkgPSBoYXNMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgICAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCk7XG4gICAgICAgICAgICB2YXIgb2xkT2JzZXJ2YWJsZSA9IHRoaXMudmFsdWVzLmdldChrZXkpO1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gb2xkT2JzZXJ2YWJsZSAmJiBvbGRPYnNlcnZhYmxlLmdldCgpO1xuICAgICAgICAgICAgb2xkT2JzZXJ2YWJsZSAmJiBvbGRPYnNlcnZhYmxlLnNldCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgLy8gbm90aWZ5IGtleSBhbmQga2V5c2V0IGxpc3RlbmVyc1xuICAgICAgICAgICAgdGhpcy5rZXlzQXRvbS5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdLZXlzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5wZW5kaW5nS2V5cy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkpXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnNldChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWxldGUgdGhlIHByb3BcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRhcmdldFtrZXldO1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IG5vdGlmeSB8fCBub3RpZnlTcHlcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyZW1vdmVcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnByb3h5IHx8IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBrZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0U3RhcnQoX19hc3NpZ24oX19hc3NpZ24oe30sIGNoYW5nZSksIHsgbmFtZTogdGhpcy5uYW1lLCBrZXk6IGtleSB9KSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5KVxuICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBjaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0RW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBlbmRCYXRjaCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlT2JqZWN0QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLmlsbGVnYWxBY2Nlc3MgPSBmdW5jdGlvbiAob3duZXIsIHByb3BOYW1lKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGhhcHBlbnMgaWYgYSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBwcm90b3R5cGUgY2hhaW4sIGJ1dCB0aGUgcHJvcGVydHkgd2FzXG4gICAgICAgICAqIGRlY2xhcmVkIGRpcmVjdGx5IGFzIG93biBwcm9wZXJ0eSBvbiB0aGUgcHJvdG90eXBlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBFLmcuOlxuICAgICAgICAgKiBjbGFzcyBBIHtcbiAgICAgICAgICogfVxuICAgICAgICAgKiBleHRlbmRPYnNlcnZhYmxlKEEucHJvdG90eXBlLCB7IHg6IDEgfSlcbiAgICAgICAgICpcbiAgICAgICAgICogY2xhc3NCIGV4dGVucyBBIHtcbiAgICAgICAgICogfVxuICAgICAgICAgKiBjb25zb2xlLmxvZyhuZXcgQigpLngpXG4gICAgICAgICAqXG4gICAgICAgICAqIEl0IGlzIHVuY2xlYXIgd2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgJ3N0YXRpYycgb3IgaW5oZXJpdGVkLlxuICAgICAgICAgKiBFaXRoZXIgdXNlIGBjb25zb2xlLmxvZyhBLngpYFxuICAgICAgICAgKiBvcjogZGVjb3JhdGUoQSwgeyB4OiBvYnNlcnZhYmxlIH0pXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gdXNpbmcgZGVjb3JhdGUsIHRoZSBwcm9wZXJ0eSB3aWxsIGFsd2F5cyBiZSByZWRlY2xhcmVkIGFzIG93biBwcm9wZXJ0eSBvbiB0aGUgYWN0dWFsIGluc3RhbmNlXG4gICAgICAgICAqL1xuICAgICAgICBjb25zb2xlLndhcm4oXCJQcm9wZXJ0eSAnXCIgKyBwcm9wTmFtZSArIFwiJyBvZiAnXCIgKyBvd25lciArIFwiJyB3YXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgcHJvdG90eXBlIGNoYWluLiBVc2UgJ2RlY29yYXRlJyBpbnN0ZWFkIHRvIGRlY2xhcmUgdGhlIHByb3Agb3IgYWNjZXNzIGl0IHN0YXRpY2FsbHkgdGhyb3VnaCBpdCdzIG93bmVyXCIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogT2JzZXJ2ZXMgdGhpcyBvYmplY3QuIFRyaWdnZXJzIGZvciB0aGUgZXZlbnRzICdhZGQnLCAndXBkYXRlJyBhbmQgJ2RlbGV0ZScuXG4gICAgICogU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3Qvb2JzZXJ2ZVxuICAgICAqIGZvciBjYWxsYmFjayBkZXRhaWxzXG4gICAgICovXG4gICAgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBmaXJlSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBpbnZhcmlhbnQoZmlyZUltbWVkaWF0ZWx5ICE9PSB0cnVlLCBcImBvYnNlcnZlYCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZpcmUgaW1tZWRpYXRlbHkgcHJvcGVydHkgZm9yIG9ic2VydmFibGUgb2JqZWN0cy5cIik7XG4gICAgICAgIHJldHVybiByZWdpc3Rlckxpc3RlbmVyKHRoaXMsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuaW50ZXJjZXB0ID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVySW50ZXJjZXB0b3IodGhpcywgaGFuZGxlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlT2JqZWN0QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLm5vdGlmeVByb3BlcnR5QWRkaXRpb24gPSBmdW5jdGlvbiAoa2V5LCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgbm90aWZ5ID0gaGFzTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCk7XG4gICAgICAgIHZhciBjaGFuZ2UgPSBub3RpZnkgfHwgbm90aWZ5U3B5XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFkZFwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSB8fCB0aGlzLnRhcmdldCxcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgc3B5UmVwb3J0U3RhcnQoX19hc3NpZ24oX19hc3NpZ24oe30sIGNoYW5nZSksIHsgbmFtZTogdGhpcy5uYW1lLCBrZXk6IGtleSB9KSk7XG4gICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0tleXMpIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMucGVuZGluZ0tleXMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoZW50cnkpXG4gICAgICAgICAgICAgICAgZW50cnkuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMua2V5c0F0b20ucmVwb3J0Q2hhbmdlZCgpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5nZXRLZXlzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdGhpcy5rZXlzQXRvbS5yZXBvcnRPYnNlcnZlZCgpO1xuICAgICAgICAvLyByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRoaXMudmFsdWVzKSBhcyBhbnlcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyh0aGlzLnZhbHVlcyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2QgPSBfX3JlYWQoX2MudmFsdWUsIDIpLCBrZXkgPSBfZFswXSwgdmFsdWUgPSBfZFsxXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbjtcbn0oKSk7XG5mdW5jdGlvbiBhc09ic2VydmFibGVPYmplY3QodGFyZ2V0LCBuYW1lLCBkZWZhdWx0RW5oYW5jZXIpIHtcbiAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBcIlwiOyB9XG4gICAgaWYgKGRlZmF1bHRFbmhhbmNlciA9PT0gdm9pZCAwKSB7IGRlZmF1bHRFbmhhbmNlciA9IGRlZXBFbmhhbmNlcjsgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCAkbW9ieCkpXG4gICAgICAgIHJldHVybiB0YXJnZXRbJG1vYnhdO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBpbnZhcmlhbnQoT2JqZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpLCBcIkNhbm5vdCBtYWtlIHRoZSBkZXNpZ25hdGVkIG9iamVjdCBvYnNlcnZhYmxlOyBpdCBpcyBub3QgZXh0ZW5zaWJsZVwiKTtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodGFyZ2V0KSlcbiAgICAgICAgbmFtZSA9ICh0YXJnZXQuY29uc3RydWN0b3IubmFtZSB8fCBcIk9ic2VydmFibGVPYmplY3RcIikgKyBcIkBcIiArIGdldE5leHRJZCgpO1xuICAgIGlmICghbmFtZSlcbiAgICAgICAgbmFtZSA9IFwiT2JzZXJ2YWJsZU9iamVjdEBcIiArIGdldE5leHRJZCgpO1xuICAgIHZhciBhZG0gPSBuZXcgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uKHRhcmdldCwgbmV3IE1hcCgpLCBzdHJpbmdpZnlLZXkobmFtZSksIGRlZmF1bHRFbmhhbmNlcik7XG4gICAgYWRkSGlkZGVuUHJvcCh0YXJnZXQsICRtb2J4LCBhZG0pO1xuICAgIHJldHVybiBhZG07XG59XG52YXIgb2JzZXJ2YWJsZVByb3BlcnR5Q29uZmlncyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG52YXIgY29tcHV0ZWRQcm9wZXJ0eUNvbmZpZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gZ2VuZXJhdGVPYnNlcnZhYmxlUHJvcENvbmZpZyhwcm9wTmFtZSkge1xuICAgIHJldHVybiAob2JzZXJ2YWJsZVByb3BlcnR5Q29uZmlnc1twcm9wTmFtZV0gfHxcbiAgICAgICAgKG9ic2VydmFibGVQcm9wZXJ0eUNvbmZpZ3NbcHJvcE5hbWVdID0ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzWyRtb2J4XS5yZWFkKHByb3BOYW1lKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgdGhpc1skbW9ieF0ud3JpdGUocHJvcE5hbWUsIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG59XG5mdW5jdGlvbiBnZXRBZG1pbmlzdHJhdGlvbkZvckNvbXB1dGVkUHJvcE93bmVyKG93bmVyKSB7XG4gICAgdmFyIGFkbSA9IG93bmVyWyRtb2J4XTtcbiAgICBpZiAoIWFkbSkge1xuICAgICAgICAvLyBiZWNhdXNlIGNvbXB1dGVkIHByb3BzIGFyZSBkZWNsYXJlZCBvbiBwcm90eSxcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgaW5zdGFuY2UgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICAgICAgaW5pdGlhbGl6ZUluc3RhbmNlKG93bmVyKTtcbiAgICAgICAgcmV0dXJuIG93bmVyWyRtb2J4XTtcbiAgICB9XG4gICAgcmV0dXJuIGFkbTtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlQ29tcHV0ZWRQcm9wQ29uZmlnKHByb3BOYW1lKSB7XG4gICAgcmV0dXJuIChjb21wdXRlZFByb3BlcnR5Q29uZmlnc1twcm9wTmFtZV0gfHxcbiAgICAgICAgKGNvbXB1dGVkUHJvcGVydHlDb25maWdzW3Byb3BOYW1lXSA9IHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZ2xvYmFsU3RhdGUuY29tcHV0ZWRDb25maWd1cmFibGUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRBZG1pbmlzdHJhdGlvbkZvckNvbXB1dGVkUHJvcE93bmVyKHRoaXMpLnJlYWQocHJvcE5hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBnZXRBZG1pbmlzdHJhdGlvbkZvckNvbXB1dGVkUHJvcE93bmVyKHRoaXMpLndyaXRlKHByb3BOYW1lLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxudmFyIGlzT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvblwiLCBPYnNlcnZhYmxlT2JqZWN0QWRtaW5pc3RyYXRpb24pO1xuZnVuY3Rpb24gaXNPYnNlcnZhYmxlT2JqZWN0KHRoaW5nKSB7XG4gICAgaWYgKGlzT2JqZWN0KHRoaW5nKSkge1xuICAgICAgICAvLyBJbml0aWFsaXplcnMgcnVuIGxhemlseSB3aGVuIHRyYW5zcGlsaW5nIHRvIGJhYmVsLCBzbyBtYWtlIHN1cmUgdGhleSBhcmUgcnVuLi4uXG4gICAgICAgIGluaXRpYWxpemVJbnN0YW5jZSh0aGluZyk7XG4gICAgICAgIHJldHVybiBpc09ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbih0aGluZ1skbW9ieF0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEF0b20odGhpbmcsIHByb3BlcnR5KSB7XG4gICAgaWYgKHR5cGVvZiB0aGluZyA9PT0gXCJvYmplY3RcIiAmJiB0aGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlQXJyYXkodGhpbmcpKSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgICAgICBcIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgaW5kZXggYXRvbXMgZnJvbSBhcnJheXNcIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpbmdbJG1vYnhdLmF0b207XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZVNldCh0aGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGluZ1skbW9ieF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZU1hcCh0aGluZykpIHtcbiAgICAgICAgICAgIHZhciBhbnlUaGluZyA9IHRoaW5nO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFueVRoaW5nLl9rZXlzQXRvbTtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gYW55VGhpbmcuX2RhdGEuZ2V0KHByb3BlcnR5KSB8fCBhbnlUaGluZy5faGFzTWFwLmdldChwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIW9ic2VydmFibGUpXG4gICAgICAgICAgICAgICAgZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJ0aGUgZW50cnkgJ1wiICsgcHJvcGVydHkgKyBcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG9ic2VydmFibGUgbWFwICdcIiArIGdldERlYnVnTmFtZSh0aGluZykgKyBcIidcIik7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbml0aWFsaXplcnMgcnVuIGxhemlseSB3aGVuIHRyYW5zcGlsaW5nIHRvIGJhYmVsLCBzbyBtYWtlIHN1cmUgdGhleSBhcmUgcnVuLi4uXG4gICAgICAgIGluaXRpYWxpemVJbnN0YW5jZSh0aGluZyk7XG4gICAgICAgIGlmIChwcm9wZXJ0eSAmJiAhdGhpbmdbJG1vYnhdKVxuICAgICAgICAgICAgdGhpbmdbcHJvcGVydHldOyAvLyBTZWUgIzEwNzJcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdCh0aGluZykpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFwicGxlYXNlIHNwZWNpZnkgYSBwcm9wZXJ0eVwiKTtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gdGhpbmdbJG1vYnhdLnZhbHVlcy5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZhYmxlKVxuICAgICAgICAgICAgICAgIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAgIFwibm8gb2JzZXJ2YWJsZSBwcm9wZXJ0eSAnXCIgKyBwcm9wZXJ0eSArIFwiJyBmb3VuZCBvbiB0aGUgb2JzZXJ2YWJsZSBvYmplY3QgJ1wiICsgZ2V0RGVidWdOYW1lKHRoaW5nKSArIFwiJ1wiKTtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0F0b20odGhpbmcpIHx8IGlzQ29tcHV0ZWRWYWx1ZSh0aGluZykgfHwgaXNSZWFjdGlvbih0aGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgdGhpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAoaXNSZWFjdGlvbih0aGluZ1skbW9ieF0pKSB7XG4gICAgICAgICAgICAvLyBkaXNwb3NlciBmdW5jdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaW5nWyRtb2J4XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgXCJDYW5ub3Qgb2J0YWluIGF0b20gZnJvbSBcIiArIHRoaW5nKTtcbn1cbmZ1bmN0aW9uIGdldEFkbWluaXN0cmF0aW9uKHRoaW5nLCBwcm9wZXJ0eSkge1xuICAgIGlmICghdGhpbmcpXG4gICAgICAgIGZhaWwoXCJFeHBlY3Rpbmcgc29tZSBvYmplY3RcIik7XG4gICAgaWYgKHByb3BlcnR5ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBnZXRBZG1pbmlzdHJhdGlvbihnZXRBdG9tKHRoaW5nLCBwcm9wZXJ0eSkpO1xuICAgIGlmIChpc0F0b20odGhpbmcpIHx8IGlzQ29tcHV0ZWRWYWx1ZSh0aGluZykgfHwgaXNSZWFjdGlvbih0aGluZykpXG4gICAgICAgIHJldHVybiB0aGluZztcbiAgICBpZiAoaXNPYnNlcnZhYmxlTWFwKHRoaW5nKSB8fCBpc09ic2VydmFibGVTZXQodGhpbmcpKVxuICAgICAgICByZXR1cm4gdGhpbmc7XG4gICAgLy8gSW5pdGlhbGl6ZXJzIHJ1biBsYXppbHkgd2hlbiB0cmFuc3BpbGluZyB0byBiYWJlbCwgc28gbWFrZSBzdXJlIHRoZXkgYXJlIHJ1bi4uLlxuICAgIGluaXRpYWxpemVJbnN0YW5jZSh0aGluZyk7XG4gICAgaWYgKHRoaW5nWyRtb2J4XSlcbiAgICAgICAgcmV0dXJuIHRoaW5nWyRtb2J4XTtcbiAgICBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBcIkNhbm5vdCBvYnRhaW4gYWRtaW5pc3RyYXRpb24gZnJvbSBcIiArIHRoaW5nKTtcbn1cbmZ1bmN0aW9uIGdldERlYnVnTmFtZSh0aGluZywgcHJvcGVydHkpIHtcbiAgICB2YXIgbmFtZWQ7XG4gICAgaWYgKHByb3BlcnR5ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIG5hbWVkID0gZ2V0QXRvbSh0aGluZywgcHJvcGVydHkpO1xuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdCh0aGluZykgfHwgaXNPYnNlcnZhYmxlTWFwKHRoaW5nKSB8fCBpc09ic2VydmFibGVTZXQodGhpbmcpKVxuICAgICAgICBuYW1lZCA9IGdldEFkbWluaXN0cmF0aW9uKHRoaW5nKTtcbiAgICBlbHNlXG4gICAgICAgIG5hbWVkID0gZ2V0QXRvbSh0aGluZyk7IC8vIHZhbGlkIGZvciBhcnJheXMgYXMgd2VsbFxuICAgIHJldHVybiBuYW1lZC5uYW1lO1xufVxuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIsIGRlcHRoKSB7XG4gICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSAtMTsgfVxuICAgIHJldHVybiBlcShhLCBiLCBkZXB0aCk7XG59XG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi81YzIzN2E3YzY4MmZiNjhmZDUzNzgyMDNmMGJmMjJkY2UxNjI0ODU0L3VuZGVyc2NvcmUuanMjTDExODYtTDEyODlcbi8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG5mdW5jdGlvbiBlcShhLCBiLCBkZXB0aCwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgb25seSBlcXVhbCB0byBpdHNlbGYgKHN0cmljdCBjb21wYXJpc29uKS5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgaWYgKGEgIT09IGEpXG4gICAgICAgIHJldHVybiBiICE9PSBiO1xuICAgIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrc1xuICAgIHZhciB0eXBlID0gdHlwZW9mIGE7XG4gICAgaWYgKHR5cGUgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBiICE9IFwib2JqZWN0XCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgICAgY2FzZSBcIltvYmplY3QgUmVnRXhwXVwiOlxuICAgICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgICBjYXNlIFwiW29iamVjdCBTdHJpbmddXCI6XG4gICAgICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBhID09PSBcIlwiICsgYjtcbiAgICAgICAgY2FzZSBcIltvYmplY3QgTnVtYmVyXVwiOlxuICAgICAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOLlxuICAgICAgICAgICAgaWYgKCthICE9PSArYSlcbiAgICAgICAgICAgICAgICByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICAgIGNhc2UgXCJbb2JqZWN0IERhdGVdXCI6XG4gICAgICAgIGNhc2UgXCJbb2JqZWN0IEJvb2xlYW5dXCI6XG4gICAgICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgICAgICBjYXNlIFwiW29iamVjdCBTeW1ib2xdXCI6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLnZhbHVlT2YuY2FsbChhKSA9PT0gU3ltYm9sLnZhbHVlT2YuY2FsbChiKSk7XG4gICAgICAgIGNhc2UgXCJbb2JqZWN0IE1hcF1cIjpcbiAgICAgICAgY2FzZSBcIltvYmplY3QgU2V0XVwiOlxuICAgICAgICAgICAgLy8gTWFwcyBhbmQgU2V0cyBhcmUgdW53cmFwcGVkIHRvIGFycmF5cyBvZiBlbnRyeS1wYWlycywgYWRkaW5nIGFuIGluY2lkZW50YWwgbGV2ZWwuXG4gICAgICAgICAgICAvLyBIaWRlIHRoaXMgZXh0cmEgbGV2ZWwgYnkgaW5jcmVhc2luZyB0aGUgZGVwdGguXG4gICAgICAgICAgICBpZiAoZGVwdGggPj0gMCkge1xuICAgICAgICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgYSA9IHVud3JhcChhKTtcbiAgICBiID0gdW53cmFwKGIpO1xuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09IFwiW29iamVjdCBBcnJheV1cIjtcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgICBpZiAodHlwZW9mIGEgIT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmXG4gICAgICAgICAgICAhKHR5cGVvZiBhQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBiQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcikgJiZcbiAgICAgICAgICAgIChcImNvbnN0cnVjdG9yXCIgaW4gYSAmJiBcImNvbnN0cnVjdG9yXCIgaW4gYikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChkZXB0aCA8IDApIHtcbiAgICAgICAgZGVwdGggPSAtMTtcbiAgICB9XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKVxuICAgICAgICAgICAgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGRlcHRoIC0gMSwgYVN0YWNrLCBiU3RhY2spKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXkgPSB2b2lkIDA7XG4gICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAgICAgICAgIGlmICghKGhhcyQxKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGRlcHRoIC0gMSwgYVN0YWNrLCBiU3RhY2spKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHVud3JhcChhKSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZUFycmF5KGEpKVxuICAgICAgICByZXR1cm4gYS5zbGljZSgpO1xuICAgIGlmIChpc0VTNk1hcChhKSB8fCBpc09ic2VydmFibGVNYXAoYSkpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGEuZW50cmllcygpKTtcbiAgICBpZiAoaXNFUzZTZXQoYSkgfHwgaXNPYnNlcnZhYmxlU2V0KGEpKVxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShhLmVudHJpZXMoKSk7XG4gICAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBoYXMkMShhLCBrZXkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGtleSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VJdGVyYWJsZShpdGVyYXRvcikge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBnZXRTZWxmO1xuICAgIHJldHVybiBpdGVyYXRvcjtcbn1cbmZ1bmN0aW9uIGdldFNlbGYoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogKGMpIE1pY2hlbCBXZXN0c3RyYXRlIDIwMTUgLSAyMDE4XG4gKiBNSVQgTGljZW5zZWRcbiAqXG4gKiBXZWxjb21lIHRvIHRoZSBtb2J4IHNvdXJjZXMhIFRvIGdldCBhbiBnbG9iYWwgb3ZlcnZpZXcgb2YgaG93IE1vYlggaW50ZXJuYWxseSB3b3JrcyxcbiAqIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0OlxuICogaHR0cHM6Ly9tZWRpdW0uY29tL0Btd2VzdHN0cmF0ZS9iZWNvbWluZy1mdWxseS1yZWFjdGl2ZS1hbi1pbi1kZXB0aC1leHBsYW5hdGlvbi1vZi1tb2JzZXJ2YWJsZS01NTk5NTI2MmEyNTQjLnh2Ymg2cWQ3NFxuICpcbiAqIFNvdXJjZSBmb2xkZXJzOlxuICogPT09PT09PT09PT09PT09XG4gKlxuICogLSBhcGkvICAgICBNb3N0IG9mIHRoZSBwdWJsaWMgc3RhdGljIG1ldGhvZHMgZXhwb3NlZCBieSB0aGUgbW9kdWxlIGNhbiBiZSBmb3VuZCBoZXJlLlxuICogLSBjb3JlLyAgICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTW9iWCBhbGdvcml0aG07IGF0b21zLCBkZXJpdmF0aW9ucywgcmVhY3Rpb25zLCBkZXBlbmRlbmN5IHRyZWVzLCBvcHRpbWl6YXRpb25zLiBDb29sIHN0dWZmIGNhbiBiZSBmb3VuZCBoZXJlLlxuICogLSB0eXBlcy8gICBBbGwgdGhlIG1hZ2ljIHRoYXQgaXMgbmVlZCB0byBoYXZlIG9ic2VydmFibGUgb2JqZWN0cywgYXJyYXlzIGFuZCB2YWx1ZXMgaXMgaW4gdGhpcyBmb2xkZXIuIEluY2x1ZGluZyB0aGUgbW9kaWZpZXJzIGxpa2UgYGFzRmxhdGAuXG4gKiAtIHV0aWxzLyAgIFV0aWxpdHkgc3R1ZmYuXG4gKlxuICovXG5pZiAodHlwZW9mIFByb3h5ID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbbW9ieF0gTW9iWCA1KyByZXF1aXJlcyBQcm94eSBhbmQgU3ltYm9sIG9iamVjdHMuIElmIHlvdXIgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IFN5bWJvbCBvciBQcm94eSBvYmplY3RzLCBwbGVhc2UgZG93bmdyYWRlIHRvIE1vYlggNC4gRm9yIFJlYWN0IE5hdGl2ZSBBbmRyb2lkLCBjb25zaWRlciB1cGdyYWRpbmcgSlNDb3JlLlwiKTtcbn1cbnRyeSB7XG4gICAgLy8gZGVmaW5lIHByb2Nlc3MuZW52IGlmIG5lZWRlZFxuICAgIC8vIGlmIHRoaXMgaXMgbm90IGEgcHJvZHVjdGlvbiBidWlsZCBpbiB0aGUgZmlyc3QgcGxhY2VcbiAgICAvLyAoaW4gd2hpY2ggY2FzZSB0aGUgZXhwcmVzc2lvbiBiZWxvdyB3b3VsZCBiZSBzdWJzdGl0dXRlZCB3aXRoICdwcm9kdWN0aW9uJylcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOVjtcbn1cbmNhdGNoIChlKSB7XG4gICAgdmFyIGcgPSBnZXRHbG9iYWwoKTtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIGcucHJvY2VzcyA9IHt9O1xuICAgIGcucHJvY2Vzcy5lbnYgPSB7fTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gdGVzdENvZGVNaW5pZmljYXRpb24oKSB7IH1cbiAgICBpZiAodGVzdENvZGVNaW5pZmljYXRpb24ubmFtZSAhPT0gXCJ0ZXN0Q29kZU1pbmlmaWNhdGlvblwiICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnYuSUdOT1JFX01PQlhfTUlOSUZZX1dBUk5JTkcgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIC8vIHRyaWNrIHNvIGl0IGRvZXNuJ3QgZ2V0IHJlcGxhY2VkXG4gICAgICAgIHZhciB2YXJOYW1lID0gW1wicHJvY2Vzc1wiLCBcImVudlwiLCBcIk5PREVfRU5WXCJdLmpvaW4oXCIuXCIpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbbW9ieF0geW91IGFyZSBydW5uaW5nIGEgbWluaWZpZWQgYnVpbGQsIGJ1dCAnXCIgKyB2YXJOYW1lICsgXCInIHdhcyBub3Qgc2V0IHRvICdwcm9kdWN0aW9uJyBpbiB5b3VyIGJ1bmRsZXIuIFRoaXMgcmVzdWx0cyBpbiBhbiB1bm5lY2Vzc2FyaWx5IGxhcmdlIGFuZCBzbG93IGJ1bmRsZVwiKTtcbiAgICB9XG59KSgpO1xuaWYgKHR5cGVvZiBfX01PQlhfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gXCJvYmplY3RcIikge1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZHlrb2cvbW9ieC1kZXZ0b29scy9cbiAgICBfX01PQlhfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3RNb2J4KHtcbiAgICAgICAgc3B5OiBzcHksXG4gICAgICAgIGV4dHJhczoge1xuICAgICAgICAgICAgZ2V0RGVidWdOYW1lOiBnZXREZWJ1Z05hbWVcbiAgICAgICAgfSxcbiAgICAgICAgJG1vYng6ICRtb2J4XG4gICAgfSk7XG59XG5cbmV4cG9ydCB7ICRtb2J4LCBGbG93Q2FuY2VsbGF0aW9uRXJyb3IsIElEZXJpdmF0aW9uU3RhdGUsIE9ic2VydmFibGVNYXAsIE9ic2VydmFibGVTZXQsIFJlYWN0aW9uLCBhbGxvd1N0YXRlQ2hhbmdlcyBhcyBfYWxsb3dTdGF0ZUNoYW5nZXMsIGFsbG93U3RhdGVDaGFuZ2VzSW5zaWRlQ29tcHV0ZWQgYXMgX2FsbG93U3RhdGVDaGFuZ2VzSW5zaWRlQ29tcHV0ZWQsIGFsbG93U3RhdGVSZWFkc0VuZCBhcyBfYWxsb3dTdGF0ZVJlYWRzRW5kLCBhbGxvd1N0YXRlUmVhZHNTdGFydCBhcyBfYWxsb3dTdGF0ZVJlYWRzU3RhcnQsIF9lbmRBY3Rpb24sIGdldEFkbWluaXN0cmF0aW9uIGFzIF9nZXRBZG1pbmlzdHJhdGlvbiwgZ2V0R2xvYmFsU3RhdGUgYXMgX2dldEdsb2JhbFN0YXRlLCBpbnRlcmNlcHRSZWFkcyBhcyBfaW50ZXJjZXB0UmVhZHMsIGlzQ29tcHV0aW5nRGVyaXZhdGlvbiBhcyBfaXNDb21wdXRpbmdEZXJpdmF0aW9uLCByZXNldEdsb2JhbFN0YXRlIGFzIF9yZXNldEdsb2JhbFN0YXRlLCBfc3RhcnRBY3Rpb24sIGFjdGlvbiwgYXV0b3J1biwgY29tcGFyZXIsIGNvbXB1dGVkLCBjb25maWd1cmUsIGNyZWF0ZUF0b20sIGRlY29yYXRlLCBlbnRyaWVzLCBleHRlbmRPYnNlcnZhYmxlLCBmbG93LCBnZXQsIGdldEF0b20sIGdldERlYnVnTmFtZSwgZ2V0RGVwZW5kZW5jeVRyZWUsIGdldE9ic2VydmVyVHJlZSwgaGFzLCBpbnRlcmNlcHQsIGlzQWN0aW9uLCBpc0FycmF5TGlrZSwgaXNPYnNlcnZhYmxlVmFsdWUgYXMgaXNCb3hlZE9ic2VydmFibGUsIGlzQ29tcHV0ZWQsIGlzQ29tcHV0ZWRQcm9wLCBpc0Zsb3dDYW5jZWxsYXRpb25FcnJvciwgaXNPYnNlcnZhYmxlLCBpc09ic2VydmFibGVBcnJheSwgaXNPYnNlcnZhYmxlTWFwLCBpc09ic2VydmFibGVPYmplY3QsIGlzT2JzZXJ2YWJsZVByb3AsIGlzT2JzZXJ2YWJsZVNldCwga2V5cywgb2JzZXJ2YWJsZSwgb2JzZXJ2ZSwgb25CZWNvbWVPYnNlcnZlZCwgb25CZWNvbWVVbm9ic2VydmVkLCBvblJlYWN0aW9uRXJyb3IsIHJlYWN0aW9uLCByZW1vdmUsIHJ1bkluQWN0aW9uLCBzZXQsIHNweSwgdG9KUywgdHJhY2UsIHRyYW5zYWN0aW9uLCB1bnRyYWNrZWQsIHZhbHVlcywgd2hlbiB9O1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfZXF1YWxzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fZXF1YWxzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiBpdHMgYXJndW1lbnRzIGFyZSBlcXVpdmFsZW50LCBgZmFsc2VgIG90aGVyd2lzZS4gSGFuZGxlc1xuICogY3ljbGljYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuICpcbiAqIERpc3BhdGNoZXMgc3ltbWV0cmljYWxseSB0byB0aGUgYGVxdWFsc2AgbWV0aG9kcyBvZiBib3RoIGFyZ3VtZW50cywgaWZcbiAqIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTUuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIGEgLT4gYiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmVxdWFscygxLCAxKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuZXF1YWxzKDEsICcxJyk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5lcXVhbHMoWzEsIDIsIDNdLCBbMSwgMiwgM10pOyAvLz0+IHRydWVcbiAqXG4gKiAgICAgIHZhciBhID0ge307IGEudiA9IGE7XG4gKiAgICAgIHZhciBiID0ge307IGIudiA9IGI7XG4gKiAgICAgIFIuZXF1YWxzKGEsIGIpOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBfZXF1YWxzKGEsIGIsIFtdLCBbXSk7XG59KTtcbiIsInZhciBfaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFyZ3VtZW50cykgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nID9cbiAgICBmdW5jdGlvbiBfaXNBcmd1bWVudHMoeCkgeyByZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7IH0gOlxuICAgIGZ1bmN0aW9uIF9pc0FyZ3VtZW50cyh4KSB7IHJldHVybiBfaGFzKCdjYWxsZWUnLCB4KTsgfTtcbn0oKSk7XG4iLCIvKipcbiAqIFByaXZhdGUgYGNvbmNhdGAgZnVuY3Rpb24gdG8gbWVyZ2UgdHdvIGFycmF5LWxpa2Ugb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IFtzZXQxPVtdXSBBbiBhcnJheS1saWtlIG9iamVjdC5cbiAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBbc2V0Mj1bXV0gQW4gYXJyYXktbGlrZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheX0gQSBuZXcsIG1lcmdlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBfY29uY2F0KFs0LCA1LCA2XSwgWzEsIDIsIDNdKTsgLy89PiBbNCwgNSwgNiwgMSwgMiwgM11cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY29uY2F0KHNldDEsIHNldDIpIHtcbiAgc2V0MSA9IHNldDEgfHwgW107XG4gIHNldDIgPSBzZXQyIHx8IFtdO1xuICB2YXIgaWR4O1xuICB2YXIgbGVuMSA9IHNldDEubGVuZ3RoO1xuICB2YXIgbGVuMiA9IHNldDIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbjEpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBzZXQxW2lkeF07XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbjIpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBzZXQyW2lkeF07XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pc1N0cmluZyh4KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xufTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIHN1cHBsaWVkIGFuIG9iamVjdCByZXR1cm5zIHRoZSBpbmRpY2F0ZWRcbiAqIHByb3BlcnR5IG9mIHRoYXQgb2JqZWN0LCBpZiBpdCBleGlzdHMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHMgLT4ge3M6IGF9IC0+IGEgfCBVbmRlZmluZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwIFRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcXVlcnlcbiAqIEByZXR1cm4geyp9IFRoZSB2YWx1ZSBhdCBgb2JqLnBgLlxuICogQHNlZSBSLnBhdGhcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnByb3AoJ3gnLCB7eDogMTAwfSk7IC8vPT4gMTAwXG4gKiAgICAgIFIucHJvcCgneCcsIHt9KTsgLy89PiB1bmRlZmluZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIHByb3AocCwgb2JqKSB7IHJldHVybiBvYmpbcF07IH0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIHRoZSBnaXZlbiB2YWx1ZS4gTm90ZSB0aGF0IGZvclxuICogbm9uLXByaW1pdGl2ZXMgdGhlIHZhbHVlIHJldHVybmVkIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGtub3duIGFzIGBjb25zdGAsIGBjb25zdGFudGAsIG9yIGBLYCAoZm9yIEsgY29tYmluYXRvcikgaW5cbiAqIG90aGVyIGxhbmd1YWdlcyBhbmQgbGlicmFyaWVzLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIGEgLT4gKCogLT4gYSlcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgZnVuY3Rpb25cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIEZ1bmN0aW9uIDo6ICogLT4gdmFsLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciB0ID0gUi5hbHdheXMoJ1RlZScpO1xuICogICAgICB0KCk7IC8vPT4gJ1RlZSdcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGFsd2F5cyh2YWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWw7XG4gIH07XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBTZWUgaWYgYW4gb2JqZWN0IChgdmFsYCkgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN1cHBsaWVkIGNvbnN0cnVjdG9yLiBUaGlzXG4gKiBmdW5jdGlvbiB3aWxsIGNoZWNrIHVwIHRoZSBpbmhlcml0YW5jZSBjaGFpbiwgaWYgYW55LlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjMuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgKCogLT4geyp9KSAtPiBhIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjdG9yIEEgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuaXMoT2JqZWN0LCB7fSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKE51bWJlciwgMSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKE9iamVjdCwgMSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pcyhTdHJpbmcsICdzJyk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKFN0cmluZywgbmV3IFN0cmluZygnJykpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pcyhPYmplY3QsIG5ldyBTdHJpbmcoJycpKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXMoT2JqZWN0LCAncycpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXMoTnVtYmVyLCB7fSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGlzKEN0b3IsIHZhbCkge1xuICByZXR1cm4gdmFsICE9IG51bGwgJiYgdmFsLmNvbnN0cnVjdG9yID09PSBDdG9yIHx8IHZhbCBpbnN0YW5jZW9mIEN0b3I7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXJnZXIgb2YgaXRzIHR3byBhcmd1bWVudHMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgUmVsYXRpb25cbiAqIEBzaWcgT3JkIGEgPT4gYSAtPiBhIC0+IGFcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHsqfVxuICogQHNlZSBSLm1heEJ5LCBSLm1pblxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIubWF4KDc4OSwgMTIzKTsgLy89PiA3ODlcbiAqICAgICAgUi5tYXgoJ2EnLCAnYicpOyAvLz0+ICdiJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gbWF4KGEsIGIpIHsgcmV0dXJuIGIgPiBhID8gYiA6IGE7IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcbnZhciBidG9hID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5idG9hICYmIHdpbmRvdy5idG9hLmJpbmQod2luZG93KSkgfHwgcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J0b2EnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgbG9hZEV2ZW50ID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG4gICAgdmFyIHhEb21haW4gPSBmYWxzZTtcblxuICAgIC8vIEZvciBJRSA4LzkgQ09SUyBzdXBwb3J0XG4gICAgLy8gT25seSBzdXBwb3J0cyBQT1NUIGFuZCBHRVQgY2FsbHMgYW5kIGRvZXNuJ3QgcmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVycy5cbiAgICAvLyBET04nVCBkbyB0aGlzIGZvciB0ZXN0aW5nIGIvYyBYTUxIdHRwUmVxdWVzdCBpcyBtb2NrZWQsIG5vdCBYRG9tYWluUmVxdWVzdC5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiByZXF1ZXN0KSAmJlxuICAgICAgICAhaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSB7XG4gICAgICByZXF1ZXN0ID0gbmV3IHdpbmRvdy5YRG9tYWluUmVxdWVzdCgpO1xuICAgICAgbG9hZEV2ZW50ID0gJ29ubG9hZCc7XG4gICAgICB4RG9tYWluID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3Qub25wcm9ncmVzcyA9IGZ1bmN0aW9uIGhhbmRsZVByb2dyZXNzKCkge307XG4gICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7fTtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGVcbiAgICByZXF1ZXN0W2xvYWRFdmVudF0gPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQgJiYgIXhEb21haW4pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIWNvbmZpZy5yZXNwb25zZVR5cGUgfHwgY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnID8gcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIC8vIElFIHNlbmRzIDEyMjMgaW5zdGVhZCBvZiAyMDQgKGh0dHBzOi8vZ2l0aHViLmNvbS9temFicmlza2llL2F4aW9zL2lzc3Vlcy8yMDEpXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXMgPT09IDEyMjMgPyAnTm8gQ29udGVudCcgOiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsInZhciBiYXNlTWF0Y2hlcyA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzJyksXG4gICAgYmFzZU1hdGNoZXNQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgcHJvcGVydHkgPSByZXF1aXJlKCcuL3Byb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUl0ZXJhdGVlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGJhc2VJc0VxdWFsRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsRGVlcCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEFycmF5cztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiIsInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGb3JPd24gPSByZXF1aXJlKCcuL19iYXNlRm9yT3duJyksXG4gICAgY3JlYXRlQmFzZUVhY2ggPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRWFjaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICovXG52YXIgYmFzZUVhY2ggPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRWFjaDtcbiIsInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJc05hTiA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hTicpLFxuICAgIHN0cmljdEluZGV4T2YgPSByZXF1aXJlKCcuL19zdHJpY3RJbmRleE9mJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUluZGV4T2Y7XG4iLCJ2YXIgdG9GaW5pdGUgPSByZXF1aXJlKCcuL3RvRmluaXRlJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9JbnRlZ2VyKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiAwXG4gKlxuICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLFxuICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9JbnRlZ2VyO1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciBiYXNlU2V0RGF0YSA9IHJlcXVpcmUoJy4vX2Jhc2VTZXREYXRhJyksXG4gICAgY3JlYXRlQmluZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJpbmQnKSxcbiAgICBjcmVhdGVDdXJyeSA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN1cnJ5JyksXG4gICAgY3JlYXRlSHlicmlkID0gcmVxdWlyZSgnLi9fY3JlYXRlSHlicmlkJyksXG4gICAgY3JlYXRlUGFydGlhbCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVBhcnRpYWwnKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIG1lcmdlRGF0YSA9IHJlcXVpcmUoJy4vX21lcmdlRGF0YScpLFxuICAgIHNldERhdGEgPSByZXF1aXJlKCcuL19zZXREYXRhJyksXG4gICAgc2V0V3JhcFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0V3JhcFRvU3RyaW5nJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogICAgMSAtIGBfLmJpbmRgXG4gKiAgICAyIC0gYF8uYmluZEtleWBcbiAqICAgIDQgLSBgXy5jdXJyeWAgb3IgYF8uY3VycnlSaWdodGAgb2YgYSBib3VuZCBmdW5jdGlvblxuICogICAgOCAtIGBfLmN1cnJ5YFxuICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gKiAgIDMyIC0gYF8ucGFydGlhbGBcbiAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gKiAgMTI4IC0gYF8ucmVhcmdgXG4gKiAgMjU2IC0gYF8uYXJ5YFxuICogIDUxMiAtIGBfLmZsaXBgXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICBpZiAoIWlzQmluZEtleSAmJiB0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXJ0aWFscyA/IHBhcnRpYWxzLmxlbmd0aCA6IDA7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwgMCk7XG4gIGFyaXR5ID0gYXJpdHkgPT09IHVuZGVmaW5lZCA/IGFyaXR5IDogdG9JbnRlZ2VyKGFyaXR5KTtcbiAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgaWYgKGJpdG1hc2sgJiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRykge1xuICAgIHZhciBwYXJ0aWFsc1JpZ2h0ID0gcGFydGlhbHMsXG4gICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsXG4gICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gIH1cbiAgZnVuYyA9IG5ld0RhdGFbMF07XG4gIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICB0aGlzQXJnID0gbmV3RGF0YVsyXTtcbiAgcGFydGlhbHMgPSBuZXdEYXRhWzNdO1xuICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgYXJpdHkgPSBuZXdEYXRhWzldID0gbmV3RGF0YVs5XSA9PT0gdW5kZWZpbmVkXG4gICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3RoKVxuICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gIGlmICghYXJpdHkgJiYgYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyk7XG4gIH1cbiAgaWYgKCFiaXRtYXNrIHx8IGJpdG1hc2sgPT0gV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICB2YXIgcmVzdWx0ID0gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKTtcbiAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KTtcbiAgfSBlbHNlIGlmICgoYml0bWFzayA9PSBXUkFQX1BBUlRJQUxfRkxBRyB8fCBiaXRtYXNrID09IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHKSkgJiYgIWhvbGRlcnMubGVuZ3RoKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIH1cbiAgdmFyIHNldHRlciA9IGRhdGEgPyBiYXNlU2V0RGF0YSA6IHNldERhdGE7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcoc2V0dGVyKHJlc3VsdCwgbmV3RGF0YSksIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVdyYXA7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgbWV0YU1hcCA9IHJlcXVpcmUoJy4vX21ldGFNYXAnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXREYXRhID0gIW1ldGFNYXAgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIGRhdGEpIHtcbiAgbWV0YU1hcC5zZXQoZnVuYywgZGF0YSk7XG4gIHJldHVybiBmdW5jO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0RGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGNvbXBvc2VBcmdzID0gcmVxdWlyZSgnLi9fY29tcG9zZUFyZ3MnKSxcbiAgICBjb21wb3NlQXJnc1JpZ2h0ID0gcmVxdWlyZSgnLi9fY29tcG9zZUFyZ3NSaWdodCcpLFxuICAgIGNvdW50SG9sZGVycyA9IHJlcXVpcmUoJy4vX2NvdW50SG9sZGVycycpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgY3JlYXRlUmVjdXJyeSA9IHJlcXVpcmUoJy4vX2NyZWF0ZVJlY3VycnknKSxcbiAgICBnZXRIb2xkZXIgPSByZXF1aXJlKCcuL19nZXRIb2xkZXInKSxcbiAgICByZW9yZGVyID0gcmVxdWlyZSgnLi9fcmVvcmRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIG9wdGlvbmFsIGB0aGlzYFxuICogYmluZGluZyBvZiBgdGhpc0FyZ2AsIHBhcnRpYWwgYXBwbGljYXRpb24sIGFuZCBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzUmlnaHRdIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkXG4gKiAgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzUmlnaHRdIFRoZSBgcGFydGlhbHNSaWdodGAgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVIeWJyaWQoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0FyeSA9IGJpdG1hc2sgJiBXUkFQX0FSWV9GTEFHLFxuICAgICAgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRyxcbiAgICAgIGlzQ3VycmllZCA9IGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxcbiAgICAgIGlzRmxpcCA9IGJpdG1hc2sgJiBXUkFQX0ZMSVBfRkxBRyxcbiAgICAgIEN0b3IgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICBpbmRleCA9IGxlbmd0aDtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIGlmIChpc0N1cnJpZWQpIHtcbiAgICAgIHZhciBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKSxcbiAgICAgICAgICBob2xkZXJzQ291bnQgPSBjb3VudEhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHMpIHtcbiAgICAgIGFyZ3MgPSBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpYWxzUmlnaHQpIHtcbiAgICAgIGFyZ3MgPSBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgaXNDdXJyaWVkKTtcbiAgICB9XG4gICAgbGVuZ3RoIC09IGhvbGRlcnNDb3VudDtcbiAgICBpZiAoaXNDdXJyaWVkICYmIGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICB2YXIgbmV3SG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHRoaXNBcmcsXG4gICAgICAgIGFyZ3MsIG5ld0hvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSAtIGxlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsXG4gICAgICAgIGZuID0gaXNCaW5kS2V5ID8gdGhpc0JpbmRpbmdbZnVuY10gOiBmdW5jO1xuXG4gICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgaWYgKGFyZ1Bvcykge1xuICAgICAgYXJncyA9IHJlb3JkZXIoYXJncywgYXJnUG9zKTtcbiAgICB9IGVsc2UgaWYgKGlzRmxpcCAmJiBsZW5ndGggPiAxKSB7XG4gICAgICBhcmdzLnJldmVyc2UoKTtcbiAgICB9XG4gICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGxlbmd0aCkge1xuICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgfVxuICAgIGlmICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpIHtcbiAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yKGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVIeWJyaWQ7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcG9zZUFyZ3M7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkge1xuICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICB9XG4gIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7XG4gIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJnc1JpZ2h0O1xuIiwidmFyIGlzTGF6aWFibGUgPSByZXF1aXJlKCcuL19pc0xhemlhYmxlJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWN1cnJ5KGZ1bmMsIGJpdG1hc2ssIHdyYXBGdW5jLCBwbGFjZWhvbGRlciwgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdIb2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogaG9sZGVycyxcbiAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX0ZMQUcgOiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcpO1xuICB9XG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIG5ld1BhcnRpYWxzLCBuZXdIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LFxuICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgdmFyIHJlc3VsdCA9IHdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICB9XG4gIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVjdXJyeTtcbiIsInZhciBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKTtcblxuLyoqXG4gKiBHZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKi9cbnZhciBnZXREYXRhID0gIW1ldGFNYXAgPyBub29wIDogZnVuY3Rpb24oZnVuYykge1xuICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldERhdGE7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gIHRoaXMuX19pbmRleF9fID0gMDtcbiAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xufVxuXG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvZGFzaFdyYXBwZXI7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0RGF0YTtcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBnZXRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2dldFdyYXBEZXRhaWxzJyksXG4gICAgaW5zZXJ0V3JhcERldGFpbHMgPSByZXF1aXJlKCcuL19pbnNlcnRXcmFwRGV0YWlscycpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKSxcbiAgICB1cGRhdGVXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX3VwZGF0ZVdyYXBEZXRhaWxzJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYHdyYXBwZXJgIHRvIG1pbWljIHRoZSBzb3VyY2Ugb2YgYHJlZmVyZW5jZWBcbiAqIHdpdGggd3JhcHBlciBkZXRhaWxzIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgYm9keS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcHBlciBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGB3cmFwcGVyYC5cbiAqL1xuZnVuY3Rpb24gc2V0V3JhcFRvU3RyaW5nKHdyYXBwZXIsIHJlZmVyZW5jZSwgYml0bWFzaykge1xuICB2YXIgc291cmNlID0gKHJlZmVyZW5jZSArICcnKTtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKHdyYXBwZXIsIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgdXBkYXRlV3JhcERldGFpbHMoZ2V0V3JhcERldGFpbHMoc291cmNlKSwgYml0bWFzaykpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRXcmFwVG9TdHJpbmc7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xudmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzVW5pY29kZTtcbiIsIlwidXNlIHN0cmljdFwiO2Z1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lLmRlZmF1bHQ6ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgX2RlZmF1bHQyND1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9fX1wiKSksX2RlZmF1bHQyMz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9jb250YWluc1wiKSksX2RlZmF1bHQyMj1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9wYXJ0aWFsXCIpKSxfZGVmYXVsdDIxPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL3BpcGVcIikpLF9kZWZhdWx0MjA9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMva2V5c1wiKSksX2RlZmF1bHQxOT1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9mb3JFYWNoXCIpKSxfZGVmYXVsdDE4PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2Rpc3NvY1wiKSksX2RlZmF1bHQxNz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9tZXJnZVwiKSksX2RlZmF1bHQxNj1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9wcm9wXCIpKSxfZGVmYXVsdDE1PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2Fsd2F5c1wiKSksX2RlZmF1bHQxND1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9pZkVsc2VcIikpLF9kZWZhdWx0MTM9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvcHJvcFNhdGlzZmllc1wiKSksX2RlZmF1bHQxMj1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9wcm9wSXNcIikpLF9kZWZhdWx0MTE9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvaGFzXCIpKSxfZGVmYXVsdDEwPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2NvbXBsZW1lbnRcIikpLF9kZWZhdWx0OT1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9pc0VtcHR5XCIpKSxfZGVmYXVsdDg9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvYW55UGFzc1wiKSksX2RlZmF1bHQ3PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2d0ZVwiKSksX2RlZmF1bHQ2PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2N1cnJ5XCIpKSxfZGVmYXVsdDU9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvVFwiKSksX2RlZmF1bHQ0PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2lzXCIpKSxfZGVmYXVsdDM9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvaWRlbnRpdHlcIikpLF9kZWZhdWx0Mj1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9pc05pbFwiKSksX2RlZmF1bHQ9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvY29uZFwiKSksYXhpb3M9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSksX3R5cGVvZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfTtGdW5jdGlvbi5wcm90b3R5cGUuJGFzeW5jYmluZD1mdW5jdGlvbiBlKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBhLmFwcGx5KHQsYXJndW1lbnRzKX1GdW5jdGlvbi5wcm90b3R5cGUuJGFzeW5jYmluZHx8T2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSxcIiRhc3luY2JpbmRcIix7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGUudHJhbXBvbGluZXx8KGUudHJhbXBvbGluZT1mdW5jdGlvbihlLHQscixuLGEpe3JldHVybiBmdW5jdGlvbiB1KGkpe2Zvcig7aTspe2lmKGkudGhlbilyZXR1cm4gaT1pLnRoZW4odSxuKSxhP3ZvaWQgMDppO3RyeXtpZihpLnBvcCl7aWYoaS5sZW5ndGgpcmV0dXJuIGkucG9wKCk/dC5jYWxsKGUpOmk7aT1yfWVsc2UgaT1pLmNhbGwoZSl9Y2F0Y2goZSl7cmV0dXJuIG4oZSl9fX19KSxlLkxhenlUaGVuYWJsZXx8KGUuTGF6eVRoZW5hYmxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZSYmZSBpbnN0YW5jZW9mIE9iamVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVufWZ1bmN0aW9uIHQocixuLGEpe3RyeXt2YXIgdT1hP2Eobik6bjtpZihyPT09dSlyZXR1cm4gci5yZWplY3QobmV3IFR5cGVFcnJvcihcIlByb21pc2UgcmVzb2x1dGlvbiBsb29wXCIpKTtlKHUpP3UudGhlbihmdW5jdGlvbihlKXt0KHIsZSl9LGZ1bmN0aW9uKGUpe3IucmVqZWN0KGUpfSk6ci5yZXNvbHZlKHUpfWNhdGNoKGUpe3IucmVqZWN0KGUpfX1mdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG4oZSl7fWZ1bmN0aW9uIGEoZSx0KXt0aGlzLnJlc29sdmU9ZSx0aGlzLnJlamVjdD10fWZ1bmN0aW9uIHUobixhKXt2YXIgdT1uZXcgcjt0cnl7dGhpcy5fcmVzb2x2ZXIoZnVuY3Rpb24ocil7cmV0dXJuIGUocik/ci50aGVuKG4sYSk6dCh1LHIsbil9LGZ1bmN0aW9uKGUpe3QodSxlLGEpfSl9Y2F0Y2goZSl7dCh1LGUsYSl9cmV0dXJuIHV9ZnVuY3Rpb24gaShlKXt0aGlzLl9yZXNvbHZlcj1lLHRoaXMudGhlbj11fXJldHVybiByLnByb3RvdHlwZT17cmVzb2x2ZTpuLHJlamVjdDpuLHRoZW46YX0saS5yZXNvbHZlPWZ1bmN0aW9uKGUpe3JldHVybiBpLmlzVGhlbmFibGUoZSk/ZTp7dGhlbjpmdW5jdGlvbih0KXtyZXR1cm4gdChlKX19fSxpLmlzVGhlbmFibGU9ZSxpfSgpLGUuRWFnZXJUaGVuYWJsZT1lLlRoZW5hYmxlPShlLkVhZ2VyVGhlbmFibGVGYWN0b3J5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aWYoZSl7dmFyIHQ9dGhpcztlKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZShlKX0sZnVuY3Rpb24oZSl7dC5yZWplY3QoZSl9KX19ZnVuY3Rpb24gcihlLHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUueSl0cnl7dmFyIHI9ZS55LmNhbGwodm9pZCAwLHQpO2UucC5yZXNvbHZlKHIpfWNhdGNoKHQpe2UucC5yZWplY3QodCl9ZWxzZSBlLnAucmVzb2x2ZSh0KX1mdW5jdGlvbiBuKGUsdCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5uKXRyeXt2YXIgcj1lLm4uY2FsbCh2b2lkIDAsdCk7ZS5wLnJlc29sdmUocil9Y2F0Y2godCl7ZS5wLnJlamVjdCh0KX1lbHNlIGUucC5yZWplY3QodCl9ZT1lfHxcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBwcm9jZXNzP1widW5kZWZpbmVkXCI6X3R5cGVvZihwcm9jZXNzKSkmJnByb2Nlc3MubmV4dFRpY2t8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHNldEltbWVkaWF0ZSYmc2V0SW1tZWRpYXRlfHxmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMCl9O3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2Zvcig7ci5sZW5ndGgtbjspe3RyeXtyW25dKCl9Y2F0Y2goZSl7fXJbbisrXT12b2lkIDAsbj09PWEmJihyLnNwbGljZSgwLGEpLG49MCl9fXZhciByPVtdLG49MCxhPTEwMjQ7cmV0dXJuIGZ1bmN0aW9uKGEpe3IucHVzaChhKSxyLmxlbmd0aC1uPT09MSYmZSh0KX19KCk7cmV0dXJuIHQucHJvdG90eXBlPXtyZXNvbHZlOmZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PXRoaXMuc3RhdGUpe2lmKGU9PT10aGlzKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKFwiQXR0ZW1wdCB0byByZXNvbHZlIHByb21pc2Ugd2l0aCBzZWxmXCIpKTt2YXIgdD10aGlzO2lmKGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlfHxcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6X3R5cGVvZihlKSkpKXRyeXt2YXIgbj0wLHU9ZS50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHUpcmV0dXJuIHZvaWQgdS5jYWxsKGUsZnVuY3Rpb24oZSl7bisrfHx0LnJlc29sdmUoZSl9LGZ1bmN0aW9uKGUpe24rK3x8dC5yZWplY3QoZSl9KX1jYXRjaChlKXtyZXR1cm4gdm9pZChufHx0aGlzLnJlamVjdChlKSl9dGhpcy5zdGF0ZT1yLHRoaXMudj1lLHQuYyYmYShmdW5jdGlvbigpe2Zvcih2YXIgbj0wLGE9dC5jLmxlbmd0aDtuPGE7bisrKXIodC5jW25dLGUpfSl9fSxyZWplY3Q6ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09dGhpcy5zdGF0ZSl7dGhpcy5zdGF0ZT1uLHRoaXMudj1lO3ZhciB0PXRoaXMuYzt0JiZhKGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAsYT10Lmxlbmd0aDtyPGE7cisrKW4odFtyXSxlKX0pfX0sdGhlbjpmdW5jdGlvbihlLHIpe3ZhciBuPW5ldyB0LHU9e3k6ZSxuOnIscDpufTtpZih2b2lkIDA9PT10aGlzLnN0YXRlKXRoaXMuYz90aGlzLmMucHVzaCh1KTp0aGlzLmM9W3VdO2Vsc2V7dmFyIGk9dGhpcy5zdGF0ZSxvPXRoaXMudjthKGZ1bmN0aW9uKCl7aSh1LG8pfSl9cmV0dXJuIG59fSx0LnJlc29sdmU9ZnVuY3Rpb24oZSl7aWYoZSYmZSBpbnN0YW5jZW9mIHQpcmV0dXJuIGU7dmFyIHI9bmV3IHQ7cmV0dXJuIHIucmVzb2x2ZShlKSxyfSx0LnJlamVjdD1mdW5jdGlvbihlKXtpZihlJiZlIGluc3RhbmNlb2YgdClyZXR1cm4gZTt2YXIgcj1uZXcgdDtyZXR1cm4gci5yZWplY3QoZSkscn0sdC52ZXJzaW9uPVwiMi4zLjMtbm9kZW50XCIsdH0pKCkpO3ZhciBhPXRoaXM7c3dpdGNoKHIpe2Nhc2UhMDpyZXR1cm4gbmV3IGUuVGhlbmFibGUobik7Y2FzZSAwOnJldHVybiBuZXcgZS5MYXp5VGhlbmFibGUobik7Y2FzZSB2b2lkIDA6cmV0dXJuIG4udGhlbj1uLG47ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGEuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKGUpe3JldHVybiByKGUpfX19fTt2YXIgdG9OdW1iZXI9X2RlZmF1bHQoW1tfZGVmYXVsdDIsX2RlZmF1bHQzXSxbX2RlZmF1bHQ0KE51bWJlciksX2RlZmF1bHQzXSxbX2RlZmF1bHQ1LGZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSl9XV0pLGlzV2l0aGluPV9kZWZhdWx0NihmdW5jdGlvbihlLHQscil7dmFyIG49X2RlZmF1bHQ0KE51bWJlcik7cmV0dXJuIG4oZSkmJm4odCkmJm4ocikmJl9kZWZhdWx0NyhyLGUpJiZfZGVmYXVsdDcodCxyKX0pLGlzSW52YWxpZENvbmZpZz1fZGVmYXVsdDgoW19kZWZhdWx0MixfZGVmYXVsdDksX2RlZmF1bHQxMChfZGVmYXVsdDExKFwiYmFzZVVSTFwiKSksX2RlZmF1bHQxMChfZGVmYXVsdDEyKFN0cmluZyxcImJhc2VVUkxcIikpLF9kZWZhdWx0MTMoX2RlZmF1bHQ5LFwiYmFzZVVSTFwiKV0pLGlzUHJvbWlzZT1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6X3R5cGVvZihlKSl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW59LERFRkFVTFRfSEVBREVSUz17QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwiLFwiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9LERFRkFVTFRfQ09ORklHPXt0aW1lb3V0OjB9LE5PTkU9bnVsbCxDTElFTlRfRVJST1I9XCJDTElFTlRfRVJST1JcIixTRVJWRVJfRVJST1I9XCJTRVJWRVJfRVJST1JcIixUSU1FT1VUX0VSUk9SPVwiVElNRU9VVF9FUlJPUlwiLENPTk5FQ1RJT05fRVJST1I9XCJDT05ORUNUSU9OX0VSUk9SXCIsTkVUV09SS19FUlJPUj1cIk5FVFdPUktfRVJST1JcIixVTktOT1dOX0VSUk9SPVwiVU5LTk9XTl9FUlJPUlwiLENBTkNFTF9FUlJPUj1cIkNBTkNFTF9FUlJPUlwiLFRJTUVPVVRfRVJST1JfQ09ERVM9W1wiRUNPTk5BQk9SVEVEXCJdLE5PREVKU19DT05ORUNUSU9OX0VSUk9SX0NPREVTPVtcIkVOT1RGT1VORFwiLFwiRUNPTk5SRUZVU0VEXCIsXCJFQ09OTlJFU0VUXCJdLGluMjAwcz1pc1dpdGhpbigyMDAsMjk5KSxpbjQwMHM9aXNXaXRoaW4oNDAwLDQ5OSksaW41MDBzPWlzV2l0aGluKDUwMCw1OTkpLHN0YXR1c05pbD1fZGVmYXVsdDE0KF9kZWZhdWx0MixfZGVmYXVsdDE1KHZvaWQgMCksX2RlZmF1bHQxNihcInN0YXR1c1wiKSksY3JlYXRlPWZ1bmN0aW9uKGUpe2lmKGlzSW52YWxpZENvbmZpZyhlKSl0aHJvdyBuZXcgRXJyb3IoXCJjb25maWcgbXVzdCBoYXZlIGEgYmFzZVVSTFwiKTt2YXIgdD1fZGVmYXVsdDE3KERFRkFVTFRfSEVBREVSUyxlLmhlYWRlcnN8fHt9KSxyPV9kZWZhdWx0MTcoREVGQVVMVF9DT05GSUcsX2RlZmF1bHQxOChcImhlYWRlcnNcIixlKSksbj1heGlvcy5jcmVhdGUociksYT1bXSx1PWZ1bmN0aW9uKGUpe2EucHVzaChlKX0saT1bXSxvPVtdLGY9W10scz1mdW5jdGlvbihlKXtyZXR1cm4gaS5wdXNoKGUpfSxsPWZ1bmN0aW9uKGUpe3JldHVybiBvLnB1c2goZSl9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGYucHVzaChlKX0sUj1mdW5jdGlvbihlLHIpe3JldHVybiB0W2VdPXIsbn0sZD1mdW5jdGlvbihlKXtyZXR1cm4gX2RlZmF1bHQxOShmdW5jdGlvbih0KXtyZXR1cm4gUih0LGVbdF0pfSxfZGVmYXVsdDIwKGUpKSxufSxfPWZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgdFtlXSxufSxFPWZ1bmN0aW9uKGUpe3JldHVybiBuLmRlZmF1bHRzLmJhc2VVUkw9ZSxufSxwPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdHMuYmFzZVVSTH0sTz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gTihfZGVmYXVsdDE3KHt1cmw6dCxwYXJhbXM6cixtZXRob2Q6ZX0sbikpfSxoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIE4oX2RlZmF1bHQxNyh7dXJsOnQsbWV0aG9kOmUsZGF0YTpyfSxuKSl9LE49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsYSl7ZnVuY3Rpb24gdSgpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZn1yZXR1cm4gYzxvLmxlbmd0aD8oUj1vW2NdKGUpLGlzUHJvbWlzZShSKT9SLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzKX0uJGFzeW5jYmluZCh0aGlzLGEpLGEpOlIoZSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMpfS4kYXN5bmNiaW5kKHRoaXMsYSksYSkpOlsxXX1mdW5jdGlvbiBmKCl7cmV0dXJuIGMrKyx1fWZ1bmN0aW9uIHMoKXtyZXR1cm4gbC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gZD1fZGVmYXVsdDIxKF9kZWZhdWx0MjIoVCxbdG9OdW1iZXIobmV3IERhdGUpXSkseSkscihuLnJlcXVlc3QoZSkudGhlbihkKS5jYXRjaChkKSl9dmFyIGMsUixkO3JldHVybiBlLmhlYWRlcnM9X2V4dGVuZHMoe30sdCxlLmhlYWRlcnMpLGkubGVuZ3RoPjAmJl9kZWZhdWx0MTkoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9LGkpLG8ubGVuZ3RoPjA/KGM9MCxGdW5jdGlvbi4kYXN5bmNiaW5kLnRyYW1wb2xpbmUodGhpcyxzLGYsYSwhMCkodSkpOmwuY2FsbCh0aGlzKX0uJGFzeW5jYmluZCh0aGlzKSl9LHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dChlKX1jYXRjaChlKXt9fSksZX0sVD1mdW5jdGlvbihlLHQpe3ZhciByPXRvTnVtYmVyKG5ldyBEYXRlKSxuPXItZSxhPXQgaW5zdGFuY2VvZiBFcnJvcnx8YXhpb3MuaXNDYW5jZWwodCksdT1hP3QucmVzcG9uc2U6dCxpPXUmJnUuc3RhdHVzfHxudWxsLG89YT9tKHQpOnYoaSkscz1pbjIwMHMoaSksbD10LmNvbmZpZ3x8bnVsbCxjPXUmJnUuaGVhZGVyc3x8bnVsbCxSPXUmJnUuZGF0YXx8bnVsbCxkPXtkdXJhdGlvbjpuLHByb2JsZW06byxvazpzLHN0YXR1czppLGhlYWRlcnM6Yyxjb25maWc6bCxkYXRhOlJ9O3JldHVybiBmLmxlbmd0aD4wJiZfZGVmYXVsdDE5KGZ1bmN0aW9uKGUpe3JldHVybiBlKGQpfSxmKSxkfSxtPWZ1bmN0aW9uKGUpe3JldHVyblwiTmV0d29yayBFcnJvclwiPT09ZS5tZXNzYWdlP05FVFdPUktfRVJST1I6YXhpb3MuaXNDYW5jZWwoZSk/Q0FOQ0VMX0VSUk9SOl9kZWZhdWx0KFtbX2RlZmF1bHQyLGZ1bmN0aW9uKCl7cmV0dXJuIHYoc3RhdHVzTmlsKGUucmVzcG9uc2UpKX1dLFtfZGVmYXVsdDIzKF9kZWZhdWx0MjQsVElNRU9VVF9FUlJPUl9DT0RFUyksX2RlZmF1bHQxNShUSU1FT1VUX0VSUk9SKV0sW19kZWZhdWx0MjMoX2RlZmF1bHQyNCxOT0RFSlNfQ09OTkVDVElPTl9FUlJPUl9DT0RFUyksX2RlZmF1bHQxNShDT05ORUNUSU9OX0VSUk9SKV0sW19kZWZhdWx0NSxfZGVmYXVsdDE1KFVOS05PV05fRVJST1IpXV0pKGUuY29kZSl9LHY9ZnVuY3Rpb24oZSl7cmV0dXJuIF9kZWZhdWx0KFtbX2RlZmF1bHQyLF9kZWZhdWx0MTUoVU5LTk9XTl9FUlJPUildLFtpbjIwMHMsX2RlZmF1bHQxNShOT05FKV0sW2luNDAwcyxfZGVmYXVsdDE1KENMSUVOVF9FUlJPUildLFtpbjUwMHMsX2RlZmF1bHQxNShTRVJWRVJfRVJST1IpXSxbX2RlZmF1bHQ1LF9kZWZhdWx0MTUoVU5LTk9XTl9FUlJPUildXSkoZSl9LEQ9e2F4aW9zSW5zdGFuY2U6bixtb25pdG9yczphLGFkZE1vbml0b3I6dSxyZXF1ZXN0VHJhbnNmb3JtczppLGFzeW5jUmVxdWVzdFRyYW5zZm9ybXM6byxyZXNwb25zZVRyYW5zZm9ybXM6ZixhZGRSZXF1ZXN0VHJhbnNmb3JtOnMsYWRkQXN5bmNSZXF1ZXN0VHJhbnNmb3JtOmwsYWRkUmVzcG9uc2VUcmFuc2Zvcm06YyxzZXRIZWFkZXI6UixzZXRIZWFkZXJzOmQsZGVsZXRlSGVhZGVyOl8saGVhZGVyczp0LHNldEJhc2VVUkw6RSxnZXRCYXNlVVJMOnAsZ2V0Ol9kZWZhdWx0MjIoTyxbXCJnZXRcIl0pLGRlbGV0ZTpfZGVmYXVsdDIyKE8sW1wiZGVsZXRlXCJdKSxoZWFkOl9kZWZhdWx0MjIoTyxbXCJoZWFkXCJdKSxwb3N0Ol9kZWZhdWx0MjIoaCxbXCJwb3N0XCJdKSxwdXQ6X2RlZmF1bHQyMihoLFtcInB1dFwiXSkscGF0Y2g6X2RlZmF1bHQyMihoLFtcInBhdGNoXCJdKSxsaW5rOl9kZWZhdWx0MjIoTyxbXCJsaW5rXCJdKSx1bmxpbms6X2RlZmF1bHQyMihPLFtcInVubGlua1wiXSl9O3JldHVybiBEfSxhcGlzYXVjZT17REVGQVVMVF9IRUFERVJTOkRFRkFVTFRfSEVBREVSUyxOT05FOk5PTkUsQ0xJRU5UX0VSUk9SOkNMSUVOVF9FUlJPUixTRVJWRVJfRVJST1I6U0VSVkVSX0VSUk9SLFRJTUVPVVRfRVJST1I6VElNRU9VVF9FUlJPUixDT05ORUNUSU9OX0VSUk9SOkNPTk5FQ1RJT05fRVJST1IsTkVUV09SS19FUlJPUjpORVRXT1JLX0VSUk9SLFVOS05PV05fRVJST1I6VU5LTk9XTl9FUlJPUixjcmVhdGU6Y3JlYXRlfTtleHBvcnRzLkRFRkFVTFRfSEVBREVSUz1ERUZBVUxUX0hFQURFUlMsZXhwb3J0cy5OT05FPU5PTkUsZXhwb3J0cy5DTElFTlRfRVJST1I9Q0xJRU5UX0VSUk9SLGV4cG9ydHMuU0VSVkVSX0VSUk9SPVNFUlZFUl9FUlJPUixleHBvcnRzLlRJTUVPVVRfRVJST1I9VElNRU9VVF9FUlJPUixleHBvcnRzLkNPTk5FQ1RJT05fRVJST1I9Q09OTkVDVElPTl9FUlJPUixleHBvcnRzLk5FVFdPUktfRVJST1I9TkVUV09SS19FUlJPUixleHBvcnRzLlVOS05PV05fRVJST1I9VU5LTk9XTl9FUlJPUixleHBvcnRzLkNBTkNFTF9FUlJPUj1DQU5DRUxfRVJST1IsZXhwb3J0cy5jcmVhdGU9Y3JlYXRlLGV4cG9ydHMuZGVmYXVsdD1hcGlzYXVjZTtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgYmFzZU1hcCA9IHJlcXVpcmUoJy4vX2Jhc2VNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnVcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gKlxuICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsXG4gKiBgc2FtcGxlU2l6ZWAsIGBzbGljZWAsIGBzb21lYCwgYHNvcnRCeWAsIGBzcGxpdGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF1cbiAqXG4gKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gKiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gKi9cbmZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcDtcbiIsIi8qKlxuICogVGhlIGludmVyc2Ugb2YgYF8udG9QYWlyc2A7IHRoaXMgbWV0aG9kIHJldHVybnMgYW4gb2JqZWN0IGNvbXBvc2VkXG4gKiBmcm9tIGtleS12YWx1ZSBgcGFpcnNgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIGtleS12YWx1ZSBwYWlycy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZnJvbVBhaXJzKFtbJ2EnLCAxXSwgWydiJywgMl1dKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG5mdW5jdGlvbiBmcm9tUGFpcnMocGFpcnMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYWlycyA9PSBudWxsID8gMCA6IHBhaXJzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgcmVzdWx0W3BhaXJbMF1dID0gcGFpclsxXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZyb21QYWlycztcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgYmFzZUZpbHRlciA9IHJlcXVpcmUoJy4vX2Jhc2VGaWx0ZXInKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIENvbWJpbmluZyBzZXZlcmFsIHByZWRpY2F0ZXMgdXNpbmcgYF8ub3ZlckV2ZXJ5YCBvciBgXy5vdmVyU29tZWAuXG4gKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAnYmFybmV5J11cbiAqL1xuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaWx0ZXI7XG4iLCJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBgdmFsdWVgIGlzIGZvdW5kIGluIGBhcnJheWBcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXMgdGhlXG4gKiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmRleE9mO1xuIiwidmFyIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICpcbiAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICogcHJvcGVydGllcy5cbiAqXG4gKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbXB0eShudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkodHJ1ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUuc3BsaWNlID09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5zaXplO1xuICB9XG4gIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFbXB0eTtcbiIsIiFmdW5jdGlvbihyLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOihyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6cnx8c2VsZikuZGF5anNfcGx1Z2luX3JlbGF0aXZlVGltZT1lKCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKHIsZSx0KXtyPXJ8fHt9O3ZhciBuPWUucHJvdG90eXBlLG89e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9O2Z1bmN0aW9uIGkocixlLHQsbyl7cmV0dXJuIG4uZnJvbVRvQmFzZShyLGUsdCxvKX10LmVuLnJlbGF0aXZlVGltZT1vLG4uZnJvbVRvQmFzZT1mdW5jdGlvbihlLG4saSxkLHUpe2Zvcih2YXIgZixhLHMsbD1pLiRsb2NhbGUoKS5yZWxhdGl2ZVRpbWV8fG8saD1yLnRocmVzaG9sZHN8fFt7bDpcInNcIixyOjQ0LGQ6XCJzZWNvbmRcIn0se2w6XCJtXCIscjo4OX0se2w6XCJtbVwiLHI6NDQsZDpcIm1pbnV0ZVwifSx7bDpcImhcIixyOjg5fSx7bDpcImhoXCIscjoyMSxkOlwiaG91clwifSx7bDpcImRcIixyOjM1fSx7bDpcImRkXCIscjoyNSxkOlwiZGF5XCJ9LHtsOlwiTVwiLHI6NDV9LHtsOlwiTU1cIixyOjEwLGQ6XCJtb250aFwifSx7bDpcInlcIixyOjE3fSx7bDpcInl5XCIsZDpcInllYXJcIn1dLG09aC5sZW5ndGgsYz0wO2M8bTtjKz0xKXt2YXIgeT1oW2NdO3kuZCYmKGY9ZD90KGUpLmRpZmYoaSx5LmQsITApOmkuZGlmZihlLHkuZCwhMCkpO3ZhciBwPShyLnJvdW5kaW5nfHxNYXRoLnJvdW5kKShNYXRoLmFicyhmKSk7aWYocz1mPjAscDw9eS5yfHwheS5yKXtwPD0xJiZjPjAmJih5PWhbYy0xXSk7dmFyIHY9bFt5LmxdO3UmJihwPXUoXCJcIitwKSksYT1cInN0cmluZ1wiPT10eXBlb2Ygdj92LnJlcGxhY2UoXCIlZFwiLHApOnYocCxuLHkubCxzKTticmVha319aWYobilyZXR1cm4gYTt2YXIgTT1zP2wuZnV0dXJlOmwucGFzdDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBNP00oYSk6TS5yZXBsYWNlKFwiJXNcIixhKX0sbi50bz1mdW5jdGlvbihyLGUpe3JldHVybiBpKHIsZSx0aGlzLCEwKX0sbi5mcm9tPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIGkocixlLHRoaXMpfTt2YXIgZD1mdW5jdGlvbihyKXtyZXR1cm4gci4kdT90LnV0YygpOnQoKX07bi50b05vdz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy50byhkKHRoaXMpLHIpfSxuLmZyb21Ob3c9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZnJvbShkKHRoaXMpLHIpfX19KSk7IiwiIWZ1bmN0aW9uKHQsaSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9aSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoaSk6KHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5fdXRjPWkoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD1cIm1pbnV0ZVwiLGk9L1srLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2csZT0vKFsrLV18XFxkXFxkKS9nO3JldHVybiBmdW5jdGlvbihzLGYsbil7dmFyIHU9Zi5wcm90b3R5cGU7bi51dGM9ZnVuY3Rpb24odCl7dmFyIGk9e2RhdGU6dCx1dGM6ITAsYXJnczphcmd1bWVudHN9O3JldHVybiBuZXcgZihpKX0sdS51dGM9ZnVuY3Rpb24oaSl7dmFyIGU9bih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITB9KTtyZXR1cm4gaT9lLmFkZCh0aGlzLnV0Y09mZnNldCgpLHQpOmV9LHUubG9jYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITF9KX07dmFyIHI9dS5wYXJzZTt1LnBhcnNlPWZ1bmN0aW9uKHQpe3QudXRjJiYodGhpcy4kdT0hMCksdGhpcy4kdXRpbHMoKS51KHQuJG9mZnNldCl8fCh0aGlzLiRvZmZzZXQ9dC4kb2Zmc2V0KSxyLmNhbGwodGhpcyx0KX07dmFyIG89dS5pbml0O3UuaW5pdD1mdW5jdGlvbigpe2lmKHRoaXMuJHUpe3ZhciB0PXRoaXMuJGQ7dGhpcy4keT10LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy4kTT10LmdldFVUQ01vbnRoKCksdGhpcy4kRD10LmdldFVUQ0RhdGUoKSx0aGlzLiRXPXQuZ2V0VVRDRGF5KCksdGhpcy4kSD10LmdldFVUQ0hvdXJzKCksdGhpcy4kbT10LmdldFVUQ01pbnV0ZXMoKSx0aGlzLiRzPXQuZ2V0VVRDU2Vjb25kcygpLHRoaXMuJG1zPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9ZWxzZSBvLmNhbGwodGhpcyl9O3ZhciBhPXUudXRjT2Zmc2V0O3UudXRjT2Zmc2V0PWZ1bmN0aW9uKHMsZil7dmFyIG49dGhpcy4kdXRpbHMoKS51O2lmKG4ocykpcmV0dXJuIHRoaXMuJHU/MDpuKHRoaXMuJG9mZnNldCk/YS5jYWxsKHRoaXMpOnRoaXMuJG9mZnNldDtpZihcInN0cmluZ1wiPT10eXBlb2YgcyYmKHM9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9XCJcIik7dmFyIHM9dC5tYXRjaChpKTtpZighcylyZXR1cm4gbnVsbDt2YXIgZj0oXCJcIitzWzBdKS5tYXRjaChlKXx8W1wiLVwiLDAsMF0sbj1mWzBdLHU9NjAqK2ZbMV0rICtmWzJdO3JldHVybiAwPT09dT8wOlwiK1wiPT09bj91Oi11fShzKSxudWxsPT09cykpcmV0dXJuIHRoaXM7dmFyIHU9TWF0aC5hYnMocyk8PTE2PzYwKnM6cztpZigwPT09dSlyZXR1cm4gdGhpcy51dGMoZik7dmFyIHI9dGhpcy5jbG9uZSgpO2lmKGYpcmV0dXJuIHIuJG9mZnNldD11LHIuJHU9ITEscjt2YXIgbz10aGlzLiR1P3RoaXMudG9EYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTotMSp0aGlzLnV0Y09mZnNldCgpO3JldHVybihyPXRoaXMubG9jYWwoKS5hZGQodStvLHQpKS4kb2Zmc2V0PXUsci4keC4kbG9jYWxPZmZzZXQ9byxyfTt2YXIgaD11LmZvcm1hdDt1LmZvcm1hdD1mdW5jdGlvbih0KXt2YXIgaT10fHwodGhpcy4kdT9cIllZWVktTU0tRERUSEg6bW06c3NbWl1cIjpcIlwiKTtyZXR1cm4gaC5jYWxsKHRoaXMsaSl9LHUudmFsdWVPZj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJHV0aWxzKCkudSh0aGlzLiRvZmZzZXQpPzA6dGhpcy4kb2Zmc2V0Kyh0aGlzLiR4LiRsb2NhbE9mZnNldHx8dGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpKTtyZXR1cm4gdGhpcy4kZC52YWx1ZU9mKCktNmU0KnR9LHUuaXNVVEM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuJHV9LHUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfSx1LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9VVENTdHJpbmcoKX07dmFyIGw9dS50b0RhdGU7dS50b0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuXCJzXCI9PT10JiZ0aGlzLiRvZmZzZXQ/bih0aGlzLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3M6U1NTXCIpKS50b0RhdGUoKTpsLmNhbGwodGhpcyl9O3ZhciBjPXUuZGlmZjt1LmRpZmY9ZnVuY3Rpb24odCxpLGUpe2lmKHQmJnRoaXMuJHU9PT10LiR1KXJldHVybiBjLmNhbGwodGhpcyx0LGksZSk7dmFyIHM9dGhpcy5sb2NhbCgpLGY9bih0KS5sb2NhbCgpO3JldHVybiBjLmNhbGwocyxmLGksZSl9fX0pKTsiLCJ2YXIgY3JlYXRlQ2FzZUZpcnN0ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ2FzZUZpcnN0Jyk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAqIC8vID0+ICdGcmVkJ1xuICpcbiAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICogLy8gPT4gJ0ZSRUQnXG4gKi9cbnZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVwcGVyRmlyc3Q7XG4iLCJ2YXIgY3JlYXRlUmFuZ2UgPSByZXF1aXJlKCcuL19jcmVhdGVSYW5nZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gKlxuICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yYW5nZSg0KTtcbiAqIC8vID0+IFswLCAxLCAyLCAzXVxuICpcbiAqIF8ucmFuZ2UoLTQpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICpcbiAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAqXG4gKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDQsIDApO1xuICogLy8gPT4gWzEsIDEsIDFdXG4gKlxuICogXy5yYW5nZSgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmFuZ2U7XG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcbiIsIi8qKlxuICogQSBzcGVjaWFsIHBsYWNlaG9sZGVyIHZhbHVlIHVzZWQgdG8gc3BlY2lmeSBcImdhcHNcIiB3aXRoaW4gY3VycmllZCBmdW5jdGlvbnMsXG4gKiBhbGxvd2luZyBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMsIHJlZ2FyZGxlc3Mgb2ZcbiAqIHRoZWlyIHBvc2l0aW9ucy5cbiAqXG4gKiBJZiBgZ2AgaXMgYSBjdXJyaWVkIHRlcm5hcnkgZnVuY3Rpb24gYW5kIGBfYCBpcyBgUi5fX2AsIHRoZSBmb2xsb3dpbmcgYXJlXG4gKiBlcXVpdmFsZW50OlxuICpcbiAqICAgLSBgZygxLCAyLCAzKWBcbiAqICAgLSBgZyhfLCAyLCAzKSgxKWBcbiAqICAgLSBgZyhfLCBfLCAzKSgxKSgyKWBcbiAqICAgLSBgZyhfLCBfLCAzKSgxLCAyKWBcbiAqICAgLSBgZyhfLCAyLCBfKSgxLCAzKWBcbiAqICAgLSBgZyhfLCAyKSgxKSgzKWBcbiAqICAgLSBgZyhfLCAyKSgxLCAzKWBcbiAqICAgLSBgZyhfLCAyKShfLCAzKSgxKWBcbiAqXG4gKiBAY29uc3RhbnRcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgZ3JlZXQgPSBSLnJlcGxhY2UoJ3tuYW1lfScsIFIuX18sICdIZWxsbywge25hbWV9IScpO1xuICogICAgICBncmVldCgnQWxpY2UnKTsgLy89PiAnSGVsbG8sIEFsaWNlISdcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7J0BAZnVuY3Rpb25hbC9wbGFjZWhvbGRlcic6IHRydWV9O1xuIiwidmFyIF9jb250YWlucyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NvbnRhaW5zJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBlcXVhbCwgaW4gYFIuZXF1YWxzYCB0ZXJtcywgdG8gYXRcbiAqIGxlYXN0IG9uZSBlbGVtZW50IG9mIHRoZSBnaXZlbiBsaXN0OyBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIGEgLT4gW2FdIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBpdGVtIHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgVGhlIGFycmF5IHRvIGNvbnNpZGVyLlxuICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIGFuIGVxdWl2YWxlbnQgaXRlbSBpcyBpbiB0aGUgbGlzdCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAc2VlIFIuYW55XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5jb250YWlucygzLCBbMSwgMiwgM10pOyAvLz0+IHRydWVcbiAqICAgICAgUi5jb250YWlucyg0LCBbMSwgMiwgM10pOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuY29udGFpbnMoeyBuYW1lOiAnRnJlZCcgfSwgW3sgbmFtZTogJ0ZyZWQnIH1dKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuY29udGFpbnMoWzQyXSwgW1s0Ml1dKTsgLy89PiB0cnVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihfY29udGFpbnMpO1xuIiwidmFyIF9pbmRleE9mID0gcmVxdWlyZSgnLi9faW5kZXhPZicpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2NvbnRhaW5zKGEsIGxpc3QpIHtcbiAgcmV0dXJuIF9pbmRleE9mKGxpc3QsIGEsIDApID49IDA7XG59O1xuIiwidmFyIGVxdWFscyA9IHJlcXVpcmUoJy4uL2VxdWFscycpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2luZGV4T2YobGlzdCwgYSwgaWR4KSB7XG4gIHZhciBpbmYsIGl0ZW07XG4gIC8vIEFycmF5LnByb3RvdHlwZS5pbmRleE9mIGRvZXNuJ3QgZXhpc3QgYmVsb3cgSUU5XG4gIGlmICh0eXBlb2YgbGlzdC5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgYSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaWYgKGEgPT09IDApIHtcbiAgICAgICAgICAvLyBtYW51YWxseSBjcmF3bCB0aGUgbGlzdCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuICswIGFuZCAtMFxuICAgICAgICAgIGluZiA9IDEgLyBhO1xuICAgICAgICAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlbSA9IGxpc3RbaWR4XTtcbiAgICAgICAgICAgIGlmIChpdGVtID09PSAwICYmIDEgLyBpdGVtID09PSBpbmYpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkeCArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAoYSAhPT0gYSkge1xuICAgICAgICAgIC8vIE5hTlxuICAgICAgICAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlbSA9IGxpc3RbaWR4XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgJiYgaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWR4ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub24temVybyBudW1iZXJzIGNhbiB1dGlsaXNlIFNldFxuICAgICAgICByZXR1cm4gbGlzdC5pbmRleE9mKGEsIGlkeCk7XG5cbiAgICAgIC8vIGFsbCB0aGVzZSB0eXBlcyBjYW4gdXRpbGlzZSBTZXRcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiBsaXN0LmluZGV4T2YoYSwgaWR4KTtcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKGEgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBudWxsIGNhbiB1dGlsaXNlIFNldFxuICAgICAgICAgIHJldHVybiBsaXN0LmluZGV4T2YoYSwgaWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBhbnl0aGluZyBlbHNlIG5vdCBjb3ZlcmVkIGFib3ZlLCBkZWZlciB0byBSLmVxdWFsc1xuICB3aGlsZSAoaWR4IDwgbGlzdC5sZW5ndGgpIHtcbiAgICBpZiAoZXF1YWxzKGxpc3RbaWR4XSwgYSkpIHtcbiAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICAgIGlkeCArPSAxO1xuICB9XG4gIHJldHVybiAtMTtcbn07XG4iLCJ2YXIgX2FycmF5RnJvbUl0ZXJhdG9yID0gcmVxdWlyZSgnLi9fYXJyYXlGcm9tSXRlcmF0b3InKTtcbnZhciBfZnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi9fZnVuY3Rpb25OYW1lJyk7XG52YXIgX2hhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGlkZW50aWNhbCA9IHJlcXVpcmUoJy4uL2lkZW50aWNhbCcpO1xudmFyIGtleXMgPSByZXF1aXJlKCcuLi9rZXlzJyk7XG52YXIgdHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9lcXVhbHMoYSwgYiwgc3RhY2tBLCBzdGFja0IpIHtcbiAgaWYgKGlkZW50aWNhbChhLCBiKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGUoYSkgIT09IHR5cGUoYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYS5lcXVhbHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGIuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJyAmJiBhLmVxdWFscyhiKSAmJlxuICAgICAgICAgICB0eXBlb2YgYi5lcXVhbHMgPT09ICdmdW5jdGlvbicgJiYgYi5lcXVhbHMoYSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUoYSkpIHtcbiAgICBjYXNlICdBcmd1bWVudHMnOlxuICAgIGNhc2UgJ0FycmF5JzpcbiAgICBjYXNlICdPYmplY3QnOlxuICAgICAgaWYgKHR5cGVvZiBhLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgX2Z1bmN0aW9uTmFtZShhLmNvbnN0cnVjdG9yKSA9PT0gJ1Byb21pc2UnKSB7XG4gICAgICAgIHJldHVybiBhID09PSBiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQm9vbGVhbic6XG4gICAgY2FzZSAnTnVtYmVyJzpcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgaWYgKCEodHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGlkZW50aWNhbChhLnZhbHVlT2YoKSwgYi52YWx1ZU9mKCkpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIGlmICghaWRlbnRpY2FsKGEudmFsdWVPZigpLCBiLnZhbHVlT2YoKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRXJyb3InOlxuICAgICAgcmV0dXJuIGEubmFtZSA9PT0gYi5uYW1lICYmIGEubWVzc2FnZSA9PT0gYi5tZXNzYWdlO1xuICAgIGNhc2UgJ1JlZ0V4cCc6XG4gICAgICBpZiAoIShhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiZcbiAgICAgICAgICAgIGEuZ2xvYmFsID09PSBiLmdsb2JhbCAmJlxuICAgICAgICAgICAgYS5pZ25vcmVDYXNlID09PSBiLmlnbm9yZUNhc2UgJiZcbiAgICAgICAgICAgIGEubXVsdGlsaW5lID09PSBiLm11bHRpbGluZSAmJlxuICAgICAgICAgICAgYS5zdGlja3kgPT09IGIuc3RpY2t5ICYmXG4gICAgICAgICAgICBhLnVuaWNvZGUgPT09IGIudW5pY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnTWFwJzpcbiAgICBjYXNlICdTZXQnOlxuICAgICAgaWYgKCFfZXF1YWxzKF9hcnJheUZyb21JdGVyYXRvcihhLmVudHJpZXMoKSksIF9hcnJheUZyb21JdGVyYXRvcihiLmVudHJpZXMoKSksIHN0YWNrQSwgc3RhY2tCKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdJbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4Q2xhbXBlZEFycmF5JzpcbiAgICBjYXNlICdJbnQxNkFycmF5JzpcbiAgICBjYXNlICdVaW50MTZBcnJheSc6XG4gICAgY2FzZSAnSW50MzJBcnJheSc6XG4gICAgY2FzZSAnVWludDMyQXJyYXknOlxuICAgIGNhc2UgJ0Zsb2F0MzJBcnJheSc6XG4gICAgY2FzZSAnRmxvYXQ2NEFycmF5JzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWYWx1ZXMgb2Ygb3RoZXIgdHlwZXMgYXJlIG9ubHkgZXF1YWwgaWYgaWRlbnRpY2FsLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0ga2V5cyhhKTtcbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5cyhiKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaWR4ID0gc3RhY2tBLmxlbmd0aCAtIDE7XG4gIHdoaWxlIChpZHggPj0gMCkge1xuICAgIGlmIChzdGFja0FbaWR4XSA9PT0gYSkge1xuICAgICAgcmV0dXJuIHN0YWNrQltpZHhdID09PSBiO1xuICAgIH1cbiAgICBpZHggLT0gMTtcbiAgfVxuXG4gIHN0YWNrQS5wdXNoKGEpO1xuICBzdGFja0IucHVzaChiKTtcbiAgaWR4ID0ga2V5c0EubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKGlkeCA+PSAwKSB7XG4gICAgdmFyIGtleSA9IGtleXNBW2lkeF07XG4gICAgaWYgKCEoX2hhcyhrZXksIGIpICYmIF9lcXVhbHMoYltrZXldLCBhW2tleV0sIHN0YWNrQSwgc3RhY2tCKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWR4IC09IDE7XG4gIH1cbiAgc3RhY2tBLnBvcCgpO1xuICBzdGFja0IucG9wKCk7XG4gIHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2FycmF5RnJvbUl0ZXJhdG9yKGl0ZXIpIHtcbiAgdmFyIGxpc3QgPSBbXTtcbiAgdmFyIG5leHQ7XG4gIHdoaWxlICghKG5leHQgPSBpdGVyLm5leHQoKSkuZG9uZSkge1xuICAgIGxpc3QucHVzaChuZXh0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gbGlzdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9mdW5jdGlvbk5hbWUoZikge1xuICAvLyBTdHJpbmcoeCA9PiB4KSBldmFsdWF0ZXMgdG8gXCJ4ID0+IHhcIiwgc28gdGhlIHBhdHRlcm4gbWF5IG5vdCBtYXRjaC5cbiAgdmFyIG1hdGNoID0gU3RyaW5nKGYpLm1hdGNoKC9eZnVuY3Rpb24gKFxcdyopLyk7XG4gIHJldHVybiBtYXRjaCA9PSBudWxsID8gJycgOiBtYXRjaFsxXTtcbn07XG4iLCJ2YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGl0cyBhcmd1bWVudHMgYXJlIGlkZW50aWNhbCwgZmFsc2Ugb3RoZXJ3aXNlLiBWYWx1ZXMgYXJlXG4gKiBpZGVudGljYWwgaWYgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUgbWVtb3J5LiBgTmFOYCBpcyBpZGVudGljYWwgdG8gYE5hTmA7XG4gKiBgMGAgYW5kIGAtMGAgYXJlIG5vdCBpZGVudGljYWwuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTUuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIGEgLT4gYSAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgbyA9IHt9O1xuICogICAgICBSLmlkZW50aWNhbChvLCBvKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaWRlbnRpY2FsKDEsIDEpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pZGVudGljYWwoMSwgJzEnKTsgLy89PiBmYWxzZVxuICogICAgICBSLmlkZW50aWNhbChbXSwgW10pOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaWRlbnRpY2FsKDAsIC0wKTsgLy89PiBmYWxzZVxuICogICAgICBSLmlkZW50aWNhbChOYU4sIE5hTik7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gaWRlbnRpY2FsKGEsIGIpIHtcbiAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICBpZiAoYSA9PT0gYikgeyAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgfSBlbHNlIHtcbiAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgIHJldHVybiBhICE9PSBhICYmIGIgIT09IGI7XG4gIH1cbn0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIEdpdmVzIGEgc2luZ2xlLXdvcmQgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSAobmF0aXZlKSB0eXBlIG9mIGEgdmFsdWUsXG4gKiByZXR1cm5pbmcgc3VjaCBhbnN3ZXJzIGFzICdPYmplY3QnLCAnTnVtYmVyJywgJ0FycmF5Jywgb3IgJ051bGwnLiBEb2VzIG5vdFxuICogYXR0ZW1wdCB0byBkaXN0aW5ndWlzaCB1c2VyIE9iamVjdCB0eXBlcyBhbnkgZnVydGhlciwgcmVwb3J0aW5nIHRoZW0gYWxsIGFzXG4gKiAnT2JqZWN0Jy5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC44LjBcbiAqIEBjYXRlZ29yeSBUeXBlXG4gKiBAc2lnICgqIC0+IHsqfSkgLT4gU3RyaW5nXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIudHlwZSh7fSk7IC8vPT4gXCJPYmplY3RcIlxuICogICAgICBSLnR5cGUoMSk7IC8vPT4gXCJOdW1iZXJcIlxuICogICAgICBSLnR5cGUoZmFsc2UpOyAvLz0+IFwiQm9vbGVhblwiXG4gKiAgICAgIFIudHlwZSgncycpOyAvLz0+IFwiU3RyaW5nXCJcbiAqICAgICAgUi50eXBlKG51bGwpOyAvLz0+IFwiTnVsbFwiXG4gKiAgICAgIFIudHlwZShbXSk7IC8vPT4gXCJBcnJheVwiXG4gKiAgICAgIFIudHlwZSgvW0Etel0vKTsgLy89PiBcIlJlZ0V4cFwiXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShmdW5jdGlvbiB0eXBlKHZhbCkge1xuICByZXR1cm4gdmFsID09PSBudWxsICAgICAgPyAnTnVsbCcgICAgICA6XG4gICAgICAgICB2YWwgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDpcbiAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpLnNsaWNlKDgsIC0xKTtcbn0pO1xuIiwidmFyIF9jb25jYXQgPSByZXF1aXJlKCcuL2ludGVybmFsL19jb25jYXQnKTtcbnZhciBfY3JlYXRlUGFydGlhbEFwcGxpY2F0b3IgPSByZXF1aXJlKCcuL2ludGVybmFsL19jcmVhdGVQYXJ0aWFsQXBwbGljYXRvcicpO1xuXG5cbi8qKlxuICogVGFrZXMgYSBmdW5jdGlvbiBgZmAgYW5kIGEgbGlzdCBvZiBhcmd1bWVudHMsIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gYGdgLlxuICogV2hlbiBhcHBsaWVkLCBgZ2AgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGBmYCB0byB0aGUgYXJndW1lbnRzXG4gKiBwcm92aWRlZCBpbml0aWFsbHkgZm9sbG93ZWQgYnkgdGhlIGFyZ3VtZW50cyBwcm92aWRlZCB0byBgZ2AuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICgoYSwgYiwgYywgLi4uLCBuKSAtPiB4KSAtPiBbYSwgYiwgYywgLi4uXSAtPiAoKGQsIGUsIGYsIC4uLiwgbikgLT4geClcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQHNlZSBSLnBhcnRpYWxSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBtdWx0aXBseTIgPSAoYSwgYikgPT4gYSAqIGI7XG4gKiAgICAgIHZhciBkb3VibGUgPSBSLnBhcnRpYWwobXVsdGlwbHkyLCBbMl0pO1xuICogICAgICBkb3VibGUoMik7IC8vPT4gNFxuICpcbiAqICAgICAgdmFyIGdyZWV0ID0gKHNhbHV0YXRpb24sIHRpdGxlLCBmaXJzdE5hbWUsIGxhc3ROYW1lKSA9PlxuICogICAgICAgIHNhbHV0YXRpb24gKyAnLCAnICsgdGl0bGUgKyAnICcgKyBmaXJzdE5hbWUgKyAnICcgKyBsYXN0TmFtZSArICchJztcbiAqXG4gKiAgICAgIHZhciBzYXlIZWxsbyA9IFIucGFydGlhbChncmVldCwgWydIZWxsbyddKTtcbiAqICAgICAgdmFyIHNheUhlbGxvVG9NcyA9IFIucGFydGlhbChzYXlIZWxsbywgWydNcy4nXSk7XG4gKiAgICAgIHNheUhlbGxvVG9NcygnSmFuZScsICdKb25lcycpOyAvLz0+ICdIZWxsbywgTXMuIEphbmUgSm9uZXMhJ1xuICogQHN5bWIgUi5wYXJ0aWFsKGYsIFthLCBiXSkoYywgZCkgPSBmKGEsIGIsIGMsIGQpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZVBhcnRpYWxBcHBsaWNhdG9yKF9jb25jYXQpO1xuIiwidmFyIF9hcml0eSA9IHJlcXVpcmUoJy4vX2FyaXR5Jyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vX2N1cnJ5MicpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2NyZWF0ZVBhcnRpYWxBcHBsaWNhdG9yKGNvbmNhdCkge1xuICByZXR1cm4gX2N1cnJ5MihmdW5jdGlvbihmbiwgYXJncykge1xuICAgIHJldHVybiBfYXJpdHkoTWF0aC5tYXgoMCwgZm4ubGVuZ3RoIC0gYXJncy5sZW5ndGgpLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBjb25jYXQoYXJncywgYXJndW1lbnRzKSk7XG4gICAgfSk7XG4gIH0pO1xufTtcbiIsInZhciBfYXJpdHkgPSByZXF1aXJlKCcuL2ludGVybmFsL19hcml0eScpO1xudmFyIF9waXBlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fcGlwZScpO1xudmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4vcmVkdWNlJyk7XG52YXIgdGFpbCA9IHJlcXVpcmUoJy4vdGFpbCcpO1xuXG5cbi8qKlxuICogUGVyZm9ybXMgbGVmdC10by1yaWdodCBmdW5jdGlvbiBjb21wb3NpdGlvbi4gVGhlIGxlZnRtb3N0IGZ1bmN0aW9uIG1heSBoYXZlXG4gKiBhbnkgYXJpdHk7IHRoZSByZW1haW5pbmcgZnVuY3Rpb25zIG11c3QgYmUgdW5hcnkuXG4gKlxuICogSW4gc29tZSBsaWJyYXJpZXMgdGhpcyBmdW5jdGlvbiBpcyBuYW1lZCBgc2VxdWVuY2VgLlxuICpcbiAqICoqTm90ZToqKiBUaGUgcmVzdWx0IG9mIHBpcGUgaXMgbm90IGF1dG9tYXRpY2FsbHkgY3VycmllZC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyAoKChhLCBiLCAuLi4sIG4pIC0+IG8pLCAobyAtPiBwKSwgLi4uLCAoeCAtPiB5KSwgKHkgLT4geikpIC0+ICgoYSwgYiwgLi4uLCBuKSAtPiB6KVxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gZnVuY3Rpb25zXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBzZWUgUi5jb21wb3NlXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGYgPSBSLnBpcGUoTWF0aC5wb3csIFIubmVnYXRlLCBSLmluYyk7XG4gKlxuICogICAgICBmKDMsIDQpOyAvLyAtKDNeNCkgKyAxXG4gKiBAc3ltYiBSLnBpcGUoZiwgZywgaCkoYSwgYikgPSBoKGcoZihhLCBiKSkpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGlwZSgpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BpcGUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50Jyk7XG4gIH1cbiAgcmV0dXJuIF9hcml0eShhcmd1bWVudHNbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHJlZHVjZShfcGlwZSwgYXJndW1lbnRzWzBdLCB0YWlsKGFyZ3VtZW50cykpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9waXBlKGYsIGcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBnLmNhbGwodGhpcywgZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gWFdyYXAoZm4pIHtcbiAgICB0aGlzLmYgPSBmbjtcbiAgfVxuICBYV3JhcC5wcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9pbml0J10gPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luaXQgbm90IGltcGxlbWVudGVkIG9uIFhXcmFwJyk7XG4gIH07XG4gIFhXcmFwLnByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddID0gZnVuY3Rpb24oYWNjKSB7IHJldHVybiBhY2M7IH07XG4gIFhXcmFwLnByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3N0ZXAnXSA9IGZ1bmN0aW9uKGFjYywgeCkge1xuICAgIHJldHVybiB0aGlzLmYoYWNjLCB4KTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gX3h3cmFwKGZuKSB7IHJldHVybiBuZXcgWFdyYXAoZm4pOyB9O1xufSgpKTtcbiIsInZhciBfYXJpdHkgPSByZXF1aXJlKCcuL2ludGVybmFsL19hcml0eScpO1xudmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGlzIGJvdW5kIHRvIGEgY29udGV4dC5cbiAqIE5vdGU6IGBSLmJpbmRgIGRvZXMgbm90IHByb3ZpZGUgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnQtYmluZGluZyBjYXBhYmlsaXRpZXMgb2ZcbiAqIFtGdW5jdGlvbi5wcm90b3R5cGUuYmluZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZCkuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBzaWcgKCogLT4gKikgLT4geyp9IC0+ICgqIC0+ICopXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gYmluZCB0byBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc09iaiBUaGUgY29udGV4dCB0byBiaW5kIGBmbmAgdG9cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBleGVjdXRlIGluIHRoZSBjb250ZXh0IG9mIGB0aGlzT2JqYC5cbiAqIEBzZWUgUi5wYXJ0aWFsXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGxvZyA9IFIuYmluZChjb25zb2xlLmxvZywgY29uc29sZSk7XG4gKiAgICAgIFIucGlwZShSLmFzc29jKCdhJywgMiksIFIudGFwKGxvZyksIFIuYXNzb2MoJ2EnLCAzKSkoe2E6IDF9KTsgLy89PiB7YTogM31cbiAqICAgICAgLy8gbG9ncyB7YTogMn1cbiAqIEBzeW1iIFIuYmluZChmLCBvKShhLCBiKSA9IGYuY2FsbChvLCBhLCBiKVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gYmluZChmbiwgdGhpc09iaikge1xuICByZXR1cm4gX2FyaXR5KGZuLmxlbmd0aCwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNPYmosIGFyZ3VtZW50cyk7XG4gIH0pO1xufSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIF9pc0FycmF5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNBcnJheScpO1xudmFyIF9pc1N0cmluZyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lzU3RyaW5nJyk7XG5cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCBhbiBvYmplY3QgaXMgc2ltaWxhciB0byBhbiBhcnJheS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC41LjBcbiAqIEBjYXRlZ29yeSBUeXBlXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyAqIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0geCBUaGUgb2JqZWN0IHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYHhgIGhhcyBhIG51bWVyaWMgbGVuZ3RoIHByb3BlcnR5IGFuZCBleHRyZW1lIGluZGljZXMgZGVmaW5lZDsgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2MC4yMy4wXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5pc0FycmF5TGlrZShbXSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzQXJyYXlMaWtlKHRydWUpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXNBcnJheUxpa2Uoe30pOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXNBcnJheUxpa2Uoe2xlbmd0aDogMTB9KTsgLy89PiBmYWxzZVxuICogICAgICBSLmlzQXJyYXlMaWtlKHswOiAnemVybycsIDk6ICduaW5lJywgbGVuZ3RoOiAxMH0pOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHgpIHtcbiAgaWYgKF9pc0FycmF5KHgpKSB7IHJldHVybiB0cnVlOyB9XG4gIGlmICgheCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKHR5cGVvZiB4ICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKF9pc1N0cmluZyh4KSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKHgubm9kZVR5cGUgPT09IDEpIHsgcmV0dXJuICEheC5sZW5ndGg7IH1cbiAgaWYgKHgubGVuZ3RoID09PSAwKSB7IHJldHVybiB0cnVlOyB9XG4gIGlmICh4Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geC5oYXNPd25Qcm9wZXJ0eSgwKSAmJiB4Lmhhc093blByb3BlcnR5KHgubGVuZ3RoIC0gMSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSk7XG4iLCJ2YXIgX2NoZWNrRm9yTWV0aG9kID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY2hlY2tGb3JNZXRob2QnKTtcbnZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgc2xpY2UgPSByZXF1aXJlKCcuL3NsaWNlJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGdpdmVuIGxpc3Qgb3Igc3RyaW5nIChvciBvYmplY3RcbiAqIHdpdGggYSBgdGFpbGAgbWV0aG9kKS5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgc2xpY2VgIG1ldGhvZCBvZiB0aGUgZmlyc3QgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyBbYV0gLT4gW2FdXG4gKiBAc2lnIFN0cmluZyAtPiBTdHJpbmdcbiAqIEBwYXJhbSB7Kn0gbGlzdFxuICogQHJldHVybiB7Kn1cbiAqIEBzZWUgUi5oZWFkLCBSLmluaXQsIFIubGFzdFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIudGFpbChbMSwgMiwgM10pOyAgLy89PiBbMiwgM11cbiAqICAgICAgUi50YWlsKFsxLCAyXSk7ICAgICAvLz0+IFsyXVxuICogICAgICBSLnRhaWwoWzFdKTsgICAgICAgIC8vPT4gW11cbiAqICAgICAgUi50YWlsKFtdKTsgICAgICAgICAvLz0+IFtdXG4gKlxuICogICAgICBSLnRhaWwoJ2FiYycpOyAgLy89PiAnYmMnXG4gKiAgICAgIFIudGFpbCgnYWInKTsgICAvLz0+ICdiJ1xuICogICAgICBSLnRhaWwoJ2EnKTsgICAgLy89PiAnJ1xuICogICAgICBSLnRhaWwoJycpOyAgICAgLy89PiAnJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoX2NoZWNrRm9yTWV0aG9kKCd0YWlsJywgc2xpY2UoMSwgSW5maW5pdHkpKSk7XG4iLCJ2YXIgX2NoZWNrRm9yTWV0aG9kID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY2hlY2tGb3JNZXRob2QnKTtcbnZhciBfY3VycnkzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gbGlzdCBvciBzdHJpbmcgKG9yIG9iamVjdCB3aXRoIGEgYHNsaWNlYFxuICogbWV0aG9kKSBmcm9tIGBmcm9tSW5kZXhgIChpbmNsdXNpdmUpIHRvIGB0b0luZGV4YCAoZXhjbHVzaXZlKS5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgc2xpY2VgIG1ldGhvZCBvZiB0aGUgdGhpcmQgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS40XG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyBOdW1iZXIgLT4gTnVtYmVyIC0+IFthXSAtPiBbYV1cbiAqIEBzaWcgTnVtYmVyIC0+IE51bWJlciAtPiBTdHJpbmcgLT4gU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gZnJvbUluZGV4IFRoZSBzdGFydCBpbmRleCAoaW5jbHVzaXZlKS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB0b0luZGV4IFRoZSBlbmQgaW5kZXggKGV4Y2x1c2l2ZSkuXG4gKiBAcGFyYW0geyp9IGxpc3RcbiAqIEByZXR1cm4geyp9XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5zbGljZSgxLCAzLCBbJ2EnLCAnYicsICdjJywgJ2QnXSk7ICAgICAgICAvLz0+IFsnYicsICdjJ11cbiAqICAgICAgUi5zbGljZSgxLCBJbmZpbml0eSwgWydhJywgJ2InLCAnYycsICdkJ10pOyAvLz0+IFsnYicsICdjJywgJ2QnXVxuICogICAgICBSLnNsaWNlKDAsIC0xLCBbJ2EnLCAnYicsICdjJywgJ2QnXSk7ICAgICAgIC8vPT4gWydhJywgJ2InLCAnYyddXG4gKiAgICAgIFIuc2xpY2UoLTMsIC0xLCBbJ2EnLCAnYicsICdjJywgJ2QnXSk7ICAgICAgLy89PiBbJ2InLCAnYyddXG4gKiAgICAgIFIuc2xpY2UoMCwgMywgJ3JhbWRhJyk7ICAgICAgICAgICAgICAgICAgICAgLy89PiAncmFtJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoX2NoZWNrRm9yTWV0aG9kKCdzbGljZScsIGZ1bmN0aW9uIHNsaWNlKGZyb21JbmRleCwgdG9JbmRleCwgbGlzdCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobGlzdCwgZnJvbUluZGV4LCB0b0luZGV4KTtcbn0pKTtcbiIsInZhciBfY2hlY2tGb3JNZXRob2QgPSByZXF1aXJlKCcuL2ludGVybmFsL19jaGVja0Zvck1ldGhvZCcpO1xudmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcblxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBpbnB1dCBgbGlzdGAsIGNhbGxpbmcgYSBwcm92aWRlZCBmdW5jdGlvbiBgZm5gIGZvciBlYWNoXG4gKiBlbGVtZW50IGluIHRoZSBsaXN0LlxuICpcbiAqIGBmbmAgcmVjZWl2ZXMgb25lIGFyZ3VtZW50OiAqKHZhbHVlKSouXG4gKlxuICogTm90ZTogYFIuZm9yRWFjaGAgZG9lcyBub3Qgc2tpcCBkZWxldGVkIG9yIHVuYXNzaWduZWQgaW5kaWNlcyAoc3BhcnNlXG4gKiBhcnJheXMpLCB1bmxpa2UgdGhlIG5hdGl2ZSBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZC4gRm9yIG1vcmVcbiAqIGRldGFpbHMgb24gdGhpcyBiZWhhdmlvciwgc2VlOlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZm9yRWFjaCNEZXNjcmlwdGlvblxuICpcbiAqIEFsc28gbm90ZSB0aGF0LCB1bmxpa2UgYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCwgUmFtZGEncyBgZm9yRWFjaGAgcmV0dXJuc1xuICogdGhlIG9yaWdpbmFsIGFycmF5LiBJbiBzb21lIGxpYnJhcmllcyB0aGlzIGZ1bmN0aW9uIGlzIG5hbWVkIGBlYWNoYC5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgZm9yRWFjaGAgbWV0aG9kIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4xXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyAoYSAtPiAqKSAtPiBbYV0gLT4gW2FdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLiBSZWNlaXZlcyBvbmUgYXJndW1lbnQsIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IFRoZSBsaXN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgb3JpZ2luYWwgbGlzdC5cbiAqIEBzZWUgUi5hZGRJbmRleFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBwcmludFhQbHVzRml2ZSA9IHggPT4gY29uc29sZS5sb2coeCArIDUpO1xuICogICAgICBSLmZvckVhY2gocHJpbnRYUGx1c0ZpdmUsIFsxLCAyLCAzXSk7IC8vPT4gWzEsIDIsIDNdXG4gKiAgICAgIC8vIGxvZ3MgNlxuICogICAgICAvLyBsb2dzIDdcbiAqICAgICAgLy8gbG9ncyA4XG4gKiBAc3ltYiBSLmZvckVhY2goZiwgW2EsIGIsIGNdKSA9IFthLCBiLCBjXVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoX2NoZWNrRm9yTWV0aG9kKCdmb3JFYWNoJywgZnVuY3Rpb24gZm9yRWFjaChmbiwgbGlzdCkge1xuICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG4gIHZhciBpZHggPSAwO1xuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgZm4obGlzdFtpZHhdKTtcbiAgICBpZHggKz0gMTtcbiAgfVxuICByZXR1cm4gbGlzdDtcbn0pKTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IG9iamVjdCB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBgcHJvcGAgcHJvcGVydHkuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHNpZyBTdHJpbmcgLT4ge2s6IHZ9IC0+IHtrOiB2fVxuICogQHBhcmFtIHtTdHJpbmd9IHByb3AgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3NvY2lhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjbG9uZVxuICogQHJldHVybiB7T2JqZWN0fSBBIG5ldyBvYmplY3QgZXF1aXZhbGVudCB0byB0aGUgb3JpZ2luYWwgYnV0IHdpdGhvdXQgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eVxuICogQHNlZSBSLmFzc29jXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5kaXNzb2MoJ2InLCB7YTogMSwgYjogMiwgYzogM30pOyAvLz0+IHthOiAxLCBjOiAzfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gZGlzc29jKHByb3AsIG9iaikge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZvciAodmFyIHAgaW4gb2JqKSB7XG4gICAgcmVzdWx0W3BdID0gb2JqW3BdO1xuICB9XG4gIGRlbGV0ZSByZXN1bHRbcHJvcF07XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsInZhciBfYXNzaWduID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fYXNzaWduJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBvd24gcHJvcGVydGllcyBvZiB0aGUgZmlyc3Qgb2JqZWN0IG1lcmdlZCB3aXRoXG4gKiB0aGUgb3duIHByb3BlcnRpZXMgb2YgdGhlIHNlY29uZCBvYmplY3QuIElmIGEga2V5IGV4aXN0cyBpbiBib3RoIG9iamVjdHMsXG4gKiB0aGUgdmFsdWUgZnJvbSB0aGUgc2Vjb25kIG9iamVjdCB3aWxsIGJlIHVzZWQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHtrOiB2fSAtPiB7azogdn0gLT4ge2s6IHZ9XG4gKiBAcGFyYW0ge09iamVjdH0gbFxuICogQHBhcmFtIHtPYmplY3R9IHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBzZWUgUi5tZXJnZVdpdGgsIFIubWVyZ2VXaXRoS2V5XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5tZXJnZSh7ICduYW1lJzogJ2ZyZWQnLCAnYWdlJzogMTAgfSwgeyAnYWdlJzogNDAgfSk7XG4gKiAgICAgIC8vPT4geyAnbmFtZSc6ICdmcmVkJywgJ2FnZSc6IDQwIH1cbiAqXG4gKiAgICAgIHZhciByZXNldFRvRGVmYXVsdCA9IFIubWVyZ2UoUi5fXywge3g6IDB9KTtcbiAqICAgICAgcmVzZXRUb0RlZmF1bHQoe3g6IDUsIHk6IDJ9KTsgLy89PiB7eDogMCwgeTogMn1cbiAqIEBzeW1iIFIubWVyZ2UoeyB4OiAxLCB5OiAyIH0sIHsgeTogNSwgejogMyB9KSA9IHsgeDogMSwgeTogNSwgejogMyB9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBtZXJnZShsLCByKSB7XG4gIHJldHVybiBfYXNzaWduKHt9LCBsLCByKTtcbn0pO1xuIiwidmFyIF9vYmplY3RBc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3RBc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPVxuICB0eXBlb2YgT2JqZWN0LmFzc2lnbiA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5hc3NpZ24gOiBfb2JqZWN0QXNzaWduO1xuIiwidmFyIF9oYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfb2JqZWN0QXNzaWduKHRhcmdldCkge1xuICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgfVxuXG4gIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgdmFyIGlkeCA9IDE7XG4gIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB3aGlsZSAoaWR4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpZHhdO1xuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKF9oYXMobmV4dEtleSwgc291cmNlKSkge1xuICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZHggKz0gMTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcbiIsInZhciBfY3VycnkzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkzJyk7XG52YXIgY3VycnlOID0gcmVxdWlyZSgnLi9jdXJyeU4nKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgcHJvY2VzcyBlaXRoZXIgdGhlIGBvblRydWVgIG9yIHRoZSBgb25GYWxzZWBcbiAqIGZ1bmN0aW9uIGRlcGVuZGluZyB1cG9uIHRoZSByZXN1bHQgb2YgdGhlIGBjb25kaXRpb25gIHByZWRpY2F0ZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC44LjBcbiAqIEBjYXRlZ29yeSBMb2dpY1xuICogQHNpZyAoKi4uLiAtPiBCb29sZWFuKSAtPiAoKi4uLiAtPiAqKSAtPiAoKi4uLiAtPiAqKSAtPiAoKi4uLiAtPiAqKVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZGl0aW9uIEEgcHJlZGljYXRlIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblRydWUgQSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiB0aGUgYGNvbmRpdGlvbmAgZXZhbHVhdGVzIHRvIGEgdHJ1dGh5IHZhbHVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWxzZSBBIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHRoZSBgY29uZGl0aW9uYCBldmFsdWF0ZXMgdG8gYSBmYWxzeSB2YWx1ZS5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIG5ldyB1bmFyeSBmdW5jdGlvbiB0aGF0IHdpbGwgcHJvY2VzcyBlaXRoZXIgdGhlIGBvblRydWVgIG9yIHRoZSBgb25GYWxzZWBcbiAqICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZXBlbmRpbmcgdXBvbiB0aGUgcmVzdWx0IG9mIHRoZSBgY29uZGl0aW9uYCBwcmVkaWNhdGUuXG4gKiBAc2VlIFIudW5sZXNzLCBSLndoZW5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgaW5jQ291bnQgPSBSLmlmRWxzZShcbiAqICAgICAgICBSLmhhcygnY291bnQnKSxcbiAqICAgICAgICBSLm92ZXIoUi5sZW5zUHJvcCgnY291bnQnKSwgUi5pbmMpLFxuICogICAgICAgIFIuYXNzb2MoJ2NvdW50JywgMSlcbiAqICAgICAgKTtcbiAqICAgICAgaW5jQ291bnQoe30pOyAgICAgICAgICAgLy89PiB7IGNvdW50OiAxIH1cbiAqICAgICAgaW5jQ291bnQoeyBjb3VudDogMSB9KTsgLy89PiB7IGNvdW50OiAyIH1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkzKGZ1bmN0aW9uIGlmRWxzZShjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZSkge1xuICByZXR1cm4gY3VycnlOKE1hdGgubWF4KGNvbmRpdGlvbi5sZW5ndGgsIG9uVHJ1ZS5sZW5ndGgsIG9uRmFsc2UubGVuZ3RoKSxcbiAgICBmdW5jdGlvbiBfaWZFbHNlKCkge1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gb25UcnVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBvbkZhbHNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICApO1xufSk7XG4iLCJ2YXIgX2FyaXR5ID0gcmVxdWlyZSgnLi9fYXJpdHknKTtcbnZhciBfaXNQbGFjZWhvbGRlciA9IHJlcXVpcmUoJy4vX2lzUGxhY2Vob2xkZXInKTtcblxuXG4vKipcbiAqIEludGVybmFsIGN1cnJ5TiBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge051bWJlcn0gbGVuZ3RoIFRoZSBhcml0eSBvZiB0aGUgY3VycmllZCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IHJlY2VpdmVkIEFuIGFycmF5IG9mIGFyZ3VtZW50cyByZWNlaXZlZCB0aHVzIGZhci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgY3VycmllZCBmdW5jdGlvbi5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY3VycnlOKGxlbmd0aCwgcmVjZWl2ZWQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29tYmluZWQgPSBbXTtcbiAgICB2YXIgYXJnc0lkeCA9IDA7XG4gICAgdmFyIGxlZnQgPSBsZW5ndGg7XG4gICAgdmFyIGNvbWJpbmVkSWR4ID0gMDtcbiAgICB3aGlsZSAoY29tYmluZWRJZHggPCByZWNlaXZlZC5sZW5ndGggfHwgYXJnc0lkeCA8IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAoY29tYmluZWRJZHggPCByZWNlaXZlZC5sZW5ndGggJiZcbiAgICAgICAgICAoIV9pc1BsYWNlaG9sZGVyKHJlY2VpdmVkW2NvbWJpbmVkSWR4XSkgfHxcbiAgICAgICAgICAgYXJnc0lkeCA+PSBhcmd1bWVudHMubGVuZ3RoKSkge1xuICAgICAgICByZXN1bHQgPSByZWNlaXZlZFtjb21iaW5lZElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbYXJnc0lkeF07XG4gICAgICAgIGFyZ3NJZHggKz0gMTtcbiAgICAgIH1cbiAgICAgIGNvbWJpbmVkW2NvbWJpbmVkSWR4XSA9IHJlc3VsdDtcbiAgICAgIGlmICghX2lzUGxhY2Vob2xkZXIocmVzdWx0KSkge1xuICAgICAgICBsZWZ0IC09IDE7XG4gICAgICB9XG4gICAgICBjb21iaW5lZElkeCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbGVmdCA8PSAwID8gZm4uYXBwbHkodGhpcywgY29tYmluZWQpXG4gICAgICAgICAgICAgICAgICAgICA6IF9hcml0eShsZWZ0LCBfY3VycnlOKGxlbmd0aCwgY29tYmluZWQsIGZuKSk7XG4gIH07XG59O1xuIiwidmFyIF9jdXJyeTMgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHByb3BlcnR5IHNhdGlzZmllcyB0aGUgZ2l2ZW5cbiAqIHByZWRpY2F0ZTsgYGZhbHNlYCBvdGhlcndpc2UuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTYuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIChhIC0+IEJvb2xlYW4pIC0+IFN0cmluZyAtPiB7U3RyaW5nOiBhfSAtPiBCb29sZWFuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAc2VlIFIucHJvcEVxLCBSLnByb3BJc1xuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIucHJvcFNhdGlzZmllcyh4ID0+IHggPiAwLCAneCcsIHt4OiAxLCB5OiAyfSk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoZnVuY3Rpb24gcHJvcFNhdGlzZmllcyhwcmVkLCBuYW1lLCBvYmopIHtcbiAgcmV0dXJuIHByZWQob2JqW25hbWVdKTtcbn0pO1xuIiwidmFyIF9jdXJyeTMgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTMnKTtcbnZhciBpcyA9IHJlcXVpcmUoJy4vaXMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHByb3BlcnR5IGlzIG9mIHRoZSBnaXZlbiB0eXBlO1xuICogYGZhbHNlYCBvdGhlcndpc2UuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTYuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgVHlwZSAtPiBTdHJpbmcgLT4gT2JqZWN0IC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHR5cGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBzZWUgUi5pcywgUi5wcm9wU2F0aXNmaWVzXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5wcm9wSXMoTnVtYmVyLCAneCcsIHt4OiAxLCB5OiAyfSk7ICAvLz0+IHRydWVcbiAqICAgICAgUi5wcm9wSXMoTnVtYmVyLCAneCcsIHt4OiAnZm9vJ30pOyAgICAvLz0+IGZhbHNlXG4gKiAgICAgIFIucHJvcElzKE51bWJlciwgJ3gnLCB7fSk7ICAgICAgICAgICAgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoZnVuY3Rpb24gcHJvcElzKHR5cGUsIG5hbWUsIG9iaikge1xuICByZXR1cm4gaXModHlwZSwgb2JqW25hbWVdKTtcbn0pO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfaGFzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faGFzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBoYXMgYW4gb3duIHByb3BlcnR5IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHMgLT4ge3M6IHh9IC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGVjayBmb3IuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBleGlzdHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGhhc05hbWUgPSBSLmhhcygnbmFtZScpO1xuICogICAgICBoYXNOYW1lKHtuYW1lOiAnYWxpY2UnfSk7ICAgLy89PiB0cnVlXG4gKiAgICAgIGhhc05hbWUoe25hbWU6ICdib2InfSk7ICAgICAvLz0+IHRydWVcbiAqICAgICAgaGFzTmFtZSh7fSk7ICAgICAgICAgICAgICAgIC8vPT4gZmFsc2VcbiAqXG4gKiAgICAgIHZhciBwb2ludCA9IHt4OiAwLCB5OiAwfTtcbiAqICAgICAgdmFyIHBvaW50SGFzID0gUi5oYXMoUi5fXywgcG9pbnQpO1xuICogICAgICBwb2ludEhhcygneCcpOyAgLy89PiB0cnVlXG4gKiAgICAgIHBvaW50SGFzKCd5Jyk7ICAvLz0+IHRydWVcbiAqICAgICAgcG9pbnRIYXMoJ3onKTsgIC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKF9oYXMpO1xuIiwidmFyIGxpZnQgPSByZXF1aXJlKCcuL2xpZnQnKTtcbnZhciBub3QgPSByZXF1aXJlKCcuL25vdCcpO1xuXG5cbi8qKlxuICogVGFrZXMgYSBmdW5jdGlvbiBgZmAgYW5kIHJldHVybnMgYSBmdW5jdGlvbiBgZ2Agc3VjaCB0aGF0IGlmIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50c1xuICogd2hlbiBgZmAgcmV0dXJucyBhIFwidHJ1dGh5XCIgdmFsdWUsIGBnYCByZXR1cm5zIGBmYWxzZWAgYW5kIHdoZW4gYGZgIHJldHVybnMgYSBcImZhbHN5XCIgdmFsdWUgYGdgIHJldHVybnMgYHRydWVgLlxuICpcbiAqIGBSLmNvbXBsZW1lbnRgIG1heSBiZSBhcHBsaWVkIHRvIGFueSBmdW5jdG9yXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTIuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnICgqLi4uIC0+ICopIC0+ICgqLi4uIC0+IEJvb2xlYW4pXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBzZWUgUi5ub3RcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgaXNOb3ROaWwgPSBSLmNvbXBsZW1lbnQoUi5pc05pbCk7XG4gKiAgICAgIGlzTmlsKG51bGwpOyAvLz0+IHRydWVcbiAqICAgICAgaXNOb3ROaWwobnVsbCk7IC8vPT4gZmFsc2VcbiAqICAgICAgaXNOaWwoNyk7IC8vPT4gZmFsc2VcbiAqICAgICAgaXNOb3ROaWwoNyk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGxpZnQobm90KTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgbGlmdE4gPSByZXF1aXJlKCcuL2xpZnROJyk7XG5cblxuLyoqXG4gKiBcImxpZnRzXCIgYSBmdW5jdGlvbiBvZiBhcml0eSA+IDEgc28gdGhhdCBpdCBtYXkgXCJtYXAgb3ZlclwiIGEgbGlzdCwgRnVuY3Rpb24gb3Igb3RoZXJcbiAqIG9iamVjdCB0aGF0IHNhdGlzZmllcyB0aGUgW0ZhbnRhc3lMYW5kIEFwcGx5IHNwZWNdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYW50YXN5bGFuZC9mYW50YXN5LWxhbmQjYXBwbHkpLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjcuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICgqLi4uIC0+ICopIC0+IChbKl0uLi4gLT4gWypdKVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGxpZnQgaW50byBoaWdoZXIgY29udGV4dFxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBsaWZ0ZWQgZnVuY3Rpb24uXG4gKiBAc2VlIFIubGlmdE5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgbWFkZDMgPSBSLmxpZnQoKGEsIGIsIGMpID0+IGEgKyBiICsgYyk7XG4gKlxuICogICAgICBtYWRkMyhbMSwyLDNdLCBbMSwyLDNdLCBbMV0pOyAvLz0+IFszLCA0LCA1LCA0LCA1LCA2LCA1LCA2LCA3XVxuICpcbiAqICAgICAgdmFyIG1hZGQ1ID0gUi5saWZ0KChhLCBiLCBjLCBkLCBlKSA9PiBhICsgYiArIGMgKyBkICsgZSk7XG4gKlxuICogICAgICBtYWRkNShbMSwyXSwgWzNdLCBbNCwgNV0sIFs2XSwgWzcsIDhdKTsgLy89PiBbMjEsIDIyLCAyMiwgMjMsIDIyLCAyMywgMjMsIDI0XVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gbGlmdChmbikge1xuICByZXR1cm4gbGlmdE4oZm4ubGVuZ3RoLCBmbik7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG52YXIgX3JlZHVjZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3JlZHVjZScpO1xudmFyIGFwID0gcmVxdWlyZSgnLi9hcCcpO1xudmFyIGN1cnJ5TiA9IHJlcXVpcmUoJy4vY3VycnlOJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnLi9tYXAnKTtcblxuXG4vKipcbiAqIFwibGlmdHNcIiBhIGZ1bmN0aW9uIHRvIGJlIHRoZSBzcGVjaWZpZWQgYXJpdHksIHNvIHRoYXQgaXQgbWF5IFwibWFwIG92ZXJcIiB0aGF0XG4gKiBtYW55IGxpc3RzLCBGdW5jdGlvbnMgb3Igb3RoZXIgb2JqZWN0cyB0aGF0IHNhdGlzZnkgdGhlIFtGYW50YXN5TGFuZCBBcHBseSBzcGVjXShodHRwczovL2dpdGh1Yi5jb20vZmFudGFzeWxhbmQvZmFudGFzeS1sYW5kI2FwcGx5KS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC43LjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyBOdW1iZXIgLT4gKCouLi4gLT4gKikgLT4gKFsqXS4uLiAtPiBbKl0pXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbGlmdCBpbnRvIGhpZ2hlciBjb250ZXh0XG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGxpZnRlZCBmdW5jdGlvbi5cbiAqIEBzZWUgUi5saWZ0LCBSLmFwXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIG1hZGQzID0gUi5saWZ0TigzLCAoLi4uYXJncykgPT4gUi5zdW0oYXJncykpO1xuICogICAgICBtYWRkMyhbMSwyLDNdLCBbMSwyLDNdLCBbMV0pOyAvLz0+IFszLCA0LCA1LCA0LCA1LCA2LCA1LCA2LCA3XVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gbGlmdE4oYXJpdHksIGZuKSB7XG4gIHZhciBsaWZ0ZWQgPSBjdXJyeU4oYXJpdHksIGZuKTtcbiAgcmV0dXJuIGN1cnJ5Tihhcml0eSwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF9yZWR1Y2UoYXAsIG1hcChsaWZ0ZWQsIGFyZ3VtZW50c1swXSksIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9KTtcbn0pO1xuIiwidmFyIF9jb25jYXQgPSByZXF1aXJlKCcuL2ludGVybmFsL19jb25jYXQnKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG52YXIgX3JlZHVjZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3JlZHVjZScpO1xudmFyIG1hcCA9IHJlcXVpcmUoJy4vbWFwJyk7XG5cblxuLyoqXG4gKiBhcCBhcHBsaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gYSBsaXN0IG9mIHZhbHVlcy5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgYXBgIG1ldGhvZCBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpZiBwcmVzZW50LiBBbHNvXG4gKiB0cmVhdHMgY3VycmllZCBmdW5jdGlvbnMgYXMgYXBwbGljYXRpdmVzLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjMuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIFthIC0+IGJdIC0+IFthXSAtPiBbYl1cbiAqIEBzaWcgQXBwbHkgZiA9PiBmIChhIC0+IGIpIC0+IGYgYSAtPiBmIGJcbiAqIEBwYXJhbSB7QXJyYXl9IGZucyBBbiBhcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IHZzIEFuIGFycmF5IG9mIHZhbHVlc1xuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHJlc3VsdHMgb2YgYXBwbHlpbmcgZWFjaCBvZiBgZm5zYCB0byBhbGwgb2YgYHZzYCBpbiB0dXJuLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuYXAoW1IubXVsdGlwbHkoMiksIFIuYWRkKDMpXSwgWzEsMiwzXSk7IC8vPT4gWzIsIDQsIDYsIDQsIDUsIDZdXG4gKiAgICAgIFIuYXAoW1IuY29uY2F0KCd0YXN0eSAnKSwgUi50b1VwcGVyXSwgWydwaXp6YScsICdzYWxhZCddKTsgLy89PiBbXCJ0YXN0eSBwaXp6YVwiLCBcInRhc3R5IHNhbGFkXCIsIFwiUElaWkFcIiwgXCJTQUxBRFwiXVxuICogQHN5bWIgUi5hcChbZiwgZ10sIFthLCBiXSkgPSBbZihhKSwgZihiKSwgZyhhKSwgZyhiKV1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGFwKGFwcGxpY2F0aXZlLCBmbikge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBhcHBsaWNhdGl2ZS5hcCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICBhcHBsaWNhdGl2ZS5hcChmbikgOlxuICAgIHR5cGVvZiBhcHBsaWNhdGl2ZSA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICBmdW5jdGlvbih4KSB7IHJldHVybiBhcHBsaWNhdGl2ZSh4KShmbih4KSk7IH0gOlxuICAgIC8vIGVsc2VcbiAgICAgIF9yZWR1Y2UoZnVuY3Rpb24oYWNjLCBmKSB7IHJldHVybiBfY29uY2F0KGFjYywgbWFwKGYsIGZuKSk7IH0sIFtdLCBhcHBsaWNhdGl2ZSlcbiAgKTtcbn0pO1xuIiwidmFyIF9pc0FycmF5ID0gcmVxdWlyZSgnLi9faXNBcnJheScpO1xudmFyIF9pc1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9faXNUcmFuc2Zvcm1lcicpO1xuXG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyB3aXRoIGRpZmZlcmVudCBzdHJhdGVnaWVzIGJhc2VkIG9uIHRoZVxuICogb2JqZWN0IGluIGxpc3QgcG9zaXRpb24gKGxhc3QgYXJndW1lbnQpLiBJZiBpdCBpcyBhbiBhcnJheSwgZXhlY3V0ZXMgW2ZuXS5cbiAqIE90aGVyd2lzZSwgaWYgaXQgaGFzIGEgZnVuY3Rpb24gd2l0aCBvbmUgb2YgdGhlIGdpdmVuIG1ldGhvZCBuYW1lcywgaXQgd2lsbFxuICogZXhlY3V0ZSB0aGF0IGZ1bmN0aW9uIChmdW5jdG9yIGNhc2UpLiBPdGhlcndpc2UsIGlmIGl0IGlzIGEgdHJhbnNmb3JtZXIsXG4gKiB1c2VzIHRyYW5zZHVjZXIgW3hmXSB0byByZXR1cm4gYSBuZXcgdHJhbnNmb3JtZXIgKHRyYW5zZHVjZXIgY2FzZSkuXG4gKiBPdGhlcndpc2UsIGl0IHdpbGwgZGVmYXVsdCB0byBleGVjdXRpbmcgW2ZuXS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gbWV0aG9kTmFtZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHhmIHRyYW5zZHVjZXIgdG8gaW5pdGlhbGl6ZSBpZiBvYmplY3QgaXMgdHJhbnNmb3JtZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIGRlZmF1bHQgcmFtZGEgaW1wbGVtZW50YXRpb25cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyBvbiBvYmplY3QgaW4gbGlzdCBwb3NpdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9kaXNwYXRjaGFibGUobWV0aG9kTmFtZXMsIHhmLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gICAgdmFyIG9iaiA9IGFyZ3MucG9wKCk7XG4gICAgaWYgKCFfaXNBcnJheShvYmopKSB7XG4gICAgICB2YXIgaWR4ID0gMDtcbiAgICAgIHdoaWxlIChpZHggPCBtZXRob2ROYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmpbbWV0aG9kTmFtZXNbaWR4XV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb2JqW21ldGhvZE5hbWVzW2lkeF1dLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWR4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoX2lzVHJhbnNmb3JtZXIob2JqKSkge1xuICAgICAgICB2YXIgdHJhbnNkdWNlciA9IHhmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdHJhbnNkdWNlcihvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pc1RyYW5zZm9ybWVyKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9ialsnQEB0cmFuc2R1Y2VyL3N0ZXAnXSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9tYXAoZm4sIGZ1bmN0b3IpIHtcbiAgdmFyIGlkeCA9IDA7XG4gIHZhciBsZW4gPSBmdW5jdG9yLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbik7XG4gIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICByZXN1bHRbaWR4XSA9IGZuKGZ1bmN0b3JbaWR4XSk7XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vX2N1cnJ5MicpO1xudmFyIF94ZkJhc2UgPSByZXF1aXJlKCcuL194ZkJhc2UnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gWE1hcChmLCB4Zikge1xuICAgIHRoaXMueGYgPSB4ZjtcbiAgICB0aGlzLmYgPSBmO1xuICB9XG4gIFhNYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvaW5pdCddID0gX3hmQmFzZS5pbml0O1xuICBYTWFwLnByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddID0gX3hmQmFzZS5yZXN1bHQ7XG4gIFhNYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvc3RlcCddID0gZnVuY3Rpb24ocmVzdWx0LCBpbnB1dCkge1xuICAgIHJldHVybiB0aGlzLnhmWydAQHRyYW5zZHVjZXIvc3RlcCddKHJlc3VsdCwgdGhpcy5mKGlucHV0KSk7XG4gIH07XG5cbiAgcmV0dXJuIF9jdXJyeTIoZnVuY3Rpb24gX3htYXAoZiwgeGYpIHsgcmV0dXJuIG5ldyBYTWFwKGYsIHhmKTsgfSk7XG59KCkpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnhmWydAQHRyYW5zZHVjZXIvaW5pdCddKCk7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgcmV0dXJuIHRoaXMueGZbJ0BAdHJhbnNkdWNlci9yZXN1bHQnXShyZXN1bHQpO1xuICB9XG59O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBgIWAgb2YgaXRzIGFyZ3VtZW50LiBJdCB3aWxsIHJldHVybiBgdHJ1ZWAgd2hlblxuICogcGFzc2VkIGZhbHNlLXkgdmFsdWUsIGFuZCBgZmFsc2VgIHdoZW4gcGFzc2VkIGEgdHJ1dGgteSBvbmUuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTG9naWNcbiAqIEBzaWcgKiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IGEgYW55IHZhbHVlXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0aGUgbG9naWNhbCBpbnZlcnNlIG9mIHBhc3NlZCBhcmd1bWVudC5cbiAqIEBzZWUgUi5jb21wbGVtZW50XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5ub3QodHJ1ZSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5ub3QoZmFsc2UpOyAvLz0+IHRydWVcbiAqICAgICAgUi5ub3QoMCk7IC8vPT4gdHJ1ZVxuICogICAgICBSLm5vdCgxKTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gbm90KGEpIHtcbiAgcmV0dXJuICFhO1xufSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIGVtcHR5ID0gcmVxdWlyZSgnLi9lbXB0eScpO1xudmFyIGVxdWFscyA9IHJlcXVpcmUoJy4vZXF1YWxzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgaXRzIHR5cGUncyBlbXB0eSB2YWx1ZTsgYGZhbHNlYFxuICogb3RoZXJ3aXNlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIGEgLT4gQm9vbGVhblxuICogQHBhcmFtIHsqfSB4XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHNlZSBSLmVtcHR5XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5pc0VtcHR5KFsxLCAyLCAzXSk7ICAgLy89PiBmYWxzZVxuICogICAgICBSLmlzRW1wdHkoW10pOyAgICAgICAgICAvLz0+IHRydWVcbiAqICAgICAgUi5pc0VtcHR5KCcnKTsgICAgICAgICAgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNFbXB0eShudWxsKTsgICAgICAgIC8vPT4gZmFsc2VcbiAqICAgICAgUi5pc0VtcHR5KHt9KTsgICAgICAgICAgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNFbXB0eSh7bGVuZ3RoOiAwfSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGlzRW1wdHkoeCkge1xuICByZXR1cm4geCAhPSBudWxsICYmIGVxdWFscyh4LCBlbXB0eSh4KSk7XG59KTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgX2lzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNBcmd1bWVudHMnKTtcbnZhciBfaXNBcnJheSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lzQXJyYXknKTtcbnZhciBfaXNPYmplY3QgPSByZXF1aXJlKCcuL2ludGVybmFsL19pc09iamVjdCcpO1xudmFyIF9pc1N0cmluZyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lzU3RyaW5nJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbXB0eSB2YWx1ZSBvZiBpdHMgYXJndW1lbnQncyB0eXBlLiBSYW1kYSBkZWZpbmVzIHRoZSBlbXB0eVxuICogdmFsdWUgb2YgQXJyYXkgKGBbXWApLCBPYmplY3QgKGB7fWApLCBTdHJpbmcgKGAnJ2ApLCBhbmQgQXJndW1lbnRzLiBPdGhlclxuICogdHlwZXMgYXJlIHN1cHBvcnRlZCBpZiB0aGV5IGRlZmluZSBgPFR5cGU+LmVtcHR5YCBhbmQvb3JcbiAqIGA8VHlwZT4ucHJvdG90eXBlLmVtcHR5YC5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgZW1wdHlgIG1ldGhvZCBvZiB0aGUgZmlyc3QgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMy4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgYSAtPiBhXG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm4geyp9XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5lbXB0eShKdXN0KDQyKSk7ICAgICAgLy89PiBOb3RoaW5nKClcbiAqICAgICAgUi5lbXB0eShbMSwgMiwgM10pOyAgICAgLy89PiBbXVxuICogICAgICBSLmVtcHR5KCd1bmljb3JucycpOyAgICAvLz0+ICcnXG4gKiAgICAgIFIuZW1wdHkoe3g6IDEsIHk6IDJ9KTsgIC8vPT4ge31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGVtcHR5KHgpIHtcbiAgcmV0dXJuIChcbiAgICAoeCAhPSBudWxsICYmIHR5cGVvZiB4LmVtcHR5ID09PSAnZnVuY3Rpb24nKSA/XG4gICAgICB4LmVtcHR5KCkgOlxuICAgICh4ICE9IG51bGwgJiYgeC5jb25zdHJ1Y3RvciAhPSBudWxsICYmIHR5cGVvZiB4LmNvbnN0cnVjdG9yLmVtcHR5ID09PSAnZnVuY3Rpb24nKSA/XG4gICAgICB4LmNvbnN0cnVjdG9yLmVtcHR5KCkgOlxuICAgIF9pc0FycmF5KHgpID9cbiAgICAgIFtdIDpcbiAgICBfaXNTdHJpbmcoeCkgP1xuICAgICAgJycgOlxuICAgIF9pc09iamVjdCh4KSA/XG4gICAgICB7fSA6XG4gICAgX2lzQXJndW1lbnRzKHgpID9cbiAgICAgIChmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA6XG4gICAgLy8gZWxzZVxuICAgICAgdm9pZCAwXG4gICk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2lzT2JqZWN0KHgpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBjdXJyeU4gPSByZXF1aXJlKCcuL2N1cnJ5TicpO1xudmFyIG1heCA9IHJlcXVpcmUoJy4vbWF4Jyk7XG52YXIgcGx1Y2sgPSByZXF1aXJlKCcuL3BsdWNrJyk7XG52YXIgcmVkdWNlID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcblxuXG4vKipcbiAqIFRha2VzIGEgbGlzdCBvZiBwcmVkaWNhdGVzIGFuZCByZXR1cm5zIGEgcHJlZGljYXRlIHRoYXQgcmV0dXJucyB0cnVlIGZvciBhXG4gKiBnaXZlbiBsaXN0IG9mIGFyZ3VtZW50cyBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHByb3ZpZGVkIHByZWRpY2F0ZXMgaXNcbiAqIHNhdGlzZmllZCBieSB0aG9zZSBhcmd1bWVudHMuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHJldHVybmVkIGlzIGEgY3VycmllZCBmdW5jdGlvbiB3aG9zZSBhcml0eSBtYXRjaGVzIHRoYXQgb2YgdGhlXG4gKiBoaWdoZXN0LWFyaXR5IHByZWRpY2F0ZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC45LjBcbiAqIEBjYXRlZ29yeSBMb2dpY1xuICogQHNpZyBbKCouLi4gLT4gQm9vbGVhbildIC0+ICgqLi4uIC0+IEJvb2xlYW4pXG4gKiBAcGFyYW0ge0FycmF5fSBwcmVkaWNhdGVzIEFuIGFycmF5IG9mIHByZWRpY2F0ZXMgdG8gY2hlY2tcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgY29tYmluZWQgcHJlZGljYXRlXG4gKiBAc2VlIFIuYWxsUGFzc1xuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBpc0NsdWIgPSBSLnByb3BFcSgnc3VpdCcsICfimaMnKTtcbiAqICAgICAgdmFyIGlzU3BhZGUgPSBSLnByb3BFcSgnc3VpdCcsICfimaAnKTtcbiAqICAgICAgdmFyIGlzQmxhY2tDYXJkID0gUi5hbnlQYXNzKFtpc0NsdWIsIGlzU3BhZGVdKTtcbiAqXG4gKiAgICAgIGlzQmxhY2tDYXJkKHtyYW5rOiAnMTAnLCBzdWl0OiAn4pmjJ30pOyAvLz0+IHRydWVcbiAqICAgICAgaXNCbGFja0NhcmQoe3Jhbms6ICdRJywgc3VpdDogJ+KZoCd9KTsgLy89PiB0cnVlXG4gKiAgICAgIGlzQmxhY2tDYXJkKHtyYW5rOiAnUScsIHN1aXQ6ICfimaYnfSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGFueVBhc3MocHJlZHMpIHtcbiAgcmV0dXJuIGN1cnJ5TihyZWR1Y2UobWF4LCAwLCBwbHVjaygnbGVuZ3RoJywgcHJlZHMpKSwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlkeCA9IDA7XG4gICAgdmFyIGxlbiA9IHByZWRzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgICBpZiAocHJlZHNbaWR4XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWR4ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnLi9tYXAnKTtcbnZhciBwcm9wID0gcmVxdWlyZSgnLi9wcm9wJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IGxpc3QgYnkgcGx1Y2tpbmcgdGhlIHNhbWUgbmFtZWQgcHJvcGVydHkgb2ZmIGFsbCBvYmplY3RzIGluXG4gKiB0aGUgbGlzdCBzdXBwbGllZC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIGsgLT4gW3trOiB2fV0gLT4gW3ZdXG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IGtleSBUaGUga2V5IG5hbWUgdG8gcGx1Y2sgb2ZmIG9mIGVhY2ggb2JqZWN0LlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgYXJyYXkgdG8gY29uc2lkZXIuXG4gKiBAcmV0dXJuIHtBcnJheX0gVGhlIGxpc3Qgb2YgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICogQHNlZSBSLnByb3BzXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5wbHVjaygnYScpKFt7YTogMX0sIHthOiAyfV0pOyAvLz0+IFsxLCAyXVxuICogICAgICBSLnBsdWNrKDApKFtbMSwgMl0sIFszLCA0XV0pOyAgIC8vPT4gWzEsIDNdXG4gKiBAc3ltYiBSLnBsdWNrKCd4JywgW3t4OiAxLCB5OiAyfSwge3g6IDMsIHk6IDR9LCB7eDogNSwgeTogNn1dKSA9IFsxLCAzLCA1XVxuICogQHN5bWIgUi5wbHVjaygwLCBbWzEsIDJdLCBbMywgNF0sIFs1LCA2XV0pID0gWzEsIDMsIDVdXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBwbHVjayhwLCBsaXN0KSB7XG4gIHJldHVybiBtYXAocHJvcChwKSwgbGlzdCk7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZWNvbmQ7XG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBSZWxhdGlvblxuICogQHNpZyBPcmQgYSA9PiBhIC0+IGEgLT4gQm9vbGVhblxuICogQHBhcmFtIHtOdW1iZXJ9IGFcbiAqIEBwYXJhbSB7TnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHNlZSBSLmx0ZVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuZ3RlKDIsIDEpOyAvLz0+IHRydWVcbiAqICAgICAgUi5ndGUoMiwgMik7IC8vPT4gdHJ1ZVxuICogICAgICBSLmd0ZSgyLCAzKTsgLy89PiBmYWxzZVxuICogICAgICBSLmd0ZSgnYScsICd6Jyk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5ndGUoJ3onLCAnYScpOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGd0ZShhLCBiKSB7IHJldHVybiBhID49IGI7IH0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBjdXJyeU4gPSByZXF1aXJlKCcuL2N1cnJ5TicpO1xuXG5cbi8qKlxuICogUmV0dXJucyBhIGN1cnJpZWQgZXF1aXZhbGVudCBvZiB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uIFRoZSBjdXJyaWVkIGZ1bmN0aW9uXG4gKiBoYXMgdHdvIHVudXN1YWwgY2FwYWJpbGl0aWVzLiBGaXJzdCwgaXRzIGFyZ3VtZW50cyBuZWVkbid0IGJlIHByb3ZpZGVkIG9uZVxuICogYXQgYSB0aW1lLiBJZiBgZmAgaXMgYSB0ZXJuYXJ5IGZ1bmN0aW9uIGFuZCBgZ2AgaXMgYFIuY3VycnkoZilgLCB0aGVcbiAqIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDpcbiAqXG4gKiAgIC0gYGcoMSkoMikoMylgXG4gKiAgIC0gYGcoMSkoMiwgMylgXG4gKiAgIC0gYGcoMSwgMikoMylgXG4gKiAgIC0gYGcoMSwgMiwgMylgXG4gKlxuICogU2Vjb25kbHksIHRoZSBzcGVjaWFsIHBsYWNlaG9sZGVyIHZhbHVlIGBSLl9fYCBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5XG4gKiBcImdhcHNcIiwgYWxsb3dpbmcgcGFydGlhbCBhcHBsaWNhdGlvbiBvZiBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzLFxuICogcmVnYXJkbGVzcyBvZiB0aGVpciBwb3NpdGlvbnMuIElmIGBnYCBpcyBhcyBhYm92ZSBhbmQgYF9gIGlzIGBSLl9fYCwgdGhlXG4gKiBmb2xsb3dpbmcgYXJlIGVxdWl2YWxlbnQ6XG4gKlxuICogICAtIGBnKDEsIDIsIDMpYFxuICogICAtIGBnKF8sIDIsIDMpKDEpYFxuICogICAtIGBnKF8sIF8sIDMpKDEpKDIpYFxuICogICAtIGBnKF8sIF8sIDMpKDEsIDIpYFxuICogICAtIGBnKF8sIDIpKDEpKDMpYFxuICogICAtIGBnKF8sIDIpKDEsIDMpYFxuICogICAtIGBnKF8sIDIpKF8sIDMpKDEpYFxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICgqIC0+IGEpIC0+ICgqIC0+IGEpXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBuZXcsIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAc2VlIFIuY3VycnlOXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGFkZEZvdXJOdW1iZXJzID0gKGEsIGIsIGMsIGQpID0+IGEgKyBiICsgYyArIGQ7XG4gKlxuICogICAgICB2YXIgY3VycmllZEFkZEZvdXJOdW1iZXJzID0gUi5jdXJyeShhZGRGb3VyTnVtYmVycyk7XG4gKiAgICAgIHZhciBmID0gY3VycmllZEFkZEZvdXJOdW1iZXJzKDEsIDIpO1xuICogICAgICB2YXIgZyA9IGYoMyk7XG4gKiAgICAgIGcoNCk7IC8vPT4gMTBcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGN1cnJ5KGZuKSB7XG4gIHJldHVybiBjdXJyeU4oZm4ubGVuZ3RoLCBmbik7XG59KTtcbiIsInZhciBhbHdheXMgPSByZXF1aXJlKCcuL2Fsd2F5cycpO1xuXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIGB0cnVlYC4gQW55IHBhc3NlZCBpbiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjkuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICogLT4gQm9vbGVhblxuICogQHBhcmFtIHsqfVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBzZWUgUi5hbHdheXMsIFIuRlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuVCgpOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBhbHdheXModHJ1ZSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIF9pZGVudGl0eSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lkZW50aXR5Jyk7XG5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nIGJ1dCByZXR1cm4gdGhlIHBhcmFtZXRlciBzdXBwbGllZCB0byBpdC4gR29vZFxuICogYXMgYSBkZWZhdWx0IG9yIHBsYWNlaG9sZGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIGEgLT4gYVxuICogQHBhcmFtIHsqfSB4IFRoZSB2YWx1ZSB0byByZXR1cm4uXG4gKiBAcmV0dXJuIHsqfSBUaGUgaW5wdXQgdmFsdWUsIGB4YC5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmlkZW50aXR5KDEpOyAvLz0+IDFcbiAqXG4gKiAgICAgIHZhciBvYmogPSB7fTtcbiAqICAgICAgUi5pZGVudGl0eShvYmopID09PSBvYmo7IC8vPT4gdHJ1ZVxuICogQHN5bWIgUi5pZGVudGl0eShhKSA9IGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKF9pZGVudGl0eSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pZGVudGl0eSh4KSB7IHJldHVybiB4OyB9O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjkuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgKiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IHggVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYHhgIGlzIGB1bmRlZmluZWRgIG9yIGBudWxsYCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5pc05pbChudWxsKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNOaWwodW5kZWZpbmVkKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNOaWwoMCk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pc05pbChbXSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGlzTmlsKHgpIHsgcmV0dXJuIHggPT0gbnVsbDsgfSk7XG4iLCJ2YXIgX2FyaXR5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fYXJpdHknKTtcbnZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnLi9tYXAnKTtcbnZhciBtYXggPSByZXF1aXJlKCcuL21heCcpO1xudmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4vcmVkdWNlJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24sIGBmbmAsIHdoaWNoIGVuY2Fwc3VsYXRlcyBgaWYvZWxzZSwgaWYvZWxzZSwgLi4uYCBsb2dpYy5cbiAqIGBSLmNvbmRgIHRha2VzIGEgbGlzdCBvZiBbcHJlZGljYXRlLCB0cmFuc2Zvcm1lcl0gcGFpcnMuIEFsbCBvZiB0aGUgYXJndW1lbnRzXG4gKiB0byBgZm5gIGFyZSBhcHBsaWVkIHRvIGVhY2ggb2YgdGhlIHByZWRpY2F0ZXMgaW4gdHVybiB1bnRpbCBvbmUgcmV0dXJucyBhXG4gKiBcInRydXRoeVwiIHZhbHVlLCBhdCB3aGljaCBwb2ludCBgZm5gIHJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBpdHNcbiAqIGFyZ3VtZW50cyB0byB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lci4gSWYgbm9uZSBvZiB0aGUgcHJlZGljYXRlc1xuICogbWF0Y2hlcywgYGZuYCByZXR1cm5zIHVuZGVmaW5lZC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC42LjBcbiAqIEBjYXRlZ29yeSBMb2dpY1xuICogQHNpZyBbWygqLi4uIC0+IEJvb2xlYW4pLCgqLi4uIC0+ICopXV0gLT4gKCouLi4gLT4gKilcbiAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzIEEgbGlzdCBvZiBbcHJlZGljYXRlLCB0cmFuc2Zvcm1lcl1cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBmbiA9IFIuY29uZChbXG4gKiAgICAgICAgW1IuZXF1YWxzKDApLCAgIFIuYWx3YXlzKCd3YXRlciBmcmVlemVzIGF0IDDCsEMnKV0sXG4gKiAgICAgICAgW1IuZXF1YWxzKDEwMCksIFIuYWx3YXlzKCd3YXRlciBib2lscyBhdCAxMDDCsEMnKV0sXG4gKiAgICAgICAgW1IuVCwgICAgICAgICAgIHRlbXAgPT4gJ25vdGhpbmcgc3BlY2lhbCBoYXBwZW5zIGF0ICcgKyB0ZW1wICsgJ8KwQyddXG4gKiAgICAgIF0pO1xuICogICAgICBmbigwKTsgLy89PiAnd2F0ZXIgZnJlZXplcyBhdCAwwrBDJ1xuICogICAgICBmbig1MCk7IC8vPT4gJ25vdGhpbmcgc3BlY2lhbCBoYXBwZW5zIGF0IDUwwrBDJ1xuICogICAgICBmbigxMDApOyAvLz0+ICd3YXRlciBib2lscyBhdCAxMDDCsEMnXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShmdW5jdGlvbiBjb25kKHBhaXJzKSB7XG4gIHZhciBhcml0eSA9IHJlZHVjZShtYXgsXG4gICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgbWFwKGZ1bmN0aW9uKHBhaXIpIHsgcmV0dXJuIHBhaXJbMF0ubGVuZ3RoOyB9LCBwYWlycykpO1xuICByZXR1cm4gX2FyaXR5KGFyaXR5LCBmdW5jdGlvbigpIHtcbiAgICB2YXIgaWR4ID0gMDtcbiAgICB3aGlsZSAoaWR4IDwgcGFpcnMubGVuZ3RoKSB7XG4gICAgICBpZiAocGFpcnNbaWR4XVswXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgIHJldHVybiBwYWlyc1tpZHhdWzFdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UodXRpbHMubWVyZ2UoZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxuLy8gVGhlIF9pc0J1ZmZlciBjaGVjayBpcyBmb3IgU2FmYXJpIDUtNyBzdXBwb3J0LCBiZWNhdXNlIGl0J3MgbWlzc2luZ1xuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiAoaXNCdWZmZXIob2JqKSB8fCBpc1Nsb3dCdWZmZXIob2JqKSB8fCAhIW9iai5faXNCdWZmZXIpXG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChvYmopIHtcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cblxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIGlzU2xvd0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqLnJlYWRGbG9hdExFID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouc2xpY2UgPT09ICdmdW5jdGlvbicgJiYgaXNCdWZmZXIob2JqLnNsaWNlKDAsIDApKVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLy4uL2RlZmF1bHRzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSB1dGlscy5tZXJnZSh7XG4gICAgICB1cmw6IGFyZ3VtZW50c1swXVxuICAgIH0sIGFyZ3VtZW50c1sxXSk7XG4gIH1cblxuICBjb25maWcgPSB1dGlscy5tZXJnZShkZWZhdWx0cywgdGhpcy5kZWZhdWx0cywgeyBtZXRob2Q6ICdnZXQnIH0sIGNvbmZpZyk7XG4gIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gU3VwcG9ydCBiYXNlVVJMIGNvbmZpZ1xuICBpZiAoY29uZmlnLmJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwoY29uZmlnLnVybCkpIHtcbiAgICBjb25maWcudXJsID0gY29tYmluZVVSTHMoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICB9XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybFxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIC8vIE5vdGU6IHN0YXR1cyBpcyBub3QgZXhwb3NlZCBieSBYRG9tYWluUmVxdWVzdFxuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH1cblxuICAgICAgaWYgKCF1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gYnRvYSBwb2x5ZmlsbCBmb3IgSUU8MTAgY291cnRlc3kgaHR0cHM6Ly9naXRodWIuY29tL2RhdmlkY2hhbWJlcnMvQmFzZTY0LmpzXG5cbnZhciBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7XG5cbmZ1bmN0aW9uIEUoKSB7XG4gIHRoaXMubWVzc2FnZSA9ICdTdHJpbmcgY29udGFpbnMgYW4gaW52YWxpZCBjaGFyYWN0ZXInO1xufVxuRS5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XG5FLnByb3RvdHlwZS5jb2RlID0gNTtcbkUucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuZnVuY3Rpb24gYnRvYShpbnB1dCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGlucHV0KTtcbiAgdmFyIG91dHB1dCA9ICcnO1xuICBmb3IgKFxuICAgIC8vIGluaXRpYWxpemUgcmVzdWx0IGFuZCBjb3VudGVyXG4gICAgdmFyIGJsb2NrLCBjaGFyQ29kZSwgaWR4ID0gMCwgbWFwID0gY2hhcnM7XG4gICAgLy8gaWYgdGhlIG5leHQgc3RyIGluZGV4IGRvZXMgbm90IGV4aXN0OlxuICAgIC8vICAgY2hhbmdlIHRoZSBtYXBwaW5nIHRhYmxlIHRvIFwiPVwiXG4gICAgLy8gICBjaGVjayBpZiBkIGhhcyBubyBmcmFjdGlvbmFsIGRpZ2l0c1xuICAgIHN0ci5jaGFyQXQoaWR4IHwgMCkgfHwgKG1hcCA9ICc9JywgaWR4ICUgMSk7XG4gICAgLy8gXCI4IC0gaWR4ICUgMSAqIDhcIiBnZW5lcmF0ZXMgdGhlIHNlcXVlbmNlIDIsIDQsIDYsIDhcbiAgICBvdXRwdXQgKz0gbWFwLmNoYXJBdCg2MyAmIGJsb2NrID4+IDggLSBpZHggJSAxICogOClcbiAgKSB7XG4gICAgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpZHggKz0gMyAvIDQpO1xuICAgIGlmIChjaGFyQ29kZSA+IDB4RkYpIHtcbiAgICAgIHRocm93IG5ldyBFKCk7XG4gICAgfVxuICAgIGJsb2NrID0gYmxvY2sgPDwgOCB8IGNoYXJDb2RlO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnRvYTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgfSxcblxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICB9LFxuXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnMgfHwge31cbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbihkYXRhLCBoZWFkZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGRcXCtcXC1cXC5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuL0NhbmNlbCcpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWwobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQgPSBmdW5jdGlvbiB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiIsInZhciBiYXNlSXNNYXRjaCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hdGNoJyksXG4gICAgZ2V0TWF0Y2hEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWF0Y2hEYXRhJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlcztcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XG4gIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICBsZW5ndGggPSBpbmRleCxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xuXG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiAhbGVuZ3RoO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgOiAhKGRhdGFbMF0gaW4gb2JqZWN0KVxuICAgICAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICB2YXIga2V5ID0gZGF0YVswXSxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgc3JjVmFsdWUgPSBkYXRhWzFdO1xuXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XG4gICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XG4gICAgICB9XG4gICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICA6IHJlc3VsdFxuICAgICAgICAgICkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNNYXRjaDtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXM7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpLFxuICAgIGdldCA9IHJlcXVpcmUoJy4vZ2V0JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCJ2YXIgYmFzZUhhc0luID0gcmVxdWlyZSgnLi9fYmFzZUhhc0luJyksXG4gICAgaGFzUGF0aCA9IHJlcXVpcmUoJy4vX2hhc1BhdGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc0luO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUhhc0luKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBrZXkgaW4gT2JqZWN0KG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUhhc0luO1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1BhdGg7XG4iLCJ2YXIgYmFzZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5JyksXG4gICAgYmFzZVByb3BlcnR5RGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eURlZXAnKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcbiAqICAgeyAnYSc6IHsgJ2InOiAxIH0gfVxuICogXTtcbiAqXG4gKiBfLm1hcChvYmplY3RzLCBfLnByb3BlcnR5KCdhLmInKSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqXG4gKiBfLm1hcChfLnNvcnRCeShvYmplY3RzLCBfLnByb3BlcnR5KFsnYScsICdiJ10pKSwgJ2EuYicpO1xuICogLy8gPT4gWzEsIDJdXG4gKi9cbmZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvcGVydHk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlEZWVwO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXBgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gQXJyYXkoY29sbGVjdGlvbi5sZW5ndGgpIDogW107XG5cbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWFwO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUVhY2g7XG4iLCJ2YXIgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbHRlcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwidmFyIGJhc2VUcmltID0gcmVxdWlyZSgnLi9fYmFzZVRyaW0nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXI7XG4iLCJ2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZSgnLi9fdHJpbW1lZEVuZEluZGV4Jyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVHJpbTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmltbWVkRW5kSW5kZXg7XG4iLCJ2YXIgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmluZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYHBsYWNlaG9sZGVyYCBvY2N1cnJlbmNlcyBpbiBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAqL1xuZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gMDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvdW50SG9sZGVycztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBnZXRGdW5jTmFtZSA9IHJlcXVpcmUoJy4vX2dldEZ1bmNOYW1lJyksXG4gICAgbG9kYXNoID0gcmVxdWlyZSgnLi93cmFwcGVyTG9kYXNoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGF6aWFibGUoZnVuYykge1xuICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChmdW5jID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7XG4gIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xhemlhYmxlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXJDbG9uZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFdyYXBEZXRhaWxzO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy87XG5cbi8qKlxuICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICB2YXIgbGVuZ3RoID0gZGV0YWlscy5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICBkZXRhaWxzID0gZGV0YWlscy5qb2luKGxlbmd0aCA+IDIgPyAnLCAnIDogJyAnKTtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0V3JhcERldGFpbHM7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVBhcnRpYWw7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gKlxuICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgXG4gKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICogZXhlY3V0ZWQgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3ZSBtYWtlXG4gKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkge1xuICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLFxuICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgdmFyIGlzQ29tYm8gPVxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgLy8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG4gIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgZGF0YVsyXSA9IHNvdXJjZVsyXTtcbiAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gIGlmICh2YWx1ZSkge1xuICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogc291cmNlWzRdO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gIHZhbHVlID0gc291cmNlWzVdO1xuICBpZiAodmFsdWUpIHtcbiAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgZGF0YVs1XSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs2XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJnUG9zYCBpZiBhdmFpbGFibGUuXG4gIHZhbHVlID0gc291cmNlWzddO1xuICBpZiAodmFsdWUpIHtcbiAgICBkYXRhWzddID0gdmFsdWU7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9BUllfRkxBRykge1xuICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcml0eWAgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICBkYXRhWzBdID0gc291cmNlWzBdO1xuICBkYXRhWzFdID0gbmV3Qml0bWFzaztcblxuICByZXR1cm4gZGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZURhdGE7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwidmFyIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhc2VGaXJzdDtcbiIsInZhciBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0U2xpY2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwidmFyIGFzY2lpVG9BcnJheSA9IHJlcXVpcmUoJy4vX2FzY2lpVG9BcnJheScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgdW5pY29kZVRvQXJyYXkgPSByZXF1aXJlKCcuL191bmljb2RlVG9BcnJheScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcbiIsIi8qKlxuICogVmFsaWRhdGVzIGEgVVMgRHJpdmVycyBMaWNlbnNlIGdpdmVuIGEgdHdvIGxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIFVTXG4gKiBTdGF0ZSB0byB2YWxpZGF0ZSBpdCBpbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGljZW5zZSBEcml2ZXJzIExpY2Vuc2UgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgVHdvIENoYXJhY3RlciBBYmJyZXZpYXRpb24gZm9yIHRoZSBVUyBTdGF0ZSB0byB2YWxpZGF0ZVxuICogdGhlIGxpY2Vuc2UgaW4uXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxpY2Vuc2UgaXMgdmFsaWQgb3Igbm90LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGlzVmFsaWRVU0xpY2Vuc2UgfSA9IHJlcXVpcmUoJ0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlJylcbiAqXG4gKiBjb25zdCB2YWxpZCA9IGlzVmFsaWRVU0xpY2Vuc2UoJzEyMzQ1NjcnLCAnQUwnKVxuICogY29uc29sZS5sb2codmFsaWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBpc1ZhbGlkVVNMaWNlbnNlXG4gKi9cblxudmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpY2Vuc2UsIHN0YXRlKSB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHZhbGlkYXRvcnMgPSBkcml2ZXJzTGljZW5zZVJlZ2V4W3N0YXRlXTtcbiAgaWYgKCF2YWxpZGF0b3JzKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNsZWFuTGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgvW1xccy1dL2csICcnKTtcbiAgdmFyIHJlYXNvbnMgPSB2YWxpZGF0b3JzXG4gICAgLmZpbHRlcihmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAhdmFsLnJlZ2V4LnRlc3QoY2xlYW5MaWNlbnNlKTtcbiAgICB9KVxuICAgIC5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdmFsLmRlc2NyaXB0aW9uO1xuICAgIH0pO1xuICByZXR1cm4gcmVhc29ucy5sZW5ndGggPCB2YWxpZGF0b3JzLmxlbmd0aDtcbn07XG4iLCIvKipcbiAqIFZhbGlkYXRlcyBhIFVTIERyaXZlcnMgTGljZW5zZSBnaXZlbiBhIHR3byBsZXR0ZXIgYWJicmV2aWF0aW9uIG9mIHRoZSBVU1xuICogU3RhdGUgdG8gdmFsaWRhdGUgaXQgaW4uXG4gKiBTaW1pbGFyIHRvIGlzVmFsaWRVU0xpY2Vuc2UgYnV0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSAndmFsaWQnXG4gKiBib29sZWFuIHByb3BlcnR5IGZvciB0aGUgdmFsaWRhdGlvbiBpdHNlbGYsIGFzIHdlbGwgYXMgYSByZWFzb25zIGFycmF5IHRoYXRcbiAqIGF0dGVtcHRzIHRvIGV4cGxhaW4gdGhlIHJlc3VsdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsaWNlbnNlIERyaXZlcnMgTGljZW5zZSB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSBUd28gQ2hhcmFjdGVyIEFiYnJldmlhdGlvbiBmb3IgdGhlIFVTIFN0YXRlIHRvIHZhbGlkYXRlXG4gKiB0aGUgbGljZW5zZSBpbi5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSB2YWxpZGF0aW9uIGFuZCBhIHJlYXNvbnNcbiAqIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NycsICdBTCcpXG4gKiBjb25zb2xlLmxvZyh2YWxpZExpY2Vuc2UudmFsaWQpIC8vIHRydWVcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NzgnLCAnQUwnKSAvL1xuICogY29uc29sZS5sb2codmFsaWRMaWNlbnNlLnJlYXNvbnMpIC8vIFsnTGljZW5zZSBtdXN0IGJlIDEtNyBudW1iZXJzJ11cbiAqXG4gKiBAbmFtZSB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2VcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGljZW5zZSwgc3RhdGUpIHtcbiAgaWYgKHR5cGVvZiBsaWNlbnNlICE9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBzdGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uczogWydMaWNlbnNlIGFuZCBTdGF0ZSBtdXN0IGJlIFN0cmluZ3MnXSB9O1xuICB9XG4gIHZhciB2YWxpZGF0b3JzID0gZHJpdmVyc0xpY2Vuc2VSZWdleFtzdGF0ZV07XG4gIGlmICghdmFsaWRhdG9ycykgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBbJ05vdCBhIHZhbGlkIFVTIFN0YXRlJ10gfTtcbiAgY29uc3QgY2xlYW5MaWNlbnNlID0gbGljZW5zZS5yZXBsYWNlKC9bXFxzLV0vZywgJycpO1xuICB2YXIgcmVhc29ucyA9IHZhbGlkYXRvcnNcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHZhbCkge1xuICAgICAgcmV0dXJuICF2YWwucmVnZXgudGVzdChjbGVhbkxpY2Vuc2UpO1xuICAgIH0pXG4gICAgLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuZGVzY3JpcHRpb247XG4gICAgfSk7XG4gIHJldHVybiB7IHZhbGlkOiByZWFzb25zLmxlbmd0aCA8IHZhbGlkYXRvcnMubGVuZ3RoLCByZWFzb25zIH1cbn07XG4iLCIvKipcbiAqIExpc3Qgb2Ygc3VwcG9ydGVkIFVTIFN0YXRlcyBhcyBhbiBhcnJheVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHN1cHBvcnRlZFN0YXRlcyB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IGlzU3VwcG9ydGVkID0gY3VycmVudFN0YXRlcy5pbmNsdWRlcygnSUwnKVxuICogY29uc29sZS5sb2coaXNTdXBwb3J0ZWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBzdXBwb3J0ZWRTdGF0ZXNcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG4iLCJ2YXIgYmFzZVJhbmdlID0gcmVxdWlyZSgnLi9fYmFzZVJhbmdlJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIHRvRmluaXRlID0gcmVxdWlyZSgnLi90b0Zpbml0ZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZ2U7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAqIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSYW5nZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tIFwiYXBpc2F1Y2VcIjtcbmltcG9ydCB7IGJ0b2EgfSBmcm9tIFwiQmFzZTY0XCI7XG5cbmNsYXNzIEJhc2VBUEkge1xuICBjb25zdHJ1Y3RvcihiYXNlVVJMLCB0d2lsaW9LZXkpIHtcbiAgICBpZiAoYmFzZVVSTCkge1xuICAgICAgdGhpcy5hcGkgPSBjcmVhdGUoe1xuICAgICAgICBiYXNlVVJMLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR3aWxpb0tleSkgeyB0aGlzLnR3aWxpb0tleSA9IHR3aWxpb0tleTsgfVxuICB9XG4gIHNldFRva2VuKHRva2VuKSB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5hcGkuc2V0SGVhZGVycyh7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHNldFN0YXR1c1ByZWZlcmVuY2Uoc3RhdHVzKSB7XG4gICAgaWYgKCFzdGF0dXMpIHJldHVybiB0aGlzO1xuICAgIHRoaXMuYXBpLnNldEhlYWRlcnMoeyBQcmVmZXI6IGBzdGF0dXM9JHtzdGF0dXN9YCB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhcHByb3ZlV29ya2VyID0gKGlkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucHV0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9hcHByb3ZlYCwgcGFyYW1zKTtcbiAgd2l0aGRyYXdXb3JrZXIgPSAoaWQsIHBhcmFtcykgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS93aXRoZHJhd2AsIHBhcmFtcyk7XG4gIHJlamVjdFdvcmtlciA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgL3BhcnRuZXJzL21lL3dvcmtlcnMvJHtpZH0vcmVqZWN0YCwgcGFyYW1zKTtcbiAgZ2V0TWVtYmVyID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3BhcnRuZXJzL21lXCIpO1xuICBnZXRTZXR0aW5ncyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXJ0bmVycy9zZXR0aW5nc1wiKTtcbiAgZ2V0V29ya2VycyA9IHBhcmFtcyA9PlxuICAgIHRoaXMuYXBpLmdldChgL3BhcnRuZXJzL21lL3dvcmtlcnM/cXVlcnk9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWApO1xuICBnZXRQZW5kaW5nV29ya2VycyA9IHBhcmFtcyA9PlxuICAgIHRoaXMuYXBpLmdldChgL2NvaG9ydC9jYW5kaWRhdGVzP3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgZ2V0V29ya2VyID0gaWQgPT4gdGhpcy5hcGkuZ2V0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfT9mdWxsPWZhbHNlYCk7XG4gIGNoZWNrV29ya2VyID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvcGFydG5lcnMvd29ya2Vyc1wiLCBwYXJhbXMpO1xuICB2YWxpZGF0ZVBob25lID0gcGhvbmUgPT5cbiAgICB0aGlzLmFwaS5nZXQoYFBob25lTnVtYmVycy8ke3Bob25lfT9UeXBlPWNhcnJpZXImQ291bnRyeUNvZGU9VVNgLCBudWxsLCB7XG4gICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGBCYXNpYyAke2J0b2EoVFdJTElPX0tFWSl9YCB9XG4gICAgfSk7XG4gIHZhbGlkYXRlRW1haWwgPSBlbWFpbCA9PlxuICAgIHRoaXMuYXBpLmdldChgL3ZlcmlmeV9lbWFpbD9lbWFpbD0ke2VuY29kZVVSSUNvbXBvbmVudChlbWFpbCl9YCk7XG4gIHZhbGlkYXRlU1NOID0gKGVtYWlsX2lkLCBzc24pID0+XG4gICAgdGhpcy5hcGkucG9zdChgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS92YWxpZGF0ZWAsIHtcbiAgICAgIHNzblxuICAgIH0pO1xuICB2YWxpZGF0ZUNhbmRpZGF0ZUVtYWlsID0gKGVtYWlsX2lkLCBlbWFpbCkgPT5cbiAgICB0aGlzLmFwaS5nZXQoXG4gICAgICBgL2NhbmRpZGF0ZV92ZXJpZnlfZW1haWwvJHtlbWFpbF9pZH0/ZW1haWw9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWwpfWBcbiAgICApO1xuICBnZXRDYW5kaWRhdGVEYXRhID0gZW1haWxfaWQgPT5cbiAgICB0aGlzLmFwaS5nZXQoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH1gKTtcbiAgZ2V0SW50ZXJlc3RzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL2ludGVyZXN0c1wiKTtcbiAgZ2V0VHJhbnNwb3J0cyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi90cmFuc3BvcnRzXCIpO1xuICBnZXRQYXltZXRNZXRob2QgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvcGF5bWVudF9zZXR0aW5ncy9wYXJ0bmVyX21ldGhvZHNcIik7XG4gIGdldEJhY2tncm91bmRSZXBvcnQgPSAoZW1haWxfaWQsIHRva2VuKSA9PlxuICAgIHRoaXMuYXBpLmdldChcbiAgICAgIGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L3JlcG9ydD90b2tlbj0ke3Rva2VufWBcbiAgICApO1xuICBwcm92aWRlQ2FuZGlkYXRlQ29uc2VudCA9IChlbWFpbF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH1gLCBwYXJhbXMpO1xuICBwcm92aWRlQ2FuZGlkYXRlQ29uc2VudEFzeW5jID0gKGVtYWlsX2lkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucG9zdChcbiAgICAgIGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L2FzeW5jYCxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gIGdldFRyaWFsU3RhdHVzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL29yZ2FuaXphdGlvbnMvdHJpYWxfc3RhdHVzXCIpO1xuICBuZXdDYW5kaWRhdGUgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvb3JnYW5pemF0aW9ucy9uZXdfY2FuZGlkYXRlXCIpO1xuICBnZXRUZXJtcyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXJ0bmVycy90ZXJtc1wiKTtcbiAgY29uc2VudCA9IHBhcmFtcyA9PiB0aGlzLmFwaS5wb3N0KFwiL3BhcnRuZXJzL21lL2NvbnNlbnRcIiwgcGFyYW1zKTtcbiAgYXBwbHkgPSAoeyBwYXJ0bmVyX25hbWUsIHBhcnRuZXJfaWR9KSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC8ke3BhcnRuZXJfbmFtZX0vJHtwYXJ0bmVyX2lkfWAsIHt9KTtcbiAgYXNzZW50ID0gKGVtYWlsX2lkLCBkYXRhKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoXG4gICAgICBgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS9hc3NlbnRgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIGdldENvaG9ydENvdW50ID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvY29ob3J0L2NvdW50P3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgY3JlYXRlQ29ob3J0ID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvY29ob3J0XCIsIHBhcmFtcyk7XG4gIHJlcXVlc3RDb2hvcnRXb3JrZXJzID0gKGNvaG9ydF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jb2hvcnQvJHtjb2hvcnRfaWR9L3JlcXVlc3RgLCBwYXJhbXMpO1xuICBnZXROb3RlcyA9IGlkID0+IHRoaXMuYXBpLmdldChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2ApO1xuICBzYXZlTm90ZSA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2AsIHBhcmFtcyk7XG4gIHJlc2VuZEVtYWlsID0gaWQgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGBwYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L2VtYWlsL2NvbnNlbnQvcmVzZW5kYCk7XG4gIHBvc3RTZXR0aW5ncyA9ICh1cmwsIHBhcmFtcykgPT4gdGhpcy5hcGkucG9zdCh1cmwsIHBhcmFtcyk7XG4gIGJ0b2FUZXN0ID0gc3RyaW5nID0+IGJ0b2Eoc3RyaW5nKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VBUEk7IiwiLy9UdXJuIFByaW1hcnkgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IHByaW1hcnkgPSBcIiMyRDMwNDdcIjsgLy9Db29sR3JheSBvciBTcGFjZUNhZGV0XG5leHBvcnQgY29uc3Qgc2Vjb25kYXJ5ID0gXCIjMDBEOUNEXCI7IC8vVHVycXVvaXNlXG5leHBvcnQgY29uc3QgZW1lcmFsZCA9IFwiIzBlZDA2N1wiO1xuZXhwb3J0IGNvbnN0IHRhcnRPcmFuZ2UgPSBcIiNmYjRkNDlcIjtcbmV4cG9ydCBjb25zdCB5ZWxsb3dPcmFuZ2UgPSBcIiNmYWE3M2NcIjtcblxuLy9UdXJuIEdyZXkgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IHNsYXRlR3JheSA9IFwiIzVmN2Q5NVwiO1xuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzliYjFjOFwiO1xuZXhwb3J0IGNvbnN0IHBlcml3aW5rbGUgPSBcIiNiZmNkZGRcIjtcbmV4cG9ydCBjb25zdCBhbGljZUJsdWUgPSBcIiNlMWU4ZjNcIjtcbmV4cG9ydCBjb25zdCBzbW9rZVdoaXRlID0gXCIjZjdmOWZjXCI7XG5cbi8vVHVybiBBbGVydHMgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IGFsZXJ0MCA9IHNsYXRlR3JheTtcbmV4cG9ydCBjb25zdCBhbGVydDEgPSBlbWVyYWxkO1xuZXhwb3J0IGNvbnN0IGFsZXJ0MiA9IHRhcnRPcmFuZ2U7XG5leHBvcnQgY29uc3QgYWxlcnQzID0geWVsbG93T3JhbmdlO1xuZXhwb3J0IGNvbnN0IGNlcnVsZWFuQmx1ZSA9IFwiIzQzNTdhZFwiO1xuXG4vL1R1cm4gU2Vjb25kYXJ5IFBhbGV0dGUgMVxuZXhwb3J0IGNvbnN0IHBlYWNoID0gXCIjZjljYjljXCI7XG5leHBvcnQgY29uc3QgYmFieVBpbmsgPSBcIiNmNGNjY2NcIjtcbmV4cG9ydCBjb25zdCBzcGFuaXNoUGluayA9IFwiI2U2YjhhZlwiO1xuZXhwb3J0IGNvbnN0IGJlYXVCbHVlID0gXCIjY2ZlMmYzXCI7XG5leHBvcnQgY29uc3QgY3VsdHVyZWQgPSBcIiNlM2U5ZWRcIjtcblxuLy9UdXJuIFNlY29uZGFyeSBQYWxldHRlIDJcbmV4cG9ydCBjb25zdCBibHVlQmVsbCA9IFwiI2I0YTdkNlwiO1xuZXhwb3J0IGNvbnN0IGJhYnlCbHVlRXllcyA9IFwiIzlmYzVlOFwiO1xuZXhwb3J0IGNvbnN0IHBvd2RlckJsdWUgPSBcIiNiN2VjZWNcIjtcbmV4cG9ydCBjb25zdCBob25leURldyA9IFwiI2Q5ZWFkM1wiO1xuZXhwb3J0IGNvbnN0IGJ1ZmYgPSBcIiNmZmU1OTlcIjtcblxuLy9PdGhlcnNcbmV4cG9ydCBjb25zdCBibGFjayA9IFwiIzAwMFwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlID0gXCIjZmZmXCI7XG5cbi8vTm90aWNlIGNvbG9yc1xuZXhwb3J0IGNvbnN0IG5vdGljZU11dGVkID0gc2xhdGVHcmF5O1xuZXhwb3J0IGNvbnN0IG5vdGljZUVycm9yID0gXCIjZmY2YzY5XCI7XG5leHBvcnQgY29uc3Qgbm90aWNlV2FybmluZyA9IFwiI2ZhYTAzY1wiO1xuZXhwb3J0IGNvbnN0IG5vdGljZVN1Y2Nlc3MgPSBcIiMxM2MwNjNcIjtcbmV4cG9ydCBjb25zdCBub3RpY2VJbmZvID0gc2xhdGVHcmF5O1xuIiwiY29uc3QgcGFyc2VQeXRob25EYXRlID0gZGF0ZSA9PiB7XG4gIGlmICghaXNOYU4ocGFyc2VJbnQoZGF0ZSwgMTApKSkge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlICogMTAwMCk7XG4gICAgY29uc3QgdGltZSA9IGQuZ2V0VGltZSgpO1xuICAgIGlmICh0aW1lKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGltZSArIGQuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwICogMTAwMCk7XG4gICAgICBjb25zdCBvZmZzZXQgPSBkLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MDtcbiAgICAgIGNvbnN0IGhvdXJzID0gZC5nZXRIb3VycygpO1xuICAgICAgbmV3RGF0ZS5zZXRIb3Vycyhob3VycyAtIG9mZnNldCk7XG4gICAgICByZXR1cm4gbmV3RGF0ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXJzZVB5dGhvbkRhdGU7XG4iLCJpbXBvcnQgcGFyc2VQeXRob25EYXRlIGZyb20gXCIuL3BhcnNlLXB5dGhvbi1kYXRlXCI7XG5cbmNvbnN0IGZvcm1hdERhdGUgPSBkYXRlID0+IHtcbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlUHl0aG9uRGF0ZShkYXRlKTtcbiAgaWYgKCFwYXJzZWREYXRlKSByZXR1cm4gXCJOL0FcIjtcbiAgcmV0dXJuIGAke3BhcnNlZERhdGUuZ2V0TW9udGgoKSArXG4gICAgMX0vJHtwYXJzZWREYXRlLmdldERhdGUoKX0vJHtwYXJzZWREYXRlLmdldEZ1bGxZZWFyKCl9YDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREYXRlO1xuIiwiY29uc3QgZm9ybWF0RW1haWwgPSBlbWFpbCA9PiB7XG4gIGlmICh0eXBlb2YgZW1haWwgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gZW1haWwucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdEVtYWlsO1xuIiwiY29uc3QgZm9ybWF0TmFtZSA9IG5hbWUgPT4ge1xuICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdE5hbWU7XG4iLCJjb25zdCBmb3JtYXRQaG9uZSA9IChwaG9uZSwgZW5jcnlwdGVkID0gZmFsc2UpID0+IHtcbiAgaWYgKHR5cGVvZiBwaG9uZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGxldCBwaG9uZU51bWJlciA9IGVuY3J5cHRlZFxuICAgID8gcGhvbmVcbiAgICA6IHBob25lLnJlcGxhY2UoL1xcRC9nLCBcIlwiKS5zdWJzdHJpbmcoMCwgMTEpO1xuICBsZXQgYXJlYUNvZGU7XG4gIGlmIChwaG9uZU51bWJlci5sZW5ndGggPCAxMCkgcmV0dXJuIHBob25lTnVtYmVyO1xuICBpZiAocGhvbmVOdW1iZXIubGVuZ3RoID4gMTApIHtcbiAgICBhcmVhQ29kZSA9IHBob25lTnVtYmVyWzBdO1xuICAgIHBob25lTnVtYmVyID0gcGhvbmVOdW1iZXIuc3Vic3RyaW5nKDEsIDExKTtcbiAgfVxuICBwaG9uZU51bWJlciA9IHBob25lTnVtYmVyLm1hdGNoKC8uezEsM30vZyk7XG4gIHJldHVybiByZW5kZXJQaG9uZSh7IHBob25lOiBwaG9uZU51bWJlciwgZW5jcnlwdGVkLCBhcmVhQ29kZSB9KTtcbn07XG5cbmNvbnN0IHJlbmRlclBob25lID0gKHsgcGhvbmUsIGVuY3J5cHRlZCwgYXJlYUNvZGUgfSkgPT4ge1xuICBsZXQgcGhvbmVOdW1iZXIgPSBlbmNyeXB0ZWRcbiAgICA/IGAoJHtwaG9uZVswXX0pICR7cGhvbmVbMV19ICR7cGhvbmVbMl19JHtwaG9uZVszXX1gXG4gICAgOiBgKCR7cGhvbmVbMF19KSAke3Bob25lWzFdfS0ke3Bob25lWzJdfSR7cGhvbmVbM119YDtcbiAgcGhvbmVOdW1iZXIgPSBhcmVhQ29kZSA/IGAke2FyZWFDb2RlfSAke3Bob25lTnVtYmVyfWAgOiBwaG9uZU51bWJlcjtcbiAgcmV0dXJuIHBob25lTnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UGhvbmU7XG4iLCJjb25zdCBmb3JtYXRTU04gPSBzc24gPT4ge1xuICBpZiAodHlwZW9mIHNzbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IHNzbk51bWJlciA9IHNzbi5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDkpO1xuICBpZiAoc3NuTnVtYmVyLmxlbmd0aCA8IDkpIHJldHVybiBzc25OdW1iZXI7XG4gIHJldHVybiBgJHtzc25OdW1iZXIuc3Vic3RyaW5nKDAsIDMpfS0ke3Nzbk51bWJlci5zdWJzdHJpbmcoXG4gICAgMyxcbiAgICA1XG4gICl9LSR7c3NuTnVtYmVyLnN1YnN0cmluZyg1LCA5KX1gO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0U1NOO1xuIiwiY29uc3QgZm9ybWF0WmlwY29kZSA9IHppcGNvZGUgPT4ge1xuICBpZiAodHlwZW9mIHppcGNvZGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gemlwY29kZS5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDUpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0WmlwY29kZTtcbiIsImNvbnN0IGdldFJlamVjdE1lc3NhZ2UgPSBwYXJ0bmVyX3R5cGUgPT4ge1xuICBpZiAoIVtcIlJJU0tfTUFOQUdFTUVOVFwiLCBcIkZDUkFfRVwiLCBcIkZDUkFfTlwiLCBcIkZDUkFcIl0uaW5jbHVkZXMocGFydG5lcl90eXBlKSlcbiAgICByZXR1cm4gXCJSZWplY3RcIjtcbiAgY29uc3QgcmVqZWN0TWVzc2FnZXMgPSB7XG4gICAgUklTS19NQU5BR0VNRU5UOiBcIlJlamVjdFwiLFxuICAgIEZDUkE6IFwiUHJlLUFkdmVyc2UgQWN0aW9uXCIsXG4gICAgRkNSQV9FOiBcIlByZS1BZHZlcnNlIEFjdGlvblwiLFxuICAgIEZDUkFfTjogXCJBZHZlcnNlIEFjdGlvblwiXG4gIH07XG4gIHJldHVybiByZWplY3RNZXNzYWdlc1twYXJ0bmVyX3R5cGVdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmVqZWN0TWVzc2FnZTtcbiIsImV4cG9ydCBjb25zdCBnZXRTdGF0dXMgPSBzdGF0dXMgPT4ge1xuICBjb25zdCBzdGF0dXNNYXAgPSB7XG4gICAgcmV2aWV3OiBcInJldmlld2luZ1wiLFxuICAgIHBlbmRpbmc6IFwiY29uc2lkZXJcIixcbiAgICBcInJldmlld19faWRlbnRpdHlcIjogXCJ2ZXJpZnlpbmdcIixcbiAgICBcInJldmlld19fbXZyXCI6IFwiQ29tcGxpYW5jZSBSZXZpZXdcIixcbiAgICBcInJldmlld19fc29cIjogXCJDb21wbGlhbmNlIFJldmlld1wiLFxuICAgIFwicmV2aWV3X19xYVwiOiBcIkNvbXBsaWFuY2UgUmV2aWV3XCIsXG4gICAgaW5pdGlhdGVkOiBcIlN0b3JlZFwiXG4gIH07XG5cbiAgcmV0dXJuIHN0YXR1c01hcFtzdGF0dXNdIHx8IHN0YXR1cztcbn07XG4iLCJjb25zdCBpc0RhdGUgPSB2YWx1ZSA9PiB7XG4gIGlmIChpc05hTihwYXJzZUludCh2YWx1ZSwgMTApKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUgKiAxMDAwKTtcbiAgY29uc3QgcmlnaHROb3cgPSBuZXcgRGF0ZSgpO1xuICBpZiAoZGF0ZSA+IHJpZ2h0Tm93KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkYXRlLmdldFllYXIoKSA+IDEwMDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlzRGF0ZTtcbiIsImNvbnN0IGlzT2JqZWN0ID0gZGF0YSA9PiAhIWRhdGEgJiYgZGF0YS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcbiIsImNvbnN0IGlzVXJsID0gdXJsU3RyaW5nID0+IHtcbiAgY29uc3QgcmVnZXhwID0gLyhmdHB8aHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAIVxcLS9dKSk/LztcbiAgcmV0dXJuIHJlZ2V4cC50ZXN0KHVybFN0cmluZyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc1VybDtcbiIsImNvbnN0IHRlcm1zID0gW1wiVHVybiBUZWNobm9sb2dpZXMgSW5jLlwiLCBcIltDT01QQU5ZXVwiXTtcbmNvbnN0IGxlZ2FsUmVwbGFjZSA9IChvcmlnaW5hbCA9IFwiXCIsIHJlcGxhY2VtZW50ID0gXCJcIikgPT4ge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgbGV0IHJldHVyblZhbCA9IG9yaWdpbmFsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wbHVzcGx1c1xuICAgIHJldHVyblZhbCA9IHJldHVyblZhbC5yZXBsYWNlKHRlcm1zW2ldLCByZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJldHVyblZhbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxlZ2FsUmVwbGFjZTtcbiIsImNvbnN0IG1hc2tOYW1lID0gbmFtZSA9PlxuICB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBuYW1lLmxlbmd0aCA+IDAgPyBgJHtuYW1lLnNsaWNlKDAsIDEpfS5gIDogbmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgbWFza05hbWU7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSBcIi4vaXMtb2JqZWN0XCI7XG5cbmNvbnN0IG9iamVjdFRvUXVlcnkgPSBxdWVyeSA9PiB7XG4gIGlmICghaXNPYmplY3QocXVlcnkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcXVlcnlBcnJheSA9IGtleXMubWFwKGtleSA9PiBgJHtrZXl9PSR7cXVlcnlba2V5XX1gKTtcbiAgcmV0dXJuIGA/JHtxdWVyeUFycmF5LmpvaW4oXCImXCIpfWA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvYmplY3RUb1F1ZXJ5O1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG5jb25zdCBwYXJzZVF1ZXJ5ID0gcXVlcnkgPT5cbiAgXy5pc1N0cmluZyhxdWVyeSlcbiAgICA/IF8uZnJvbVBhaXJzKFxuICAgICAgICBfLm1hcChxdWVyeS5zbGljZSgxKS5zcGxpdChcIiZcIiksIGZ1bmN0aW9uKHBhcmFtcykge1xuICAgICAgICAgIHZhciBwID0gcGFyYW1zLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICByZXR1cm4gW3BbMF0sIGRlY29kZVVSSUNvbXBvbmVudChwWzFdKV07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgOiBxdWVyeTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VRdWVyeTtcbiIsImltcG9ydCAqIGFzIGNvbG9ycyBmcm9tIFwiLi4vc3R5bGVzL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgcGlja0NvbG9yID0gc3RhdHVzID0+IHtcbiAgc3dpdGNoICh0eXBlb2Ygc3RhdHVzID09PSBcInN0cmluZ1wiID8gc3RhdHVzLnRvTG93ZXJDYXNlKCkgOiBzdGF0dXMpIHtcbiAgICBjYXNlIFwiZmlyc3Rfbm90aWNlXCI6XG4gICAgY2FzZSBcInNlY29uZF9ub3RpY2VcIjpcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJjb25zaWRlclwiOlxuICAgICAgcmV0dXJuIGNvbG9ycy5ub3RpY2VXYXJuaW5nO1xuICAgIGNhc2UgXCJ1bnZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIm5vdF92ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJmcmF1ZFwiOlxuICAgIGNhc2UgXCJub3RfbWF0Y2hlZFwiOlxuICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgIGNhc2UgXCJkZWNlYXNlZFwiOlxuICAgIGNhc2UgXCJ3aXRoZHJhd25cIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlRXJyb3I7XG4gICAgY2FzZSBcInZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIm1hdGNoZWRcIjpcbiAgICBjYXNlIFwidmFsaWRcIjpcbiAgICBjYXNlIFwicmVhZHlcIjpcbiAgICBjYXNlIFwiY29tcGxldGVcIjpcbiAgICBjYXNlIFwiY2xlYXJcIjpcbiAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgY2FzZSBcInJhbmRvbWl6ZWRcIjpcbiAgICBjYXNlIFwiYXBwcm92ZWRcIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlU3VjY2VzcztcbiAgICBjYXNlIFwicHJvY2Vzc2luZ1wiOlxuICAgIGNhc2UgXCJyZXZpZXdpbmdcIjpcbiAgICBjYXNlIFwicmV2aWV3XCI6XG4gICAgY2FzZSBcImNvbnNlbnRcIjpcbiAgICBjYXNlIFwiZW1haWxlZFwiOlxuICAgIGNhc2UgXCJpbml0aWF0ZWRcIjpcbiAgICBjYXNlIFwiYXR0ZW50aW9uXCI6XG4gICAgY2FzZSBcInZlcmlmeWluZ1wiOlxuICAgIGNhc2UgXCJyZXZpZXdfX212clwiOlxuICAgIGNhc2UgXCJyZXZpZXdfX3FhXCI6XG4gICAgICByZXR1cm4gY29sb3JzLm5vdGljZUluZm87XG4gICAgY2FzZSBcIm5vbmVcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiZ3JheVwiO1xuICB9XG59O1xuIiwiaW1wb3J0ICogYXMgY29sb3JzIGZyb20gXCIuLi9zdHlsZXMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IHBpY2tTY29yZUNvbG9yID0gc2NvcmUgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHNjb3JlLCAxMCk7XG4gIGlmICh2YWx1ZSA+IDg5KSByZXR1cm4gY29sb3JzLm5vdGljZVN1Y2Nlc3M7XG4gIGlmICh2YWx1ZSA+IDY5KSByZXR1cm4gY29sb3JzLm5vdGljZVdhcm5pbmc7XG4gIHJldHVybiBjb2xvcnMubm90aWNlRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwaWNrU2NvcmVDb2xvcjsiLCJleHBvcnQgY29uc3QgcHJldHRpZnlEYXRlID0gZGF0ZVN0cmluZyA9PiB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgY29uc3QgbW9udGggPSBkLnRvVVRDU3RyaW5nKCkuc2xpY2UoOCwgMTEpO1xuICBjb25zdCBERCA9IGQudG9VVENTdHJpbmcoKS5zbGljZSg1LCA3KTtcbiAgY29uc3QgWVlZWSA9IGQudG9VVENTdHJpbmcoKS5zbGljZSgxMiwgMTYpO1xuICByZXR1cm4gYCR7bW9udGh9ICR7RER9LCAke1lZWVl9YDtcbn07XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBjb25zdCBmYWxzeVN0cmluZ3MgPSBbXCJOb25lXCIsIFwibm9uZVwiLCBcIk4vQVwiXTtcblxuY29uc3QgdmFsdWVFeGlzdHMgPSB2YWx1ZSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiAhXy5pc0VtcHR5KHZhbHVlKTtcbiAgaWYgKF8uaW5kZXhPZihmYWxzeVN0cmluZ3MsIHZhbHVlKSA+IC0xKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdmFsdWVFeGlzdHM7XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgdmFsdWVFeGlzdHMgZnJvbSBcIi4vdmFsdWUtZXhpc3RzXCI7XG5cbmNvbnN0IHJlbmRlckRldGFpbFZhbHVlID0gKHZhbHVlLCBkZWVwID0gZmFsc2UpID0+IHtcbiAgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoZGVlcClcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoXG4gICAgICAgIHZhbCA9PlxuICAgICAgICAgIF8uaXNPYmplY3QodmFsKVxuICAgICAgICAgICAgPyByZW5kZXJOZXN0ZWRPYmplY3QodmFsLCBkZWVwKVxuICAgICAgICAgICAgOiByZW5kZXJEZXRhaWxWYWx1ZSh2YWwsIGRlZXApXG4gICAgICApO1xuICAgIHJldHVybiB2YWx1ZS5qb2luKFwiIC8gXCIpO1xuICB9XG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIHJlbmRlck5lc3RlZE9iamVjdCh2YWx1ZSwgZGVlcCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmNvbnN0IHJlbmRlck5lc3RlZE9iamVjdCA9IChuZXN0ZWQgPSB7fSwgZGVlcCA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IHZhbHVlcyA9IF8uZmlsdGVyKG5lc3RlZCwgdmFsdWUgPT4gdmFsdWVFeGlzdHModmFsdWUpKTtcbiAgcmV0dXJuIHZhbHVlcy5tYXAodmFsdWUgPT4gcmVuZGVyRGV0YWlsVmFsdWUodmFsdWUsIGRlZXApKS5qb2luKFwiIC8gXCIpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyRGV0YWlsVmFsdWU7XG4iLCJpbXBvcnQgdmFsdWVFeGlzdHMgZnJvbSBcIi4vdmFsdWUtZXhpc3RzXCI7XG5cbmNvbnN0IHNlbGVjdE1hc3RlcktleSA9IChkYXRhLCBwcm9wZXJ0eSkgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBcIlwiO1xuICBsZXQgbWFzdGVyS2V5O1xuICBjb25zdCBibHVlcHJpbnQgPSBkYXRhWzBdO1xuICBpZiAodmFsdWVFeGlzdHMoYmx1ZXByaW50W3Byb3BlcnR5XSkpIHtcbiAgICBtYXN0ZXJLZXkgPSBwcm9wZXJ0eTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwb3NpYmxlS2V5cyA9IE9iamVjdC5rZXlzKGJsdWVwcmludCk7XG4gICAgbWFzdGVyS2V5ID0gcG9zaWJsZUtleXMuZmluZChrZXkgPT4gdmFsdWVFeGlzdHMoYmx1ZXByaW50W2tleV0pKTtcbiAgfVxuICByZXR1cm4gbWFzdGVyS2V5O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0TWFzdGVyS2V5O1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG4vKiogQG5hbWVzcGFjZSB1dGlsaXR5X2Z1bmN0aW9ucyAqL1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gdGhlIHR5cGVvZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHwgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBmYWxsYmFjayAtIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gdXBkYXRlIHRoZSBvYmplY3Qga2V5IHdpdGhcbiAqIEBkZXNjIFNldHMgYSB2YWx1ZSBvZiBhIHNwZWNpZmljIHR5cGUgb24gcHJvdmlkZWQgb2JqZWN0J3Mgc3RpcHVsYXRlZCBwcm9wZXJ0eS9rZXkgd2l0aCBhbiBvcHRpb25hbCBkZWZhdWx0L2ZhbGxiYWNrIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRWYWx1ZSA9ICh0eXBlLCBzZWxmLCBwcm9wZXJ0eSwgZmFsbGJhY2ssIHZhbHVlID0gZmFsbGJhY2spID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICogQHBhcmFtIHsqfSBmYWxsYmFjayAtIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gdXBkYXRlIHRoZSBvYmplY3Qga2V5IHdpdGhcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gZmFjdG9yeSB0byBoYXJkIGJha2UgdGhlIHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkIGFuZCBhIGZhbGxiYWNrIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE9wdGlvbiA9IChcbiAgc2VsZixcbiAgcHJvcGVydHksXG4gIG9wdGlvbnMsXG4gIGZhbGxiYWNrLFxuICB2YWx1ZSA9IGZhbGxiYWNrXG4pID0+IHtcbiAgY29uc3QgYWxsb3dlZCA9IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogc2VsZltvcHRpb25zXTtcbiAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB0cnV0aHkgdmFsdWUgdG8gYmUgc2V0XG4gKiBAZGVzYyBXaWxsIHNldCBhIHRydXRoeSB2YWx1ZSBhbmQgaWdub3JlIGFueXRoaW5nIHRoYXQgY2FzdHMgdG8gZmFsc2UgKCEhKVxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJ1dGh5ID0gKHNlbGYsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIHNlbGZbcHJvcGVydHldID0gdmFsdWU7XG59O1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIGZhbHN5IHZhbHVlIHRvIGJlIHNldFxuICogQGRlc2MgV2lsbCBzZXQgYSBmYWxzeSB2YWx1ZSBhbmQgaWdub3JlIGFueXRoaW5nIHRoYXQgY2FzdHMgdG8gdHJ1ZSAoISEhKVxuICovXG5leHBvcnQgY29uc3Qgc2V0RmFsc3kgPSAoc2VsZiwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSAhdmFsdWU7XG59O1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAZGVzYyBUb2dnbGVzIGEgYm9vbGVhbiB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlQm9vbCA9IChzZWxmLCBwcm9wZXJ0eSkgPT4gKCkgPT4ge1xuICBpZiAodHlwZW9mIHNlbGZbcHJvcGVydHldICE9PSBcImJvb2xlYW5cIikgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9ICFzZWxmW3Byb3BlcnR5XTtcbn07XG5cbi8qKiBAbmFtZXNwYWNlIGZ1bmN0aW9uX2ZhY3RvcmllcyAqL1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAaW1wbGVtZW50cyB7c2V0VmFsdWV9XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIGJvb2xlYW4sIHN0cmluZywgb2JqZWN0LCBudWxsLCBldGMuXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7c2V0VmFsdWV9IC0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAqIEBkZXNjIEZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSB2YWx1ZSBzZXR0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHNldHRlckZhY3RvcnkgPSAodHlwZSwgc2VsZiwgcHJvcGVydHksIGZhbGxiYWNrID0gdW5kZWZpbmVkKSA9PlxuICBfLnBhcnRpYWwoc2V0VmFsdWUsIHR5cGUsIHNlbGYsIHByb3BlcnR5LCBmYWxsYmFjayk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHtzZXR0ZXJGYWN0b3J5fVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBib29sZWFuLCBzdHJpbmcsIG9iamVjdCwgbnVsbCwgZXRjLlxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggYXBwbGllZCBhcmd1bWVudHNcbiAqIEBkZXNjIEEgY3VycmllZCBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgdmFsdWUgc2V0dGVyXG4gKi9cbmV4cG9ydCBjb25zdCBzZXR0ZXJGYWN0b3J5Q3VycmllZCA9IF8uY3Vycnkoc2V0dGVyRmFjdG9yeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHt0b2dnbGVCb29sfVxuICogQGRlc2MgQSBjdXJyaWVkIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgdG9nZ2xlQm9vbCgpIHdpdGggYXBwbGllZCBhcmd1bWVudHNcbiAqIEByZXR1cm5zIHt0b2dnbGVCb29sfSBBIGN1cnJpZWQgdmVyc2lvbiBvZiB0aGUgdG9nZ2xlQm9vbCBmdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlQm9vbEN1cnJpZWQgPSBfLmN1cnJ5KHRvZ2dsZUJvb2wpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYSB2YWx1ZSBzZXR0ZXIgd2l0aCBwcmUtcG9wdWxhdGVkIGRlcGVuZGVuY2llc1xuICogQGRlc2MgQSBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgc3RyaW5nIHZhbHVlIHNldHRlciwgaWYgdmFsdWUgaXMgbm90IGEgc3RyaW5nIGV4aXRzIHdpdGhvdXQgc2lkZS1lZmZlY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTdHJpbmdGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJzdHJpbmdcIik7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhIHZhbHVlIHNldHRlciB3aXRoIHByZS1wb3B1bGF0ZWQgZGVwZW5kZW5jaWVzXG4gKiBAZGVzYyBBIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSBudW1iZXIgdmFsdWUgc2V0dGVyLCBpZiB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgZXhpdHMgd2l0aG91dCBzaWRlLWVmZmVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE51bWJlckZhY3RvcnkgPSBzZXR0ZXJGYWN0b3J5Q3VycmllZChcIm51bWJlclwiKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggcHJlLXBvcHVsYXRlZCBkZXBlbmRlbmNpZXNcbiAqIEBkZXNjIEEgZmFjdG9yeSBmb3IgZ2VuZXJhdGluZyBhIGJvb2xlYW4gdmFsdWUgc2V0dGVyLCBpZiB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgZXhpdHMgd2l0aG91dCBzaWRlLWVmZmVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEJvb2xGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJib29sZWFuXCIpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAZXh0ZW5kcyB7c2V0VHJ1dGh5fVxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdHJ1dGh5IHZhbHVlIHRvIGJlIHNldFxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJ1dGh5Q3VycmllZCA9IF8uY3Vycnkoc2V0VHJ1dGh5KTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQGV4dGVuZHMge3NldFRydXRoeX1cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIGZhbHN5IHZhbHVlIHRvIGJlIHNldFxuICovXG5leHBvcnQgY29uc3Qgc2V0RmFsc3lDdXJyaWVkID0gXy5jdXJyeShzZXRGYWxzeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBpbXBsZW1lbnRzIHtzZXRPcHRpb259XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsoc3RyaW5nfGFycmF5KX0gb3B0aW9ucyAtIHN0cmluZyBrZXkgb2Ygc2VsZiBvYmplY3QgdGhhdCBob2xkcyB0aGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhbiBhcnJheSBvZiBjaG9pY2VzXG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtzZXRPcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb25GYWN0b3J5ID0gKFxuICBzZWxmLFxuICBwcm9wZXJ0eSxcbiAgb3B0aW9ucyxcbiAgZmFsbGJhY2sgPSB1bmRlZmluZWRcbikgPT4gXy5wYXJ0aWFsKHNldE9wdGlvbiwgc2VsZiwgcHJvcGVydHksIG9wdGlvbnMsIGZhbGxiYWNrKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQGV4dGVuZHMge3NldE9wdGlvbkZhY3Rvcnl9XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsoc3RyaW5nfGFycmF5KX0gb3B0aW9ucyAtIHN0cmluZyBrZXkgb2Ygc2VsZiBvYmplY3QgdGhhdCBob2xkcyB0aGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhbiBhcnJheSBvZiBjaG9pY2VzXG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtzZXRPcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb25GYWN0b3J5Q3VycmllZCA9IF8uY3Vycnkoc2V0T3B0aW9uRmFjdG9yeSk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZGVzYyBVc2VkIHRvIGNyZWF0ZSBtb2J4IHJlYWR5IG1vZGVscyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBzZXR0ZXJzIGJvb3RzdHJhcHBlZFxuICovXG5leHBvcnQgY2xhc3MgU2V0dGVyIHtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBzdHJpbmcgc2V0dGVyXG4gICAqL1xuICBzZXRTdHJpbmdGYWN0b3J5ID0gc2V0U3RyaW5nRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBudW1iZXIgc2V0dGVyXG4gICAqL1xuICBzZXROdW1iZXJGYWN0b3J5ID0gc2V0TnVtYmVyRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBib29sZWFuIHNldHRlclxuICAgKi9cbiAgc2V0Qm9vbEZhY3RvcnkgPSBzZXRCb29sRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgdHJ1dGh5IHNldHRlclxuICAgXG4gICAqL1xuICBzZXRUcnV0aHlGYWN0b3J5ID0gc2V0VHJ1dGh5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgZmFsc3kgc2V0dGVyXG4gICBcbiAgICovXG4gIHNldEZhbHN5RmFjdG9yeSA9IHNldEZhbHN5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGFuIG9wdGlvbiBzZXR0ZXJcbiAgICovXG4gIHNldE9wdGlvbkZhY3RvcnkgPSBzZXRPcHRpb25GYWN0b3J5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcGFyYW0ge2FycmF5fSBvcHRpb25zIC0gYW4gYXJyYXkgb2YgdGhlIHBvc3NpYmxlIGNob2ljZXMgYWxsb3dlZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgYm9vbGVhbiB0b2dnbGVyXG4gICAqL1xuICB0b2dnbGVCb29sRmFjdG9yeSA9IHRvZ2dsZUJvb2xDdXJyaWVkKHRoaXMpO1xufVxuIiwiZnVuY3Rpb24gc3RvcmFnZU1vY2soKSB7XG4gIGNvbnN0IHN0b3JhZ2UgPSB7fTtcblxuICByZXR1cm4ge1xuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xuICAgICAgc3RvcmFnZVtrZXldID0gdmFsdWUgfHwgXCJcIjtcbiAgICB9LFxuICAgIGdldEl0ZW0oa2V5KSB7XG4gICAgICByZXR1cm4ga2V5IGluIHN0b3JhZ2UgPyBzdG9yYWdlW2tleV0gOiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcbiAgICAgIGRlbGV0ZSBzdG9yYWdlW2tleV07XG4gICAgfSxcbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0b3JhZ2UpLmxlbmd0aDtcbiAgICB9LFxuICAgIGtleShpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RvcmFnZSk7XG4gICAgICByZXR1cm4ga2V5c1tpXSB8fCBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RvcmFnZU1vY2s7XG4iLCJjb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHZhbHVlID4gMDtcbiAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcbiAgICAgIHJldHVybiAhKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5sZW5ndGggPT09IDApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRvQm9vbGVhbjtcbiIsImltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCByZWxhdGl2ZVRpbWUgZnJvbSBcImRheWpzL3BsdWdpbi9yZWxhdGl2ZVRpbWVcIjtcbmltcG9ydCB1dGMgZnJvbSBcImRheWpzL3BsdWdpbi91dGNcIjtcbmltcG9ydCBwYXJzZVB5dGhvbkRhdGUgZnJvbSBcIi4vcGFyc2UtcHl0aG9uLWRhdGVcIjtcblxuZGF5anMuZXh0ZW5kKHJlbGF0aXZlVGltZSk7XG5kYXlqcy5leHRlbmQodXRjKTtcblxuY29uc3QgdG9SZWxhdGl2ZURhdGUgPSBkYXRlID0+IHtcbiAgaWYgKHR5cGVvZiBkYXRlICE9PSBcIm51bWJlclwiKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlUHl0aG9uRGF0ZShkYXRlKTtcbiAgaWYgKCFwYXJzZWREYXRlKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcmVsYXRpdmVEYXRlID0gZGF5anMocGFyc2VkRGF0ZSk7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjT2Zmc2V0KHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIGNvbnN0IGFkanVzdGVkTm93ID0gbm93LnN1YnRyYWN0KHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwLCBcImhvdXJcIik7XG4gIGlmIChhZGp1c3RlZE5vdy5kaWZmKHJlbGF0aXZlRGF0ZSwgXCJkYXlcIikgPCA4KSByZXR1cm4gcmVsYXRpdmVEYXRlLmZyb20oYWRqdXN0ZWROb3cpO1xuICByZXR1cm4gcmVsYXRpdmVEYXRlLmZvcm1hdChcIk0vREQvWVlZWVwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b1JlbGF0aXZlRnJvbUlTTyA9IGRhdGUgPT4ge1xuICBpZiAodHlwZW9mIGRhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIk4vQVwiO1xuICBjb25zdCByZWxhdGl2ZURhdGUgPSBkYXlqcyhkYXRlKTtcbiAgaWYgKCFyZWxhdGl2ZURhdGUuaXNWYWxpZCgpKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3Qgbm93ID0gZGF5anMoKS51dGNPZmZzZXQocmVsYXRpdmVEYXRlLnV0Y09mZnNldCgpKTtcbiAgaWYgKG5vdy5kaWZmKHJlbGF0aXZlRGF0ZSwgXCJkYXlcIikgPCA4KSByZXR1cm4gcmVsYXRpdmVEYXRlLmZyb20obm93KTtcbiAgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mb3JtYXQoXCJNL0REL1lZWVlcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0b1JlbGF0aXZlRGF0ZTtcbiIsImltcG9ydCB7IHVwcGVyRmlyc3QgfSBmcm9tIFwibG9kYXNoXCI7XG5cbmNvbnN0IHRvU2VudGVuY2VDYXNlID0gc3RyID0+IHtcbiAgbGV0IHNlbnRlbmNlID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHBlcmlvZCA9IFwiLiBcIjtcbiAgY29uc3QgZXhjbGFtYXRpb24gPSBcIiEgXCI7XG4gIGNvbnN0IHF1ZXN0aW9uID0gXCI/IFwiO1xuICBjb25zdCB0ZXJtaW5hdGlvbnMgPSBbcGVyaW9kLCBleGNsYW1hdGlvbiwgcXVlc3Rpb25dO1xuICB0ZXJtaW5hdGlvbnMuZm9yRWFjaCh0ZXJtaW5hdGlvbiA9PiB7XG4gICAgc2VudGVuY2UgPSBzZW50ZW5jZVxuICAgICAgLnNwbGl0KHRlcm1pbmF0aW9uKVxuICAgICAgLm1hcCh1cHBlckZpcnN0KVxuICAgICAgLmpvaW4odGVybWluYXRpb24pO1xuICB9KTtcbiAgcmV0dXJuIHNlbnRlbmNlO1xufTtcbmV4cG9ydCBkZWZhdWx0IHRvU2VudGVuY2VDYXNlO1xuIiwiY29uc3QgdG9UaXRsZUNhc2UgPSBzdHIgPT4ge1xuICBjb25zdCBzdHJpbmcgPSB0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiID8gc3RyIDogU3RyaW5nKHN0cik7XG4gIGNvbnN0IHN0cl9sb3dlcmNhc2VkID0gc3RyaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHdvcmRzID0gc3RyX2xvd2VyY2FzZWQuc3BsaXQoXCIgXCIpO1xuICBjb25zdCB0aXRsZUNhc2VkTGlzdCA9IHdvcmRzLm1hcCh3b3JkID0+IHtcbiAgICBjb25zdCBmaXJzdENoYXIgPSB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ0NoYXJzID0gd29yZC5zbGljZSgxKTtcbiAgICByZXR1cm4gYCR7Zmlyc3RDaGFyfSR7cmVtYWluaW5nQ2hhcnN9YDtcbiAgfSk7XG4gIHJldHVybiB0aXRsZUNhc2VkTGlzdC5qb2luKFwiIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRvVGl0bGVDYXNlO1xuIiwiZXhwb3J0IGNvbnN0IElOSVRJQVRFRCA9IFwiaW5pdGlhdGVkXCI7XG5leHBvcnQgY29uc3QgUEVORElORyA9IFwicGVuZGluZ1wiO1xuZXhwb3J0IGNvbnN0IFdJVEhEUkFXTiA9IFwid2l0aGRyYXduXCI7XG5leHBvcnQgY29uc3QgQVBQUk9WRUQgPSBcImFwcHJvdmVkXCI7XG5leHBvcnQgY29uc3QgUkVKRUNURUQgPSBcInJlamVjdGVkXCI7XG5leHBvcnQgY29uc3QgQ09OU0VOVCA9IFwiY29uc2VudFwiO1xuZXhwb3J0IGNvbnN0IEVNQUlMRUQgPSBcImVtYWlsZWRcIjtcbmV4cG9ydCBjb25zdCBSRVZJRVcgPSBcInJldmlld1wiO1xuZXhwb3J0IGNvbnN0IFJFVklFV0lORyA9IFwicmV2aWV3aW5nXCI7XG5leHBvcnQgY29uc3QgQ09OU0lERVIgPSBcImNvbnNpZGVyXCI7XG5leHBvcnQgY29uc3QgUFJPQ0VTU0lORyA9IFwicHJvY2Vzc2luZ1wiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfRElTUFVURSA9IFwicGVuZGluZ19fZGlzcHV0ZVwiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfRklSU1RfTk9USUNFID0gXCJwZW5kaW5nX19maXJzdF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBQRU5ESU5HX1NFQ09ORF9OT1RJQ0UgPSBcInBlbmRpbmdfX3NlY29uZF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBGSVJTVF9OT1RJQ0UgPSBcImZpcnN0X25vdGljZVwiO1xuZXhwb3J0IGNvbnN0IFNFQ09ORF9OT1RJQ0UgPSBcInNlY29uZF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBTU05fVFJBQ0VfRkFJTEVEID0gXCJyZXZpZXdfX2lkZW50aXR5XCI7XG5leHBvcnQgY29uc3QgTVZSX0ZBSUxFRCA9IFwicmV2aWV3X19tdnJcIjtcbmV4cG9ydCBjb25zdCBDT01QTElBTkNFID0gXCJyZXZpZXdfX3FhXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRV9TTyA9IFwicmV2aWV3X19zb1wiO1xuZXhwb3J0IGNvbnN0IFZFUklGWUlORyA9IFwidmVyaWZ5aW5nXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRVJFVklFVyA9IFwiQ29tcGxpYW5jZSBSZXZpZXdcIjtcbmV4cG9ydCBjb25zdCBTVE9SRUQgPSBcIlN0b3JlZFwiO1xuXG5jb25zdCB0cmFuc2xhdGVTdGF0dXMgPSAoc3RhdHVzLCBhZHZlcnNlX2FjdGlvbikgPT4ge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgQVBQUk9WRUQ6XG4gICAgICByZXR1cm4gQVBQUk9WRUQ7XG4gICAgY2FzZSBQRU5ESU5HOlxuICAgIGNhc2UgUEVORElOR19ESVNQVVRFOlxuICAgICAgcmV0dXJuIFBFTkRJTkc7XG4gICAgY2FzZSBSRUpFQ1RFRDpcbiAgICAgIHJldHVybiBSRUpFQ1RFRDtcbiAgICBjYXNlIFBFTkRJTkdfRklSU1RfTk9USUNFOlxuICAgICAgaWYgKGFkdmVyc2VfYWN0aW9uKSByZXR1cm4gRklSU1RfTk9USUNFO1xuICAgICAgZWxzZSByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBQRU5ESU5HX1NFQ09ORF9OT1RJQ0U6XG4gICAgICBpZiAoYWR2ZXJzZV9hY3Rpb24pIHJldHVybiBTRUNPTkRfTk9USUNFO1xuICAgICAgZWxzZSByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBDT05TRU5UOlxuICAgICAgcmV0dXJuIENPTlNFTlQ7XG4gICAgY2FzZSBQUk9DRVNTSU5HOlxuICAgICAgcmV0dXJuIFBST0NFU1NJTkc7XG4gICAgY2FzZSBFTUFJTEVEOlxuICAgICAgcmV0dXJuIEVNQUlMRUQ7XG4gICAgY2FzZSBSRVZJRVc6XG4gICAgICByZXR1cm4gUkVWSUVXO1xuICAgIGNhc2UgUkVWSUVXSU5HOlxuICAgICAgcmV0dXJuIFJFVklFV0lORztcbiAgICBjYXNlIFdJVEhEUkFXTjpcbiAgICAgIHJldHVybiBXSVRIRFJBV047XG4gICAgY2FzZSBJTklUSUFURUQ6XG4gICAgICByZXR1cm4gU1RPUkVEO1xuICAgIGNhc2UgU1NOX1RSQUNFX0ZBSUxFRDpcbiAgICAgIHJldHVybiBWRVJJRllJTkc7XG4gICAgY2FzZSBNVlJfRkFJTEVEOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgY2FzZSBDT01QTElBTkNFOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgY2FzZSBDT01QTElBTkNFX1NPOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBQRU5ESU5HO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGVTdGF0dXM7XG4iLCJpbXBvcnQge1xuICB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UsXG4gIGRyaXZlcnNMaWNlbnNlUmVnZXhcbn0gZnJvbSBcIkB0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlXCI7XG5cbmV4cG9ydCBjb25zdCBjdXJyZW50U3RhdGVzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG5cbmNvbnN0IHZhbGlkYXRlRHJpdmVyc0xpY2Vuc2UgPSAobGljZW5zZSwgc3RhdGUgPSBcIlwiKSA9PiB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBcIkxpY2Vuc2UgYW5kIFN0YXRlIG11c3QgYmUgU3RyaW5nc1wiIH07XG4gIGlmICghY3VycmVudFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkpIHJldHVybiB7IHZhbGlkOiB0cnVlLCByZWFzb25zOiBcIlwiIH07XG4gIHJldHVybiB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UobGljZW5zZSwgc3RhdGUpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGVEcml2ZXJzTGljZW5zZTtcbiIsImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcblxuLyoqXG4gKiBCYXNlZCBvbiBPJ1JlaWxseSdzIFJlZ2V4IENvb2tib29rOlxuICogaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MTQ0OTMyNzQ1My9jaDA0czEyLmh0bWxcbiAqIFxuICogRXh0cmEgcnVsZXM6XG4gKiAgMTIzNDU2Nzg5IGlzIGFuIGludmFsaWQgU1NOXG4gKiAgUmVwZWF0aW5nIGRpZ2l0cyBhcmUgaW52YWxpZCAoMTExMTExMTExLCAxMTExMTExMTEsIGV0Yy4pXG4gKiAgOTg2IHByZWZpeCBpcyBhbGxvd2VkIChmb3IgVGVzdCBJZGVudGl0aWVzKVxuICovXG5jb25zdCB2YWxpZFNzblJlZ2V4ID0gL14oOTg2fCg/ITAwMHw2NjZ8MTIzNDU2Nzg5fChcXGQpXFwyezh9KVswLThdWzAtOV17Mn0pKD8hMDApWzAtOV17Mn0oPyEwMDAwKVswLTldezR9JC87XG5cbi8qKlxuICogQmFzZWQgb24gU1NBJ3MgbWlzdXNlZCBhcnRpY2xlOlxuICogaHR0cHM6Ly93d3cuc3NhLmdvdi9oaXN0b3J5L3Nzbi9taXN1c2VkLmh0bWxcbiAqKi9cbmNvbnN0IG1pc3VzZWRSZWdleCA9IC9eMDc4MDUxMTIwfDIxOTA5OTk5OSQvO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVfc3NuID0gc3NuID0+IHtcbiAgaWYgKHR5cGVvZiBzc24gIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbnVtYmVyU1NOID0gc3NuLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbiAgcmV0dXJuICFtaXN1c2VkUmVnZXgudGVzdChudW1iZXJTU04pICYmIHZhbGlkU3NuUmVnZXgudGVzdChudW1iZXJTU04pO1xufTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRGaXJzdFRocmVlID0gXy5yYW5nZSg5MDAsIDEwMDApXG4gIC5tYXAobnVtID0+IGAke251bX1gKVxuICAuY29uY2F0KFtcIjAwMFwiLCBcIjY2NlwiXSk7XG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZV9zc247XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSovXG5pbXBvcnQgeyBpc09ic2VydmFibGVBcnJheSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsID0gZW1haWwgPT4ge1xuICBpZiAoIWVtYWlsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrJC87XG4gIHJldHVybiByZWdleC50ZXN0KGVtYWlsKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVBob25lID0gcGhvbmUgPT4ge1xuICBpZiAoIXBob25lKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlZ2V4ID0gL14xP1xccz9cXCg/KFxcZHszfSlcXCk/Wy0gXT8oXFxkezN9KVstIF0/KFxcZHs0fSkkLztcbiAgcmV0dXJuIHJlZ2V4LnRlc3QocGhvbmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWxwaGFOdW1lcmljID0gY2ggPT4ge1xuICByZXR1cm4gY2gubWF0Y2goL14oW2EtejAtOV0pKy9pKSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRDYW5hZGlhblppcGNvZGUgPSB6aXBjb2RlID0+IFxuICB6aXBjb2RlLm1hdGNoKC9eW0EtWmEtel1cXGRbQS1aYS16XSQvKSAhPT0gbnVsbCB8fCB6aXBjb2RlLm1hdGNoKC9eW0EtWmEtel1cXGRbQS1aYS16XVsgLV0/XFxkW0EtWmEtel1cXGQvKSAhPT0gbnVsbFxuXG4vLyBzZWUgdmFsaWRhdGUtc3NuLmpzXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTU04gPSBzc24gPT4ge1xuICBpZiAodHlwZW9mIHNzbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBudW1iZXJTU04gPSBzc24ucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xuICByZXR1cm4gbnVtYmVyU1NOLmxlbmd0aCA9PT0gOTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUNoZWNrID0gd29ya2VyX2NoZWNrID0+IHtcbiAgY29uc3QgY2hlY2sgPSB3b3JrZXJfY2hlY2sgPT09IFwiY2xlYXJcIiA/IFtdIDogd29ya2VyX2NoZWNrO1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGVjaykgfHwgaXNPYnNlcnZhYmxlQXJyYXkoY2hlY2spKSByZXR1cm4gWy4uLmNoZWNrXTtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgY29udGFpbnNBdFN5bWJvbCA9IHN0ciA9PiAvQC8udGVzdChzdHIpO1xuZXhwb3J0IGNvbnN0IGNvbnRhaW5zTnVtYmVyID0gc3RyID0+IC9cXGQvLnRlc3Qoc3RyKTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU5hbWUgPSBuYW1lID0+XG4gIG5hbWUudHJpbSgpLmxlbmd0aCAhPT0gMCAmJiAhY29udGFpbnNBdFN5bWJvbChuYW1lKSAmJiAhY29udGFpbnNOdW1iZXIobmFtZSk7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVBZGRyZXNzID0gYWRkcmVzcyA9PlxuICBhZGRyZXNzLnRyaW0oKS5sZW5ndGggIT09IDAgJiYgIWNvbnRhaW5zQXRTeW1ib2woYWRkcmVzcyk7ICBcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUN1c3RvbUlucHV0ID0gdmFsdWUgPT4ge1xuICBpZiAoIV8uaXNTdHJpbmcodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlWmlwY29kZSA9IHppcGNvZGUgPT5cbiAgXy5pc1N0cmluZyh6aXBjb2RlKSAmJiB6aXBjb2RlLmxlbmd0aCA+PSA1O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDYW5hZGlhblppcGNvZGUgPSB6aXBjb2RlID0+XG4gIF8uaXNTdHJpbmcoemlwY29kZSkgXG4gICAgJiYgaXNBbHBoYU51bWVyaWMoemlwY29kZSkgXG4gICAgJiYgaXNWYWxpZENhbmFkaWFuWmlwY29kZSh6aXBjb2RlKTtcblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSB2YWx1ZSA9PlxuICBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc09ic2VydmFibGVBcnJheSh2YWx1ZSk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1WUkNoZWNrID0gY2hlY2sgPT5cbiAgXy5pc09iamVjdChjaGVjaykgfHwgdHlwZW9mIGNoZWNrID09PSBcInN0cmluZ1wiID8gY2hlY2sgOiB7fTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGhvbmVWZXJpZmljYXRpb24gPSBzdGF0dXMgPT4ge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgXCJ2ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJUcnVlXCI6XG4gICAgICByZXR1cm4gXCJ2ZXJpZmllZFwiO1xuICAgIGNhc2UgXCJ1bnZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIkZhbHNlXCI6XG4gICAgICByZXR1cm4gXCJ1bnZlcmlmaWVkXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGlzYWJsZV9jaGVjayA9IGVudl92YXIgPT5cbiAgdHlwZW9mIGVudl92YXIgPT09IFwic3RyaW5nXCIgPyBlbnZfdmFyLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsSWQgPSBpZCA9PiBfLmlzU3RyaW5nKGlkKSAmJiBpZC5sZW5ndGggPT09IDMyO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUdXJuSWQgPSBpZCA9PlxuICBfLmlzU3RyaW5nKGlkKSAmJiAvXkN7MX1bMC05XXsxMH0kLy50ZXN0KGlkKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
|
|
8
|
+
var r=n(104),i=n(105),o=n(106);function u(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(u()<e)throw new RangeError("Invalid typed array length");return a.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=a.prototype:(null===t&&(t=new a(e)),t.length=e),t}function a(t,e,n){if(!(a.TYPED_ARRAY_SUPPORT||this instanceof a))return new a(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return l(this,t)}return c(this,t,e,n)}function c(t,e,n,r){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,r){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");e=void 0===n&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,n):new Uint8Array(e,n,r);a.TYPED_ARRAY_SUPPORT?(t=e).__proto__=a.prototype:t=p(t,e);return t}(t,e,n,r):"string"==typeof e?function(t,e,n){"string"==typeof n&&""!==n||(n="utf8");if(!a.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|d(e,n),i=(t=s(t,r)).write(e,n);i!==r&&(t=t.slice(0,i));return t}(t,e,n):function(t,e){if(a.isBuffer(e)){var n=0|h(e.length);return 0===(t=s(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(r=e.length)!=r?s(t,0):p(t,e);if("Buffer"===e.type&&o(e.data))return p(t,e.data)}var r;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function f(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function l(t,e){if(f(e),t=s(t,e<0?0:0|h(e)),!a.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function p(t,e){var n=e.length<0?0:0|h(e.length);t=s(t,n);for(var r=0;r<n;r+=1)t[r]=255&e[r];return t}function h(t){if(t>=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|t}function d(t,e){if(a.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function v(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return $(this,e,n);case"utf8":case"utf-8":return E(this,e,n);case"ascii":return S(this,e,n);case"latin1":case"binary":return R(this,e,n);case"base64":return O(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function g(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function y(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=a.from(e,r)),a.isBuffer(e))return 0===e.length?-1:b(t,e,n,r,i);if("number"==typeof e)return e&=255,a.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,r,i){var o,u=1,s=t.length,a=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;u=2,s/=2,a/=2,n/=2}function c(t,e){return 1===u?t[e]:t.readUInt16BE(e*u)}if(i){var f=-1;for(o=n;o<s;o++)if(c(t,o)===c(e,-1===f?0:o-f)){if(-1===f&&(f=o),o-f+1===a)return f*u}else-1!==f&&(o-=o-f),f=-1}else for(n+a>s&&(n=s-a),o=n;o>=0;o--){for(var l=!0,p=0;p<a;p++)if(c(t,o+p)!==c(e,p)){l=!1;break}if(l)return o}return-1}function m(t,e,n,r){n=Number(n)||0;var i=t.length-n;r?(r=Number(r))>i&&(r=i):r=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var u=0;u<r;++u){var s=parseInt(e.substr(2*u,2),16);if(isNaN(s))return u;t[n+u]=s}return u}function w(t,e,n,r){return Z(k(e,t.length-n),t,n,r)}function x(t,e,n,r){return Z(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,r)}function _(t,e,n,r){return x(t,e,n,r)}function A(t,e,n,r){return Z(Y(e),t,n,r)}function N(t,e,n,r){return Z(function(t,e){for(var n,r,i,o=[],u=0;u<t.length&&!((e-=2)<0);++u)n=t.charCodeAt(u),r=n>>8,i=n%256,o.push(i),o.push(r);return o}(e,t.length-n),t,n,r)}function O(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function E(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i<n;){var o,u,s,a,c=t[i],f=null,l=c>239?4:c>223?3:c>191?2:1;if(i+l<=n)switch(l){case 1:c<128&&(f=c);break;case 2:128==(192&(o=t[i+1]))&&(a=(31&c)<<6|63&o)>127&&(f=a);break;case 3:o=t[i+1],u=t[i+2],128==(192&o)&&128==(192&u)&&(a=(15&c)<<12|(63&o)<<6|63&u)>2047&&(a<55296||a>57343)&&(f=a);break;case 4:o=t[i+1],u=t[i+2],s=t[i+3],128==(192&o)&&128==(192&u)&&128==(192&s)&&(a=(15&c)<<18|(63&o)<<12|(63&u)<<6|63&s)>65535&&a<1114112&&(f=a)}null===f?(f=65533,l=1):f>65535&&(f-=65536,r.push(f>>>10&1023|55296),f=56320|1023&f),r.push(f),i+=l}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);var n="",r=0;for(;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=4096));return n}(r)}e.Buffer=a,e.SlowBuffer=function(t){+t!=t&&(t=0);return a.alloc(+t)},e.INSPECT_MAX_BYTES=50,a.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=u(),a.poolSize=8192,a._augment=function(t){return t.__proto__=a.prototype,t},a.from=function(t,e,n){return c(null,t,e,n)},a.TYPED_ARRAY_SUPPORT&&(a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0})),a.alloc=function(t,e,n){return function(t,e,n,r){return f(e),e<=0?s(t,e):void 0!==n?"string"==typeof r?s(t,e).fill(n,r):s(t,e).fill(n):s(t,e)}(null,t,e,n)},a.allocUnsafe=function(t){return l(null,t)},a.allocUnsafeSlow=function(t){return l(null,t)},a.isBuffer=function(t){return!(null==t||!t._isBuffer)},a.compare=function(t,e){if(!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,i=0,o=Math.min(n,r);i<o;++i)if(t[i]!==e[i]){n=t[i],r=e[i];break}return n<r?-1:r<n?1:0},a.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},a.concat=function(t,e){if(!o(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return a.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=a.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var u=t[n];if(!a.isBuffer(u))throw new TypeError('"list" argument must be an Array of Buffers');u.copy(r,i),i+=u.length}return r},a.byteLength=d,a.prototype._isBuffer=!0,a.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)g(this,e,e+1);return this},a.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)g(this,e,e+3),g(this,e+1,e+2);return this},a.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)g(this,e,e+7),g(this,e+1,e+6),g(this,e+2,e+5),g(this,e+3,e+4);return this},a.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?E(this,0,t):v.apply(this,arguments)},a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){var t="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),"<Buffer "+t+">"},a.prototype.compare=function(t,e,n,r,i){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(r>>>=0),u=(n>>>=0)-(e>>>=0),s=Math.min(o,u),c=this.slice(r,i),f=t.slice(e,n),l=0;l<s;++l)if(c[l]!==f[l]){o=c[l],u=f[l];break}return o<u?-1:u<o?1:0},a.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},a.prototype.indexOf=function(t,e,n){return y(this,t,e,n,!0)},a.prototype.lastIndexOf=function(t,e,n){return y(this,t,e,n,!1)},a.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return m(this,t,e,n);case"utf8":case"utf-8":return w(this,t,e,n);case"ascii":return x(this,t,e,n);case"latin1":case"binary":return _(this,t,e,n);case"base64":return A(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function S(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;i<n;++i)r+=String.fromCharCode(127&t[i]);return r}function R(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;i<n;++i)r+=String.fromCharCode(t[i]);return r}function $(t,e,n){var r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);for(var i="",o=e;o<n;++o)i+=B(t[o]);return i}function j(t,e,n){for(var r=t.slice(e,n),i="",o=0;o<r.length;o+=2)i+=String.fromCharCode(r[o]+256*r[o+1]);return i}function L(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function T(t,e,n,r,i,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<o)throw new RangeError('"value" argument is out of bounds');if(n+r>t.length)throw new RangeError("Index out of range")}function M(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i<o;++i)t[n+i]=(e&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function C(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i<o;++i)t[n+i]=e>>>8*(r?i:3-i)&255}function P(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function D(t,e,n,r,o){return o||P(t,0,n,4),i.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,o){return o||P(t,0,n,8),i.write(t,e,n,r,52,8),n+8}a.prototype.slice=function(t,e){var n,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t),a.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=a.prototype;else{var i=e-t;n=new a(i,void 0);for(var o=0;o<i;++o)n[o]=this[o+t]}return n},a.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t],i=1,o=0;++o<e&&(i*=256);)r+=this[t+o]*i;return r},a.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},a.prototype.readUInt8=function(t,e){return e||L(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return e||L(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return e||L(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t],i=1,o=0;++o<e&&(i*=256);)r+=this[t+o]*i;return r>=(i*=128)&&(r-=Math.pow(2,8*e)),r},a.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){e||L(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(t,e){e||L(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(t,e){return e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return e||L(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return e||L(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return e||L(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return e||L(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||T(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o<n&&(i*=256);)this[e+o]=t/i&255;return e+n},a.prototype.writeUIntBE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||T(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+n},a.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,1,255,0),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):M(this,t,e,!0),e+2},a.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):M(this,t,e,!1),e+2},a.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):C(this,t,e,!0),e+4},a.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):C(this,t,e,!1),e+4},a.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);T(this,t,e,n,i-1,-i)}var o=0,u=1,s=0;for(this[e]=255&t;++o<n&&(u*=256);)t<0&&0===s&&0!==this[e+o-1]&&(s=1),this[e+o]=(t/u>>0)-s&255;return e+n},a.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);T(this,t,e,n,i-1,-i)}var o=n-1,u=1,s=0;for(this[e+o]=255&t;--o>=0&&(u*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/u>>0)-s&255;return e+n},a.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,1,127,-128),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):M(this,t,e,!0),e+2},a.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):M(this,t,e,!1),e+2},a.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):C(this,t,e,!0),e+4},a.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):C(this,t,e,!1),e+4},a.prototype.writeFloatLE=function(t,e,n){return D(this,t,e,!0,n)},a.prototype.writeFloatBE=function(t,e,n){return D(this,t,e,!1,n)},a.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},a.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},a.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var i,o=r-n;if(this===t&&n<e&&e<r)for(i=o-1;i>=0;--i)t[i+e]=this[i+n];else if(o<1e3||!a.TYPED_ARRAY_SUPPORT)for(i=0;i<o;++i)t[i+e]=this[i+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+o),e);return o},a.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!a.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var o;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o<n;++o)this[o]=t;else{var u=a.isBuffer(t)?t:k(new a(t,r).toString()),s=u.length;for(o=0;o<n-e;++o)this[o+e]=u[o%s]}return this};var I=/[^+\/0-9A-Za-z-_]/g;function B(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){var n;e=e||1/0;for(var r=t.length,i=null,o=[],u=0;u<r;++u){if((n=t.charCodeAt(u))>55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(u+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Y(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(I,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Z(t,e,n,r){for(var i=0;i<r&&!(i+n>=e.length||i>=t.length);++i)e[i+n]=t[i];return i}}).call(this,n(47))},function(t,e,n){"use strict";e.byteLength=function(t){var e=c(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){var e,n,r=c(t),u=r[0],s=r[1],a=new o(function(t,e,n){return 3*(e+n)/4-n}(0,u,s)),f=0,l=s>0?u-4:u;for(n=0;n<l;n+=4)e=i[t.charCodeAt(n)]<<18|i[t.charCodeAt(n+1)]<<12|i[t.charCodeAt(n+2)]<<6|i[t.charCodeAt(n+3)],a[f++]=e>>16&255,a[f++]=e>>8&255,a[f++]=255&e;2===s&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,a[f++]=255&e);1===s&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,a[f++]=e>>8&255,a[f++]=255&e);return a},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],u=0,s=n-i;u<s;u+=16383)o.push(f(t,u,u+16383>s?s:u+16383));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,a=u.length;s<a;++s)r[s]=u[s],i[u.charCodeAt(s)]=s;function c(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function f(t,e,n){for(var i,o,u=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),u.push(r[(o=i)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return u.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){
|
|
9
|
+
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
10
|
+
e.read=function(t,e,n,r,i){var o,u,s=8*i-r-1,a=(1<<s)-1,c=a>>1,f=-7,l=n?i-1:0,p=n?-1:1,h=t[e+l];for(l+=p,o=h&(1<<-f)-1,h>>=-f,f+=s;f>0;o=256*o+t[e+l],l+=p,f-=8);for(u=o&(1<<-f)-1,o>>=-f,f+=r;f>0;u=256*u+t[e+l],l+=p,f-=8);if(0===o)o=1-c;else{if(o===a)return u?NaN:1/0*(h?-1:1);u+=Math.pow(2,r),o-=c}return(h?-1:1)*u*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var u,s,a,c=8*o-i-1,f=(1<<c)-1,l=f>>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:o-1,d=r?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,u=f):(u=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-u))<1&&(u--,a*=2),(e+=u+l>=1?p/a:p*Math.pow(2,1-l))*a>=2&&(u++,a/=2),u+l>=f?(s=0,u=f):u+l>=1?(s=(e*a-1)*Math.pow(2,i),u+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,i),u=0));i>=8;t[n+h]=255&s,h+=d,s/=256,i-=8);for(u=u<<i|s,c+=i;c>0;t[n+h]=255&u,h+=d,u/=256,c-=8);t[n+h-d]|=128*v}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){"use strict";var r=n(7);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(new r("Request failed with status code "+n.status,[r.ERR_BAD_REQUEST,r.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):t(n)}},function(t,e,n){"use strict";var r=n(0);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,i,o,u){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),!0===u&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(0),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,o,u={};return t?(r.forEach(t.split("\n"),(function(t){if(o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e){if(u[e]&&i.indexOf(e)>=0)return;u[e]="set-cookie"===e?(u[e]?u[e]:[]).concat([n]):u[e]?u[e]+", "+n:n}})),u):u}},function(t,e,n){"use strict";var r=n(0);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=i(window.location.href),function(e){var n=r.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";t.exports=function(t){var e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}},function(t,e){t.exports=null},function(t,e,n){"use strict";var r=n(52).version,i=n(7),o={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){o[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var u={};o.transitional=function(t,e,n){function o(t,e){return"[Axios v"+r+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,r,s){if(!1===t)throw new i(o(r," has been removed"+(e?" in "+e:"")),i.ERR_DEPRECATED);return e&&!u[r]&&(u[r]=!0,console.warn(o(r," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,r,s)}},t.exports={assertOptions:function(t,e,n){if("object"!=typeof t)throw new i("options must be an object",i.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(t),o=r.length;o-- >0;){var u=r[o],s=e[u];if(s){var a=t[u],c=void 0===a||s(a,u,t);if(!0!==c)throw new i("option "+u+" must be "+c,i.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new i("Unknown option "+u,i.ERR_BAD_OPTION)}},validators:o}},function(t,e,n){"use strict";var r=n(11);function i(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,r=n._listeners.length;for(e=0;e<r;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,r=new Promise((function(t){n.subscribe(t),e=t})).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},i.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},i.source=function(){var t;return{token:new i((function(e){t=e})),cancel:t}},t.exports=i},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,n){"use strict";var r=n(0);t.exports=function(t){return r.isObject(t)&&!0===t.isAxiosError}},function(t,e){(function(e){t.exports=e}).call(this,{})},function(t,e,n){var r=n(121);t.exports=function(t,e){var n=[];return r(t,(function(t,r,i){e(t,r,i)&&n.push(t)})),n}},function(t,e,n){var r=n(122),i=n(136)(r);t.exports=i},function(t,e,n){var r=n(123),i=n(26);t.exports=function(t,e){return t&&r(t,e,i)}},function(t,e,n){var r=n(124)();t.exports=r},function(t,e){t.exports=function(t){return function(e,n,r){for(var i=-1,o=Object(e),u=r(e),s=u.length;s--;){var a=u[t?s:++i];if(!1===n(o[a],a,o))break}return e}}},function(t,e,n){var r=n(126),i=n(27),o=n(1),u=n(28),s=n(13),a=n(29),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),f=!n&&i(t),l=!n&&!f&&u(t),p=!n&&!f&&!l&&a(t),h=n||f||l||p,d=h?r(t.length,String):[],v=d.length;for(var g in t)!e&&!c.call(t,g)||h&&("length"==g||l&&("offset"==g||"parent"==g)||p&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,v))||d.push(g);return d}},function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},function(t,e,n){var r=n(8),i=n(4);t.exports=function(t){return i(t)&&"[object Arguments]"==r(t)}},function(t,e,n){var r=n(12),i=Object.prototype,o=i.hasOwnProperty,u=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=u.call(t);return r&&(e?t[s]=n:delete t[s]),i}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e){t.exports=function(){return!1}},function(t,e,n){var r=n(8),i=n(30),o=n(4),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&i(t.length)&&!!u[r(t)]}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var r=n(54),i=e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,u=o&&o.exports===i&&r.process,s=function(){try{var t=o&&o.require&&o.require("util").types;return t||u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=s}).call(this,n(55)(t))},function(t,e,n){var r=n(135)(Object.keys,Object);t.exports=r},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var r=n(14);t.exports=function(t,e){return function(n,i){if(null==n)return n;if(!r(n))return t(n,i);for(var o=n.length,u=e?o:-1,s=Object(n);(e?u--:++u<o)&&!1!==i(s[u],u,s););return n}}},function(t,e,n){var r=n(138),i=n(186),o=n(21),u=n(1),s=n(196);t.exports=function(t){return"function"==typeof t?t:null==t?o:"object"==typeof t?u(t)?i(t[0],t[1]):r(t):s(t)}},function(t,e,n){var r=n(139),i=n(185),o=n(66);t.exports=function(t){var e=i(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(59),i=n(61);t.exports=function(t,e,n,o){var u=n.length,s=u,a=!o;if(null==t)return!s;for(t=Object(t);u--;){var c=n[u];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++u<s;){var f=(c=n[u])[0],l=t[f],p=c[1];if(a&&c[2]){if(void 0===l&&!(f in t))return!1}else{var h=new r;if(o)var d=o(l,p,f,t,e,h);if(!(void 0===d?i(p,l,3,o,h):d))return!1}}return!0}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(16),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():i.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(16);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(16);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(16);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var r=n(15);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(15),i=n(32),o=n(33);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var u=n.__data__;if(!i||u.length<199)return u.push([t,e]),this.size=++n.size,this;n=this.__data__=new o(u)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(58),i=n(151),o=n(2),u=n(60),s=/^\[object .+?Constructor\]$/,a=Function.prototype,c=Object.prototype,f=a.toString,l=c.hasOwnProperty,p=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||i(t))&&(r(t)?p:s).test(u(t))}},function(t,e,n){var r,i=n(152),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!o&&o in t}},function(t,e,n){var r=n(3)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(155),i=n(15),o=n(32);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},function(t,e,n){var r=n(156),i=n(157),o=n(158),u=n(159),s=n(160);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},function(t,e,n){var r=n(17);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var r=n(17),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(e,t)?e[t]:void 0}},function(t,e,n){var r=n(17),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:i.call(e,t)}},function(t,e,n){var r=n(17);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var r=n(18);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var r=n(18);t.exports=function(t){return r(this,t).get(t)}},function(t,e,n){var r=n(18);t.exports=function(t){return r(this,t).has(t)}},function(t,e,n){var r=n(18);t.exports=function(t,e){var n=r(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this}},function(t,e,n){var r=n(59),i=n(62),o=n(172),u=n(176),s=n(63),a=n(1),c=n(28),f=n(29),l="[object Object]",p=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,h,d,v){var g=a(t),y=a(e),b=g?"[object Array]":s(t),m=y?"[object Array]":s(e),w=(b="[object Arguments]"==b?l:b)==l,x=(m="[object Arguments]"==m?l:m)==l,_=b==m;if(_&&c(t)){if(!c(e))return!1;g=!0,w=!1}if(_&&!w)return v||(v=new r),g||f(t)?i(t,e,n,h,d,v):o(t,e,b,n,h,d,v);if(!(1&n)){var A=w&&p.call(t,"__wrapped__"),N=x&&p.call(e,"__wrapped__");if(A||N){var O=A?t.value():t,E=N?e.value():e;return v||(v=new r),d(O,E,n,h,v)}}return!!_&&(v||(v=new r),u(t,e,n,h,d,v))}},function(t,e,n){var r=n(33),i=n(168),o=n(169);function u(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}u.prototype.add=u.prototype.push=i,u.prototype.has=o,t.exports=u},function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},function(t,e){t.exports=function(t,e){return t.has(e)}},function(t,e,n){var r=n(12),i=n(173),o=n(31),u=n(62),s=n(174),a=n(175),c=r?r.prototype:void 0,f=c?c.valueOf:void 0;t.exports=function(t,e,n,r,c,l,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!l(new i(t),new i(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var h=s;case"[object Set]":var d=1&r;if(h||(h=a),t.size!=e.size&&!d)return!1;var v=p.get(t);if(v)return v==e;r|=2,p.set(t,e);var g=u(h(t),h(e),r,c,l,p);return p.delete(t),g;case"[object Symbol]":if(f)return f.call(t)==f.call(e)}return!1}},function(t,e,n){var r=n(3).Uint8Array;t.exports=r},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},function(t,e,n){var r=n(177),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,o,u,s){var a=1&n,c=r(t),f=c.length;if(f!=r(e).length&&!a)return!1;for(var l=f;l--;){var p=c[l];if(!(a?p in e:i.call(e,p)))return!1}var h=s.get(t),d=s.get(e);if(h&&d)return h==e&&d==t;var v=!0;s.set(t,e),s.set(e,t);for(var g=a;++l<f;){var y=t[p=c[l]],b=e[p];if(o)var m=a?o(b,y,p,e,t,s):o(y,b,p,t,e,s);if(!(void 0===m?y===b||u(y,b,n,o,s):m)){v=!1;break}g||(g="constructor"==p)}if(v&&!g){var w=t.constructor,x=e.constructor;w==x||!("constructor"in t)||!("constructor"in e)||"function"==typeof w&&w instanceof w&&"function"==typeof x&&x instanceof x||(v=!1)}return s.delete(t),s.delete(e),v}},function(t,e,n){var r=n(178),i=n(180),o=n(26);t.exports=function(t){return r(t,o,i)}},function(t,e,n){var r=n(179),i=n(1);t.exports=function(t,e,n){var o=e(t);return i(t)?o:r(o,n(t))}},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},function(t,e,n){var r=n(53),i=n(181),o=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,s=u?function(t){return null==t?[]:(t=Object(t),r(u(t),(function(e){return o.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(){return[]}},function(t,e,n){var r=n(5)(n(3),"DataView");t.exports=r},function(t,e,n){var r=n(5)(n(3),"Promise");t.exports=r},function(t,e,n){var r=n(5)(n(3),"Set");t.exports=r},function(t,e,n){var r=n(65),i=n(26);t.exports=function(t){for(var e=i(t),n=e.length;n--;){var o=e[n],u=t[o];e[n]=[o,u,r(u)]}return e}},function(t,e,n){var r=n(61),i=n(187),o=n(193),u=n(34),s=n(65),a=n(66),c=n(20);t.exports=function(t,e){return u(t)&&s(e)?a(c(t),e):function(n){var u=i(n,t);return void 0===u&&u===e?o(n,t):r(e,u,3)}}},function(t,e,n){var r=n(67);t.exports=function(t,e,n){var i=null==t?void 0:r(t,e);return void 0===i?n:i}},function(t,e,n){var r=n(189),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,u=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(i,(function(t,n,r,i){e.push(r?i.replace(o,"$1"):n||t)})),e}));t.exports=u},function(t,e,n){var r=n(190);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var r=n(33);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(i.Cache||r),n}i.Cache=r,t.exports=i},function(t,e,n){var r=n(12),i=n(192),o=n(1),u=n(19),s=r?r.prototype:void 0,a=s?s.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(o(e))return i(e,t)+"";if(u(e))return a?a.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},function(t,e,n){var r=n(194),i=n(195);t.exports=function(t,e){return null!=t&&i(t,e,r)}},function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},function(t,e,n){var r=n(68),i=n(27),o=n(1),u=n(13),s=n(30),a=n(20);t.exports=function(t,e,n){for(var c=-1,f=(e=r(e,t)).length,l=!1;++c<f;){var p=a(e[c]);if(!(l=null!=t&&n(t,p)))break;t=t[p]}return l||++c!=f?l:!!(f=null==t?0:t.length)&&s(f)&&u(p,f)&&(o(t)||i(t))}},function(t,e,n){var r=n(197),i=n(198),o=n(34),u=n(20);t.exports=function(t){return o(t)?r(u(t)):i(t)}},function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},function(t,e,n){var r=n(67);t.exports=function(t){return function(e){return r(e,t)}}},function(t,e){t.exports=function(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}},function(t,e,n){var r=n(203),i=n(2),o=n(19),u=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,a=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(o(t))return NaN;if(i(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=i(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=s.test(t);return n||a.test(t)?c(t.slice(2),n?2:8):u.test(t)?NaN:+t}},function(t,e,n){var r=n(204),i=/^\s+/;t.exports=function(t){return t?t.slice(0,r(t)+1).replace(i,""):t}},function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},function(t,e,n){var r=n(22),i=n(3);t.exports=function(t,e,n){var o=1&e,u=r(t);return function e(){var r=this&&this!==i&&this instanceof e?u:t;return r.apply(o?n:this,arguments)}}},function(t,e,n){var r=n(36),i=n(22),o=n(76),u=n(79),s=n(39),a=n(23),c=n(3);t.exports=function(t,e,n){var f=i(t);return function i(){for(var l=arguments.length,p=Array(l),h=l,d=s(i);h--;)p[h]=arguments[h];var v=l<3&&p[0]!==d&&p[l-1]!==d?[]:a(p,d);if((l-=v.length)<n)return u(t,e,o,i.placeholder,void 0,p,v,void 0,void 0,n-l);var g=this&&this!==c&&this instanceof i?f:t;return r(g,this,p)}}},function(t,e){t.exports=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}},function(t,e,n){var r=n(37),i=n(80),o=n(210),u=n(212);t.exports=function(t){var e=o(t),n=u[e];if("function"!=typeof n||!(e in r.prototype))return!1;if(t===n)return!0;var s=i(n);return!!s&&t===s[0]}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(211),i=Object.prototype.hasOwnProperty;t.exports=function(t){for(var e=t.name+"",n=r[e],o=i.call(r,e)?n.length:0;o--;){var u=n[o],s=u.func;if(null==s||s==t)return u.name}return e}},function(t,e){t.exports={}},function(t,e,n){var r=n(37),i=n(81),o=n(38),u=n(1),s=n(4),a=n(213),c=Object.prototype.hasOwnProperty;function f(t){if(s(t)&&!u(t)&&!(t instanceof r)){if(t instanceof i)return t;if(c.call(t,"__wrapped__"))return a(t)}return new i(t)}f.prototype=o.prototype,f.prototype.constructor=f,t.exports=f},function(t,e,n){var r=n(37),i=n(81),o=n(82);t.exports=function(t){if(t instanceof r)return t.clone();var e=new i(t.__wrapped__,t.__chain__);return e.__actions__=o(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}},function(t,e){var n=/\{\n\/\* \[wrapped with (.+)\] \*/,r=/,? & /;t.exports=function(t){var e=t.match(n);return e?e[1].split(r):[]}},function(t,e){var n=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;t.exports=function(t,e){var r=e.length;if(!r)return t;var i=r-1;return e[i]=(r>1?"& ":"")+e[i],e=e.join(r>2?", ":" "),t.replace(n,"{\n/* [wrapped with "+e+"] */\n")}},function(t,e,n){var r=n(217),i=n(218),o=n(21),u=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:o;t.exports=u},function(t,e){t.exports=function(t){return function(){return t}}},function(t,e,n){var r=n(5),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(220),i=n(221),o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];t.exports=function(t,e){return r(o,(function(n){var r="_."+n[0];e&n[1]&&!i(t,r)&&t.push(r)})),t.sort()}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},function(t,e,n){var r=n(70);t.exports=function(t,e){return!!(null==t?0:t.length)&&r(t,e,0)>-1}},function(t,e,n){var r=n(82),i=n(13),o=Math.min;t.exports=function(t,e){for(var n=t.length,u=o(e.length,n),s=r(t);u--;){var a=e[u];t[u]=i(a,n)?s[a]:void 0}return t}},function(t,e,n){var r=n(36),i=n(22),o=n(3);t.exports=function(t,e,n,u){var s=1&e,a=i(t);return function e(){for(var i=-1,c=arguments.length,f=-1,l=u.length,p=Array(l+c),h=this&&this!==o&&this instanceof e?a:t;++f<l;)p[f]=u[f];for(;c--;)p[f++]=arguments[++i];return r(h,s?n:this,p)}}},function(t,e,n){var r=n(77),i=n(78),o=n(23),u=Math.min;t.exports=function(t,e){var n=t[1],s=e[1],a=n|s,c=a<131,f=128==s&&8==n||128==s&&256==n&&t[7].length<=e[8]||384==s&&e[7].length<=e[8]&&8==n;if(!c&&!f)return t;1&s&&(t[2]=e[2],a|=1&n?0:4);var l=e[3];if(l){var p=t[3];t[3]=p?r(p,l,e[4]):l,t[4]=p?o(t[3],"__lodash_placeholder__"):e[4]}return(l=e[5])&&(p=t[5],t[5]=p?i(p,l,e[6]):l,t[6]=p?o(t[5],"__lodash_placeholder__"):e[6]),(l=e[7])&&(t[7]=l),128&s&&(t[8]=null==t[8]?e[8]:u(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=a,t}},function(t,e,n){var r=n(21),i=n(226),o=n(86);t.exports=function(t,e){return o(i(t,e,r),t+"")}},function(t,e,n){var r=n(36),i=Math.max;t.exports=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var o=arguments,u=-1,s=i(o.length-e,0),a=Array(s);++u<s;)a[u]=o[e+u];u=-1;for(var c=Array(e+1);++u<e;)c[u]=o[u];return c[e]=n(a),r(t,this,c)}}},function(t,e,n){var r=n(228),i=n(87),o=n(230),u=n(69);t.exports=function(t){return function(e){e=u(e);var n=i(e)?o(e):void 0,s=n?n[0]:e.charAt(0),a=n?r(n,1).join(""):e.slice(1);return s[t]()+a}}},function(t,e,n){var r=n(229);t.exports=function(t,e,n){var i=t.length;return n=void 0===n?i:n,!e&&n>=i?t:r(t,e,n)}},function(t,e){t.exports=function(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Array(i);++r<i;)o[r]=t[r+e];return o}},function(t,e,n){var r=n(231),i=n(87),o=n(232);t.exports=function(t){return i(t)?o(t):r(t)}},function(t,e){t.exports=function(t){return t.split("")}},function(t,e){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",o="[^\\ud800-\\udfff]",u="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",a="(?:"+r+"|"+i+")"+"?",c="[\\ufe0e\\ufe0f]?"+a+("(?:\\u200d(?:"+[o,u,s].join("|")+")[\\ufe0e\\ufe0f]?"+a+")*"),f="(?:"+[o+r+"?",r,u,s,n].join("|")+")",l=RegExp(i+"(?="+i+")|"+f+c,"g");t.exports=function(t){return t.match(l)||[]}},function(t,e,n){var r=n(24);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return!1;var n=r[e];if(!n)return!1;const i=t.replace(/[\s-]/g,"");return n.filter((function(t){return!t.regex.test(i)})).map((function(t){return t.description})).length<n.length}},function(t,e,n){var r=n(24);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return{valid:!1,reasons:["License and State must be Strings"]};var n=r[e];if(!n)return{valid:!1,reasons:["Not a valid US State"]};const i=t.replace(/[\s-]/g,"");var o=n.filter((function(t){return!t.regex.test(i)})).map((function(t){return t.description}));return{valid:o.length<n.length,reasons:o}}},function(t,e,n){var r=n(24);t.exports=Object.keys(r)},function(t,e,n){var r=n(237),i=n(238),o=n(72);t.exports=function(t){return function(e,n,u){return u&&"number"!=typeof u&&i(e,n,u)&&(n=u=void 0),e=o(e),void 0===n?(n=e,e=0):n=o(n),u=void 0===u?e<n?1:-1:o(u),r(e,n,u,t)}}},function(t,e){var n=Math.ceil,r=Math.max;t.exports=function(t,e,i,o){for(var u=-1,s=r(n((e-t)/(i||1)),0),a=Array(s);s--;)a[o?s:++u]=t,t+=i;return a}},function(t,e,n){var r=n(31),i=n(14),o=n(13),u=n(2);t.exports=function(t,e,n){if(!u(n))return!1;var s=typeof e;return!!("number"==s?i(n)&&o(e,n.length):"string"==s&&e in n)&&r(n[e],t)}},function(t,e,n){"use strict";n.r(e),n.d(e,"BaseAPI",(function(){return h})),n.d(e,"colors",(function(){return r})),n.d(e,"formatDate",(function(){return V})),n.d(e,"formatEmail",(function(){return q})),n.d(e,"formatName",(function(){return X})),n.d(e,"formatPhone",(function(){return K})),n.d(e,"formatSSN",(function(){return G})),n.d(e,"formatZipcode",(function(){return Q})),n.d(e,"getRejectMessage",(function(){return tt})),n.d(e,"getStatus",(function(){return et})),n.d(e,"isDate",(function(){return nt})),n.d(e,"isObject",(function(){return rt})),n.d(e,"isUrl",(function(){return it})),n.d(e,"maskName",(function(){return st})),n.d(e,"objectToQuery",(function(){return at})),n.d(e,"prettifyDate",(function(){return pt})),n.d(e,"toRelativeDate",(function(){return ie})),n.d(e,"toRelativeFromISO",(function(){return re})),n.d(e,"toBoolean",(function(){return Jt})),n.d(e,"Setter",(function(){return Vt})),n.d(e,"renderDetailValue",(function(){return St})),n.d(e,"validators",(function(){return o})),n.d(e,"legalReplace",(function(){return ut})),n.d(e,"parsePythonDate",(function(){return H})),n.d(e,"parseQuery",(function(){return ct})),n.d(e,"pickColor",(function(){return ft})),n.d(e,"pickScoreColor",(function(){return lt})),n.d(e,"selectMasterKey",(function(){return Rt})),n.d(e,"storageMock",(function(){return qt})),n.d(e,"toSentenceCase",(function(){return se})),n.d(e,"toTitleCase",(function(){return ae})),n.d(e,"translateStatus",(function(){return Te})),n.d(e,"availableStatuses",(function(){return i})),n.d(e,"validateDriversLicense",(function(){return Pe})),n.d(e,"currentStates",(function(){return Ce})),n.d(e,"validate_ssn",(function(){return ke})),n.d(e,"invalidFirstThree",(function(){return Be})),n.d(e,"valueExists",(function(){return Nt}));var r={};n.r(r),n.d(r,"primary",(function(){return d})),n.d(r,"secondary",(function(){return v})),n.d(r,"emerald",(function(){return g})),n.d(r,"tartOrange",(function(){return y})),n.d(r,"yellowOrange",(function(){return b})),n.d(r,"slateGray",(function(){return m})),n.d(r,"cadetBlue",(function(){return w})),n.d(r,"periwinkle",(function(){return x})),n.d(r,"aliceBlue",(function(){return _})),n.d(r,"smokeWhite",(function(){return A})),n.d(r,"alert0",(function(){return N})),n.d(r,"alert1",(function(){return O})),n.d(r,"alert2",(function(){return E})),n.d(r,"alert3",(function(){return S})),n.d(r,"ceruleanBlue",(function(){return R})),n.d(r,"peach",(function(){return $})),n.d(r,"babyPink",(function(){return j})),n.d(r,"spanishPink",(function(){return L})),n.d(r,"beauBlue",(function(){return T})),n.d(r,"cultured",(function(){return M})),n.d(r,"blueBell",(function(){return C})),n.d(r,"babyBlueEyes",(function(){return P})),n.d(r,"powderBlue",(function(){return D})),n.d(r,"honeyDew",(function(){return U})),n.d(r,"buff",(function(){return I})),n.d(r,"black",(function(){return B})),n.d(r,"white",(function(){return k})),n.d(r,"noticeMuted",(function(){return Y})),n.d(r,"noticeError",(function(){return Z})),n.d(r,"noticeWarning",(function(){return F})),n.d(r,"noticeSuccess",(function(){return z})),n.d(r,"noticeInfo",(function(){return W}));var i={};n.r(i),n.d(i,"INITIATED",(function(){return ce})),n.d(i,"PENDING",(function(){return fe})),n.d(i,"WITHDRAWN",(function(){return le})),n.d(i,"APPROVED",(function(){return pe})),n.d(i,"REJECTED",(function(){return he})),n.d(i,"CONSENT",(function(){return de})),n.d(i,"EMAILED",(function(){return ve})),n.d(i,"REVIEW",(function(){return ge})),n.d(i,"REVIEWING",(function(){return ye})),n.d(i,"CONSIDER",(function(){return be})),n.d(i,"PROCESSING",(function(){return me})),n.d(i,"PENDING_DISPUTE",(function(){return we})),n.d(i,"PENDING_FIRST_NOTICE",(function(){return xe})),n.d(i,"PENDING_SECOND_NOTICE",(function(){return _e})),n.d(i,"FIRST_NOTICE",(function(){return Ae})),n.d(i,"SECOND_NOTICE",(function(){return Ne})),n.d(i,"SSN_TRACE_FAILED",(function(){return Oe})),n.d(i,"MVR_FAILED",(function(){return Ee})),n.d(i,"COMPLIANCE",(function(){return Se})),n.d(i,"COMPLIANCE_SO",(function(){return Re})),n.d(i,"VERIFYING",(function(){return $e})),n.d(i,"COMPLIANCEREVIEW",(function(){return je})),n.d(i,"STORED",(function(){return Le})),n.d(i,"default",(function(){return Te}));var o={};n.r(o),n.d(o,"validateEmail",(function(){return Ve})),n.d(o,"validatePhone",(function(){return qe})),n.d(o,"isAlphaNumeric",(function(){return Xe})),n.d(o,"isValidCanadianZipcode",(function(){return Je})),n.d(o,"validateSSN",(function(){return Ke})),n.d(o,"validateCheck",(function(){return Ge})),n.d(o,"containsAtSymbol",(function(){return Qe})),n.d(o,"containsNumber",(function(){return tn})),n.d(o,"validateName",(function(){return en})),n.d(o,"validateAddress",(function(){return nn})),n.d(o,"validateCustomInput",(function(){return rn})),n.d(o,"validateZipcode",(function(){return on})),n.d(o,"validateCanadianZipcode",(function(){return un})),n.d(o,"isArray",(function(){return sn})),n.d(o,"validateMVRCheck",(function(){return an})),n.d(o,"validatePhoneVerification",(function(){return cn})),n.d(o,"disable_check",(function(){return fn})),n.d(o,"validateEmailId",(function(){return ln})),n.d(o,"validateTurnId",(function(){return pn}));var u=n(88),s=n.n(u),a=n(40);function c(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function f(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function l(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?f(Object(n),!0).forEach((function(e){p(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function p(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var h=function(){function t(e,n){var r=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),p(this,"approveWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/approve"),e)})),p(this,"withdrawWorker",(function(t,e){return r.api.post("/partners/me/workers/".concat(t,"/withdraw"),e)})),p(this,"rejectWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/reject"),e)})),p(this,"getMember",(function(){return r.api.get("/partners/me")})),p(this,"getSettings",(function(){return r.api.get("/partners/settings")})),p(this,"getWorkers",(function(t){return r.api.get("/partners/me/workers?query=".concat(JSON.stringify(t)))})),p(this,"getPendingWorkers",(function(t){return r.api.get("/cohort/candidates?query=".concat(JSON.stringify(t)))})),p(this,"getWorker",(function(t){return r.api.get("/partners/me/workers/".concat(t,"?full=false"))})),p(this,"checkWorker",(function(t){return r.api.post("/partners/workers",t)})),p(this,"validatePhone",(function(t){return r.api.get("PhoneNumbers/".concat(t,"?Type=carrier&CountryCode=US"),null,{headers:{Authorization:"Basic ".concat(Object(a.btoa)(r.twilioKey||""))}})})),p(this,"validateEmail",(function(t){return r.api.get("/verify_email?email=".concat(encodeURIComponent(t)))})),p(this,"validateSSN",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/validate"),{ssn:e})})),p(this,"validateCandidateEmail",(function(t,e){return r.api.get("/candidate_verify_email/".concat(t,"?email=").concat(encodeURIComponent(e)))})),p(this,"getCandidateData",(function(t){return r.api.get("/candidate_consent_email/candidate/".concat(t))})),p(this,"getInterests",(function(){return r.api.get("/interests")})),p(this,"getTransports",(function(){return r.api.get("/transports")})),p(this,"getPaymetMethod",(function(){return r.api.get("/payment_settings/partner_methods")})),p(this,"getBackgroundReport",(function(t,e){return r.api.get("/candidate_consent_email/candidate/".concat(t,"/report?token=").concat(e))})),p(this,"provideCandidateConsent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t),e)})),p(this,"provideCandidateConsentAsync",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/async"),e)})),p(this,"getTrialStatus",(function(){return r.api.get("/organizations/trial_status")})),p(this,"newCandidate",(function(){return r.api.get("/organizations/new_candidate")})),p(this,"getTerms",(function(){return r.api.get("/partners/terms")})),p(this,"consent",(function(t){return r.api.post("/partners/me/consent",t)})),p(this,"apply",(function(t){var e=t.partner_name,n=t.partner_id;return r.api.post("/candidate_consent_email/".concat(e,"/").concat(n),{})})),p(this,"assent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/assent"),e)})),p(this,"getCohortCount",(function(t){return r.api.get("/cohort/count?query=".concat(JSON.stringify(t)))})),p(this,"createCohort",(function(t){return r.api.post("/cohort",t)})),p(this,"requestCohortWorkers",(function(t,e){return r.api.post("/cohort/".concat(t,"/request"),e)})),p(this,"getNotes",(function(t){return r.api.get("partners/me/workers/".concat(t,"/notes"))})),p(this,"saveNote",(function(t,e){return r.api.put("partners/me/workers/".concat(t,"/notes"),e)})),p(this,"resendEmail",(function(t){return r.api.post("partners/me/workers/".concat(t,"/email/consent/resend"))})),p(this,"postSettings",(function(t,e){return r.api.post(t,e)})),p(this,"btoaTest",(function(t){return Object(a.btoa)(t)})),e&&(this.api=function(t){var e=t.baseURL,n=t.headers,r=void 0===n?{}:n,i=s.a.create({baseURL:e,headers:l({Accept:"application/json"},r),validateStatus:function(){return!0}});i.interceptors.response.use((function(t){return{ok:t.status>=200&&t.status<300,data:t.data,status:t.status,headers:t.headers,config:t.config,problem:t.status>=200&&t.status<300?null:(e=t.status,e>=400&&e<=499?"CLIENT_ERROR":e>=500?"SERVER_ERROR":"UNKNOWN_ERROR"),originalError:null};var e}),(function(t){return{ok:!1,problem:"ECONNABORTED"===t.code?"TIMEOUT_ERROR":"NETWORK_ERROR",data:null,status:null,headers:null,config:t.config,originalError:t}}));var o={getBaseURL:function(){return i.defaults.baseURL||""},setHeaders:function(t){Object.assign(i.defaults.headers.common,t)},get:function(t,e,n){return i.get(t,l(l({},n),{},{params:null==e?void 0:e}))},post:function(t,e,n){return i.post(t,e,n)},put:function(t,e,n){return i.put(t,e,n)}};return Object.defineProperty(o,"headers",{get:function(){return i.defaults.headers.common}}),o}({baseURL:e,headers:{Accept:"application/json"}})),n&&(this.twilioKey=n)}var e,n,r;return e=t,(n=[{key:"setToken",value:function(t){return t?(this.api.setHeaders({Authorization:"Bearer ".concat(t)}),this):this}},{key:"setStatusPreference",value:function(t){return t?(this.api.setHeaders({Prefer:"status=".concat(t)}),this):this}}])&&c(e.prototype,n),r&&c(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}(),d="#2D3047",v="#00D9CD",g="#0ed067",y="#fb4d49",b="#faa73c",m="#5f7d95",w="#9bb1c8",x="#bfcddd",_="#e1e8f3",A="#f7f9fc",N=m,O=g,E=y,S=b,R="#4357ad",$="#f9cb9c",j="#f4cccc",L="#e6b8af",T="#cfe2f3",M="#e3e9ed",C="#b4a7d6",P="#9fc5e8",D="#b7ecec",U="#d9ead3",I="#ffe599",B="#000",k="#fff",Y=m,Z="#ff6c69",F="#faa03c",z="#13c063",W=m,H=function(t){if(!isNaN(parseInt(t,10))){var e=new Date(1e3*t),n=e.getTime();if(n){var r=new Date(n+60*e.getTimezoneOffset()*1e3),i=e.getTimezoneOffset()/60,o=e.getHours();return r.setHours(o-i),r}}return null},V=function(t){var e=H(t);return e?"".concat(e.getMonth()+1,"/").concat(e.getDate(),"/").concat(e.getFullYear()):"N/A"},q=function(t){return"string"!=typeof t?"":t.replace(/\s+/g,"")},X=function(t){return"string"!=typeof t?"":t.replace(/\s\s+/g," ")},J=function(t){var e=t.phone,n=t.encrypted,r=t.areaCode,i=n?"(".concat(e[0],") ").concat(e[1]," ").concat(e[2]).concat(e[3]):"(".concat(e[0],") ").concat(e[1],"-").concat(e[2]).concat(e[3]);return i=r?"".concat(r," ").concat(i):i},K=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof t)return"N/A";var n,r=e?t:t.replace(/\D/g,"").substring(0,11);return r.length<10?r:(r.length>10&&(n=r[0],r=r.substring(1,11)),r=r.match(/.{1,3}/g),J({phone:r,encrypted:e,areaCode:n}))},G=function(t){if("string"!=typeof t)return"N/A";var e=t.replace(/\D/g,"").substring(0,9);return e.length<9?e:"".concat(e.substring(0,3),"-").concat(e.substring(3,5),"-").concat(e.substring(5,9))},Q=function(t){return"string"!=typeof t?"":t.replace(/\D/g,"").substring(0,5)},tt=function(t){if(!["RISK_MANAGEMENT","FCRA_E","FCRA_N","FCRA"].includes(t))return"Reject";return{RISK_MANAGEMENT:"Reject",FCRA:"Pre-Adverse Action",FCRA_E:"Pre-Adverse Action",FCRA_N:"Adverse Action"}[t]},et=function(t){return{review:"reviewing",pending:"consider",review__identity:"verifying",review__mvr:"Compliance Review",review__so:"Compliance Review",review__qa:"Compliance Review",initiated:"Stored"}[t]||t},nt=function(t){if(isNaN(parseInt(t,10)))return!1;var e=new Date(1e3*t);return!(e>new Date)&&e.getYear()>100},rt=function(t){return!!t&&t.constructor===Object},it=function(t){return/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(t)},ot=["Turn Technologies Inc.","[COMPANY]"],ut=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("string"!=typeof t)return"";for(var n=t,r=0;r<ot.length;r++)n=n.replace(ot[r],e);return n},st=function(t){return"string"==typeof t&&t.length>0?"".concat(t.slice(0,1),"."):t},at=function(t){if(!rt(t))return null;var e=Object.keys(t);if(0===e.length)return null;var n=e.map((function(e){return"".concat(e,"=").concat(t[e])}));return"?".concat(n.join("&"))},ct=function(t){if("string"!=typeof t)return t;var e=new URLSearchParams(t.startsWith("?")?t.slice(1):t),n={};return e.forEach((function(t,e){n[e]=t})),n},ft=function(t){switch("string"==typeof t?t.toLowerCase():t){case"first_notice":case"second_notice":case"pending":case"consider":return F;case"unverified":case"not_verified":case"fraud":case"not_matched":case"rejected":case"deceased":case"withdrawn":return Z;case"verified":case"matched":case"valid":case"ready":case"complete":case"clear":case"fulfilled":case"randomized":case"approved":return z;case"processing":case"reviewing":case"review":case"consent":case"emailed":case"initiated":case"attention":case"verifying":case"review__mvr":case"review__qa":return W;case"none":default:return"gray"}},lt=function(t){var e=parseInt(t,10);return e>89?z:e>69?F:Z},pt=function(t){var e=new Date(t),n=e.toUTCString().slice(8,11),r=e.toUTCString().slice(5,7),i=e.toUTCString().slice(12,16);return"".concat(n," ").concat(r,", ").concat(i)},ht=n(89),dt=n.n(ht),vt=n(2),gt=n.n(vt),yt=n(1),bt=n.n(yt),mt=n(90),wt=n.n(mt),xt=n(91),_t=n.n(xt),At=["None","none","N/A"],Nt=function(t){return!!t&&(bt()(t)||gt()(t)?!_t()(t):!(wt()(At,t)>-1))},Ot=function t(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return bt()(e)?n?e.map((function(e){return gt()(e)?Et(e,n):t(e,n)})):e.join(" / "):gt()(e)?Et(e,n):e},Et=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=dt()(t,(function(t){return Nt(t)}));return n.map((function(t){return Ot(t,e)})).join(" / ")},St=Ot,Rt=function(t,e){if(!Array.isArray(t)||0===t.length)return"";var n,r=t[0];Nt(r[e])?n=e:n=Object.keys(r).find((function(t){return Nt(r[t])}));return n},$t=n(9),jt=n.n($t),Lt=n(41),Tt=n.n(Lt);function Mt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function Ct(t,e,n){return e&&Mt(t.prototype,e),n&&Mt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Pt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Dt(t){return(Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ut=function(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r;Dt(i)===t&&(e[n]=i)},It=function(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r,o=Array.isArray(n)?n:t[n];o.includes(i)&&(t[e]=i)},Bt=jt()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Tt()(Ut,t,e,n,r)})),kt=jt()((function(t,e){return function(){"boolean"==typeof t[e]&&(t[e]=!t[e])}})),Yt=Bt("string"),Zt=Bt("number"),Ft=Bt("boolean"),zt=jt()((function(t,e,n){n&&(t[e]=n)})),Wt=jt()((function(t,e,n){n&&(t[e]=!n)})),Ht=jt()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Tt()(It,t,e,n,r)})),Vt=Ct((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Pt(this,"setStringFactory",Yt(this)),Pt(this,"setNumberFactory",Zt(this)),Pt(this,"setBoolFactory",Ft(this)),Pt(this,"setTruthyFactory",zt(this)),Pt(this,"setFalsyFactory",Wt(this)),Pt(this,"setOptionFactory",Ht(this)),Pt(this,"toggleBoolFactory",kt(this))}));var qt=function(){var t={};return{setItem:function(e,n){t[e]=n||""},getItem:function(e){return e in t?t[e]:null},removeItem:function(e){delete t[e]},get length(){return Object.keys(t).length},key:function(e){return Object.keys(t)[e]||null}}};function Xt(t){return(Xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Jt=function(t){switch(Xt(t)){case"boolean":return t;case"string":return"true"===t.toLowerCase();case"number":return t>0;case"undefined":return!1;case"object":return!!t&&(Array.isArray(t)?t.length>0:!(0===Object.getOwnPropertyNames(t).length));default:return!1}},Kt=n(6),Gt=n.n(Kt),Qt=n(92),te=n.n(Qt),ee=n(93),ne=n.n(ee);Gt.a.extend(te.a),Gt.a.extend(ne.a);var re=function(t){if("string"!=typeof t)return"N/A";var e=Gt()(t);if(!e.isValid())return"N/A";var n=Gt()().utcOffset(e.utcOffset());return n.diff(e,"day")<8?e.from(n):e.format("M/DD/YYYY")},ie=function(t){if("number"!=typeof t)return"N/A";var e=H(t);if(!e)return"N/A";var n=Gt()(e),r=Gt()().utcOffset(e.getTimezoneOffset()).subtract(e.getTimezoneOffset()/60,"hour");return r.diff(n,"day")<8?n.from(r):n.format("M/DD/YYYY")},oe=n(94),ue=n.n(oe),se=function(t){var e=t.toLowerCase();return[". ","! ","? "].forEach((function(t){e=e.split(t).map(ue.a).join(t)})),e},ae=function(t){return("string"==typeof t?t:String(t)).toLowerCase().split(" ").map((function(t){var e=t.charAt(0).toUpperCase(),n=t.slice(1);return"".concat(e).concat(n)})).join(" ")},ce="initiated",fe="pending",le="withdrawn",pe="approved",he="rejected",de="consent",ve="emailed",ge="review",ye="reviewing",be="consider",me="processing",we="pending__dispute",xe="pending__first_notice",_e="pending__second_notice",Ae="first_notice",Ne="second_notice",Oe="review__identity",Ee="review__mvr",Se="review__qa",Re="review__so",$e="verifying",je="Compliance Review",Le="Stored",Te=function(t,e){switch(t){case pe:return pe;case fe:case we:return fe;case he:return he;case xe:return e?Ae:he;case _e:return e?Ne:he;case de:return de;case me:return me;case ve:return ve;case ge:return ge;case ye:return ye;case le:return le;case ce:return Le;case Oe:return $e;case Ee:case Se:case Re:return je;default:return fe}},Me=n(42),Ce=Object.keys(Me.driversLicenseRegex),Pe=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"!=typeof t||"string"!=typeof e?{valid:!1,reasons:"License and State must be Strings"}:Ce.includes(e)?Object(Me.validateUSDriversLicense)(t,e):{valid:!0,reasons:""}},De=n(95),Ue=/^(986|(?!000|666|123456789|(\d)\2{8})[0-8][0-9]{2})(?!00)[0-9]{2}(?!0000)[0-9]{4}$/,Ie=/^078051120|219099999$/,Be=n.n(De)()(900,1e3).map((function(t){return"".concat(t)})).concat(["000","666"]),ke=function(t){if("string"!=typeof t)return!1;var e=t.replace(/\D/g,"");return!Ie.test(e)&&Ue.test(e)},Ye=n(10),Ze=n.n(Ye);function Fe(t){return function(t){if(Array.isArray(t))return ze(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return ze(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function We(t){return(We="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var He=function(t){return Array.isArray(t)||!(!t||"object"!==We(t)||"number"!=typeof t.length||"function"!=typeof t.slice)},Ve=function(t){if(!t)return!1;return/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(t)},qe=function(t){if(!t)return!1;return/^1?\s?\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/.test(t)},Xe=function(t){return null!==t.match(/^([a-z0-9])+/i)},Je=function(t){return null!==t.match(/^[A-Za-z]\d[A-Za-z]$/)||null!==t.match(/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d/)},Ke=function(t){return"string"==typeof t&&9===t.replace(/\D/g,"").length},Ge=function(t){var e="clear"===t?[]:t;return He(e)?Fe(e):null},Qe=function(t){return/@/.test(t)},tn=function(t){return/\d/.test(t)},en=function(t){return 0!==t.trim().length&&!Qe(t)&&!tn(t)},nn=function(t){return 0!==t.trim().length&&!Qe(t)},rn=function(t){return!!Ze()(t)&&0!==t.trim().length},on=function(t){return Ze()(t)&&t.length>=5},un=function(t){return Ze()(t)&&Xe(t)&&Je(t)},sn=function(t){return He(t)},an=function(t){return gt()(t)||"string"==typeof t?t:{}},cn=function(t){switch(t){case"verified":case"True":return"verified";case"unverified":case"False":return"unverified";default:return""}},fn=function(t){return"string"==typeof t&&"true"===t.toLowerCase()},ln=function(t){return Ze()(t)&&32===t.length},pn=function(t){return Ze()(t)&&/^C{1}[0-9]{10}$/.test(t)}}])}));
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90dXJuLXNoYXJlZC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9kYXlqcy9kYXlqcy5taW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2N1cnJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9LZXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3Rvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3JlcGxhY2VIb2xkZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9saWNlbnNlLXJlZ2V4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXBwbHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MYXp5V3JhcHBlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRIb2xkZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQmFzZTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcGFydGlhbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19XZWFrTWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNTdHJpY3RDb21wYXJhYmxlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvSW50ZWdlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVXcmFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXRhTWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlSHlicmlkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29tcG9zZUFyZ3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUmVjdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Mb2Rhc2hXcmFwcGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0RGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0V3JhcFRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNVbmljb2RlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3JlbGF0aXZlVGltZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vdXRjLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC91cHBlckZpcnN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9yYW5nZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRWFjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRWFjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTWF0Y2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbERlZXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlQWRkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbE9iamVjdHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19EYXRhVmlldy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXRjaERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hTi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvTnVtYmVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRyaW0uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190cmltbWVkRW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3VycnkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0xhemlhYmxlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9ub29wLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yZWFsTmFtZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dyYXBwZXJMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdXBkYXRlV3JhcERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVvcmRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVBhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ2FzZUZpcnN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFNsaWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaW5nVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FzY2lpVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VuaWNvZGVUb0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9pcy12YWxpZC11cy1saWNlbnNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy92YWxpZGF0ZS1kcml2ZXJzLWxpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2Uvc3JjL3N1cHBvcnRlZC1zdGF0ZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSYW5nZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSYW5nZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3NlcnZpY2VzL2FwaS9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy9zdHlsZXMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3BhcnNlLXB5dGhvbi1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1lbWFpbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtbmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtcGhvbmUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LXNzbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtemlwY29kZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9nZXQtcmVqZWN0LW1lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZ2V0LXN0YXR1cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9pcy1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9pcy11cmwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvbGVnYWwtcmVwbGFjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9tYXNrLW5hbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvb2JqZWN0LXRvLXF1ZXJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3BhcnNlUXVlcnkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcGljay1jb2xvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9waWNrLXNjb3JlLWNvbG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ByZXR0aWZ5LWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdmFsdWUtZXhpc3RzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3JlbmRlci1kZXRhaWwtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvc2VsZWN0LW1hc3Rlci1rZXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvc2V0dGVycy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9zdG9yYWdlLW1vY2suanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdG8tYm9vbGVhbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90by1yZWxhdGl2ZS1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RvLXNlbnRlbmNlLWNhc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdG8tdGl0bGUtY2FzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90cmFuc2xhdGUtc3RhdHVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ZhbGlkYXRlLWRyaXZlcnMtbGljZW5zZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy92YWxpZGF0ZS1zc24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdmFsaWRhdG9ycy5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwidGhpcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJjYWNoZSIsInRvU3RyaW5nIiwia2luZE9mIiwidGhpbmciLCJzdHIiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwia2luZE9mVGVzdCIsInR5cGUiLCJpc0FycmF5IiwidmFsIiwiQXJyYXkiLCJpc1VuZGVmaW5lZCIsImlzQXJyYXlCdWZmZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc0Z1bmN0aW9uIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJmb3JFYWNoIiwib2JqIiwiZm4iLCJsZW5ndGgiLCJUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzU3RyZWFtIiwicGlwZSIsImlzU3RhbmRhcmRCcm93c2VyRW52IiwibmF2aWdhdG9yIiwicHJvZHVjdCIsIndpbmRvdyIsImRvY3VtZW50IiwibWVyZ2UiLCJyZXN1bHQiLCJhc3NpZ25WYWx1ZSIsImFyZ3VtZW50cyIsImV4dGVuZCIsImEiLCJiIiwidGhpc0FyZyIsInRyaW0iLCJyZXBsYWNlIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwiZGVzY3JpcHRvcnMiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcCIsIm1lcmdlZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwiU3RyaW5nIiwidW5kZWZpbmVkIiwibGFzdEluZGV4IiwiaW5kZXhPZiIsInRvQXJyYXkiLCJhcnIiLCJmcmVlR2xvYmFsIiwiZnJlZVNlbGYiLCJGdW5jdGlvbiIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwiZSIsInUiLCJmIiwiaCIsIiQiLCJ5IiwiTSIsIndlZWtkYXlzIiwic3BsaXQiLCJtb250aHMiLCJvcmRpbmFsIiwiam9pbiIsInYiLCJ6IiwidXRjT2Zmc2V0IiwiTWF0aCIsImFicyIsImZsb29yIiwiZGF0ZSIsInllYXIiLCJtb250aCIsImNsb25lIiwiYWRkIiwiY2VpbCIsInciLCJEIiwibXMiLCJRIiwiZyIsIlMiLCJfIiwiTyIsImFyZ3MiLCJsb2NhbGUiLCIkTCIsInV0YyIsIiR1IiwieCIsIiR4IiwiJG9mZnNldCIsInBhcnNlIiwiJGQiLCJEYXRlIiwiTmFOIiwidGVzdCIsIm1hdGNoIiwic3Vic3RyaW5nIiwiVVRDIiwiaW5pdCIsIiR5IiwiZ2V0RnVsbFllYXIiLCIkTSIsImdldE1vbnRoIiwiJEQiLCJnZXREYXRlIiwiJFciLCJnZXREYXkiLCIkSCIsImdldEhvdXJzIiwiJG0iLCJnZXRNaW51dGVzIiwiJHMiLCJnZXRTZWNvbmRzIiwiJG1zIiwiZ2V0TWlsbGlzZWNvbmRzIiwiJHV0aWxzIiwiaXNWYWxpZCIsImlzU2FtZSIsInN0YXJ0T2YiLCJlbmRPZiIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsIiRnIiwic2V0IiwidW5peCIsInZhbHVlT2YiLCJnZXRUaW1lIiwidG9EYXRlIiwiYXBwbHkiLCIkbG9jYWxlIiwid2Vla1N0YXJ0IiwiJHNldCIsIm1pbiIsImRheXNJbk1vbnRoIiwiTnVtYmVyIiwicm91bmQiLCJzdWJ0cmFjdCIsImZvcm1hdCIsImludmFsaWREYXRlIiwibWVyaWRpZW0iLCJtb250aHNTaG9ydCIsIndlZWtkYXlzTWluIiwid2Vla2RheXNTaG9ydCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZGlmZiIsInRvSlNPTiIsInRvSVNPU3RyaW5nIiwidG9VVENTdHJpbmciLCJrIiwiJGkiLCJpc0RheWpzIiwiZW4iLCJMcyIsInV0aWxzIiwiQXhpb3NFcnJvciIsIm1lc3NhZ2UiLCJjb2RlIiwiY29uZmlnIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiRXJyb3IiLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YWNrIiwic3RhdHVzIiwiZGVmaW5lUHJvcGVydGllcyIsImZyb20iLCJlcnJvciIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJjcmVhdGVXcmFwIiwiY3VycnkiLCJmdW5jIiwiYXJpdHkiLCJndWFyZCIsInBsYWNlaG9sZGVyIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0TGlrZSIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJfX0NBTkNFTF9fIiwicmVJc1VpbnQiLCJpc0xlbmd0aCIsImxpc3RDYWNoZUNsZWFyIiwibGlzdENhY2hlRGVsZXRlIiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwiTGlzdENhY2hlIiwiZW50cmllcyIsImluZGV4IiwiY2xlYXIiLCJlbnRyeSIsImhhcyIsImVxIiwiYXJyYXkiLCJuYXRpdmVDcmVhdGUiLCJnZXROYXRpdmUiLCJpc0tleWFibGUiLCJtYXAiLCJkYXRhIiwiX19kYXRhX18iLCJpc1N5bWJvbCIsImJhc2VDcmVhdGUiLCJDdG9yIiwidGhpc0JpbmRpbmciLCJyZXNJbmRleCIsIkFMIiwicmVnZXgiLCJBSyIsIkFaIiwiQVIiLCJDQSIsIkNPIiwiQ1QiLCJERSIsIkRDIiwiRkwiLCJHQSIsIkdVIiwiSEkiLCJJRCIsIklMIiwiSU4iLCJJQSIsIktTIiwiS1kiLCJMQSIsIk1FIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiT0giLCJPSyIsIk9SIiwiUEEiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZBIiwiVkkiLCJXQSIsIldWIiwiV0kiLCJXWSIsIlBSIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwidG9Gb3JtRGF0YSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaGVhZGVycyIsImFkYXB0ZXIiLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsIlhNTEh0dHBSZXF1ZXN0IiwicHJvY2VzcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJpc09iamVjdFBheWxvYWQiLCJjb250ZW50VHlwZSIsIl9Gb3JtRGF0YSIsImVudiIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZW5jb2RlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmdpZnlTYWZlbHkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJzdHJpY3RKU09OUGFyc2luZyIsInJlc3BvbnNlVHlwZSIsIkVSUl9CQURfUkVTUE9OU0UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJtZXRob2QiLCJhcnJheUxpa2VLZXlzIiwiYmFzZUtleXMiLCJpc0FycmF5TGlrZSIsImJhc2VJc0FyZ3VtZW50cyIsIm9iamVjdFByb3RvIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpc0FyZ3VtZW50cyIsInN0dWJGYWxzZSIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwiQnVmZmVyIiwiYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwibm9kZUlzVHlwZWRBcnJheSIsIm90aGVyIiwiTWFwIiwibWFwQ2FjaGVDbGVhciIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwib2JqZWN0Q3JlYXRlIiwicHJvdG8iLCJiYXNlTG9kYXNoIiwiTGF6eVdyYXBwZXIiLCJfX3dyYXBwZWRfXyIsIl9fYWN0aW9uc19fIiwiX19kaXJfXyIsIl9fZmlsdGVyZWRfXyIsIl9faXRlcmF0ZWVzX18iLCJfX3Rha2VDb3VudF9fIiwiX192aWV3c19fIiwiYmFzZTY0IiwiZ2xvYmFsIiwiYnRvYSIsImF0b2IiLCJjaGFycyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsImlucHV0IiwiYmxvY2siLCJjaGFyQ29kZSIsImlkeCIsIm91dHB1dCIsImNoYXJBdCIsImJzIiwiYmMiLCJmcm9tQ2hhckNvZGUiLCJiYXNlUmVzdCIsImdldEhvbGRlciIsInJlcGxhY2VIb2xkZXJzIiwicGFydGlhbCIsInBhcnRpYWxzIiwiaG9sZGVycyIsImRyaXZlcnNMaWNlbnNlUmVnZXgiLCJpc1ZhbGlkVVNMaWNlbnNlIiwidmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlIiwic3VwcG9ydGVkU3RhdGVzIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidXJsIiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInB1c2giLCJoYXNobWFya0luZGV4IiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsImZvcm1EYXRhIiwiY29udmVydFZhbHVlIiwiQmxvYiIsImJ1aWxkIiwicGFyZW50S2V5IiwiZnVsbEtleSIsImVsIiwiYXBwZW5kIiwicG9wIiwic2V0dGxlIiwiY29va2llcyIsImJ1aWxkVVJMIiwiYnVpbGRGdWxsUGF0aCIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInBhcnNlUHJvdG9jb2wiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uQ2FuY2VsZWQiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiZG9uZSIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsIkF1dGhvcml6YXRpb24iLCJmdWxsUGF0aCIsImJhc2VVUkwiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0IiwiZXJyIiwib3BlbiIsInRvVXBwZXJDYXNlIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwicmVhZCIsInNldFJlcXVlc3RIZWFkZXIiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInByb3RvY29sIiwiRVJSX0JBRF9SRVFVRVNUIiwic2VuZCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsInJlcXVlc3RlZFVSTCIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJ0YXJnZXQiLCJzb3VyY2UiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImtleXMiLCJjb25jYXQiLCJjb25maWdWYWx1ZSIsInByZWRpY2F0ZSIsIndlYnBhY2tQb2x5ZmlsbCIsImRlcHJlY2F0ZSIsInBhdGhzIiwiY2hpbGRyZW4iLCJpc1Byb3RvdHlwZSIsIm5hdGl2ZUtleXMiLCJ0YWciLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwic3RhY2tTZXQiLCJTdGFjayIsInNpemUiLCJmdW5jVG9TdHJpbmciLCJiYXNlSXNFcXVhbERlZXAiLCJiYXNlSXNFcXVhbCIsImJpdG1hc2siLCJjdXN0b21pemVyIiwiU2V0Q2FjaGUiLCJhcnJheVNvbWUiLCJjYWNoZUhhcyIsImVxdWFsRnVuYyIsImlzUGFydGlhbCIsImFyckxlbmd0aCIsIm90aExlbmd0aCIsImFyclN0YWNrZWQiLCJvdGhTdGFja2VkIiwic2VlbiIsImFyclZhbHVlIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsIm90aEluZGV4IiwiRGF0YVZpZXciLCJTZXQiLCJXZWFrTWFwIiwidG9Tb3VyY2UiLCJkYXRhVmlld0N0b3JTdHJpbmciLCJtYXBDdG9yU3RyaW5nIiwicHJvbWlzZUN0b3JTdHJpbmciLCJzZXRDdG9yU3RyaW5nIiwid2Vha01hcEN0b3JTdHJpbmciLCJnZXRUYWciLCJjdG9yU3RyaW5nIiwic3JjVmFsdWUiLCJjYXN0UGF0aCIsInRvS2V5IiwicGF0aCIsImlzS2V5Iiwic3RyaW5nVG9QYXRoIiwiYmFzZVRvU3RyaW5nIiwiYmFzZUZpbmRJbmRleCIsImJhc2VJc05hTiIsInN0cmljdEluZGV4T2YiLCJmcm9tSW5kZXgiLCJ0b0Zpbml0ZSIsInJlbWFpbmRlciIsInRvTnVtYmVyIiwiYmFzZVNldERhdGEiLCJjcmVhdGVCaW5kIiwiY3JlYXRlQ3VycnkiLCJjcmVhdGVIeWJyaWQiLCJjcmVhdGVQYXJ0aWFsIiwiZ2V0RGF0YSIsIm1lcmdlRGF0YSIsInNldERhdGEiLCJzZXRXcmFwVG9TdHJpbmciLCJ0b0ludGVnZXIiLCJuYXRpdmVNYXgiLCJtYXgiLCJhcmdQb3MiLCJhcnkiLCJpc0JpbmRLZXkiLCJUeXBlRXJyb3IiLCJwYXJ0aWFsc1JpZ2h0IiwiaG9sZGVyc1JpZ2h0IiwibmV3RGF0YSIsImlkZW50aXR5IiwibWV0YU1hcCIsImNvbXBvc2VBcmdzIiwiY29tcG9zZUFyZ3NSaWdodCIsImNvdW50SG9sZGVycyIsImNyZWF0ZUN0b3IiLCJjcmVhdGVSZWN1cnJ5IiwicmVvcmRlciIsImlzQXJ5IiwiaXNCaW5kIiwiaXNDdXJyaWVkIiwiaXNGbGlwIiwid3JhcHBlciIsImhvbGRlcnNDb3VudCIsIm5ld0hvbGRlcnMiLCJyZXZlcnNlIiwiYXJnc0luZGV4IiwiYXJnc0xlbmd0aCIsImhvbGRlcnNMZW5ndGgiLCJsZWZ0SW5kZXgiLCJsZWZ0TGVuZ3RoIiwicmFuZ2VMZW5ndGgiLCJpc1VuY3VycmllZCIsImhvbGRlcnNJbmRleCIsInJpZ2h0SW5kZXgiLCJyaWdodExlbmd0aCIsIm9mZnNldCIsImlzTGF6aWFibGUiLCJ3cmFwRnVuYyIsImlzQ3VycnkiLCJub29wIiwiTG9kYXNoV3JhcHBlciIsImNoYWluQWxsIiwiX19jaGFpbl9fIiwiX19pbmRleF9fIiwiX192YWx1ZXNfXyIsInNob3J0T3V0IiwibmF0aXZlTm93Iiwibm93IiwiY291bnQiLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCJyZW1haW5pbmciLCJnZXRXcmFwRGV0YWlscyIsImluc2VydFdyYXBEZXRhaWxzIiwic2V0VG9TdHJpbmciLCJ1cGRhdGVXcmFwRGV0YWlscyIsInJlZmVyZW5jZSIsImJhc2VTZXRUb1N0cmluZyIsInJlSGFzVW5pY29kZSIsIlJlZ0V4cCIsInN0cmluZyIsImFycmF5RmlsdGVyIiwiYmFzZUZpbHRlciIsImJhc2VJdGVyYXRlZSIsImNvbGxlY3Rpb24iLCJiYXNlSW5kZXhPZiIsInNwbGljZSIsImZ1dHVyZSIsInBhc3QiLCJtbSIsImhoIiwiZGQiLCJNTSIsInl5IiwiZnJvbVRvQmFzZSIsInJlbGF0aXZlVGltZSIsInRocmVzaG9sZHMiLCJyb3VuZGluZyIsInRvIiwidG9Ob3ciLCJmcm9tTm93IiwibG9jYWwiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0RheSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCIkbG9jYWxPZmZzZXQiLCJpc1VUQyIsInVwcGVyRmlyc3QiLCJjcmVhdGVDYXNlRmlyc3QiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiY29udGV4dCIsImluc3RhbmNlIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWxUb2tlbiIsImlzQ2FuY2VsIiwiVkVSU0lPTiIsInZlcnNpb24iLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImlzQXhpb3NFcnJvciIsImRlZmF1bHQiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJkaXNwYXRjaFJlcXVlc3QiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0b3JzIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJhc3NlcnRPcHRpb25zIiwiYm9vbGVhbiIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJydW5XaGVuIiwic3luY2hyb25vdXMiLCJ1bnNoaWZ0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJwcm9taXNlIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwiY2hhaW4iLCJ0aGVuIiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJoYW5kbGVycyIsInVzZSIsIm9wdGlvbnMiLCJlamVjdCIsImlkIiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwicmVhc29uIiwiZm5zIiwiY2FjaGVkU2V0VGltZW91dCIsImNhY2hlZENsZWFyVGltZW91dCIsImRlZmF1bHRTZXRUaW1vdXQiLCJkZWZhdWx0Q2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsImNsZWFyVGltZW91dCIsImN1cnJlbnRRdWV1ZSIsInF1ZXVlIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiZHJhaW5RdWV1ZSIsImxlbiIsInJ1biIsIm1hcmtlciIsInJ1bkNsZWFyVGltZW91dCIsIkl0ZW0iLCJuZXh0VGljayIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsImRpciIsInVtYXNrIiwibm9ybWFsaXplZE5hbWUiLCJpZWVlNzU0Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJjcmVhdGVCdWZmZXIiLCJ0aGF0IiwiUmFuZ2VFcnJvciIsIl9fcHJvdG9fXyIsImFyZyIsImVuY29kaW5nT3JPZmZzZXQiLCJhbGxvY1Vuc2FmZSIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwiZnJvbUFycmF5TGlrZSIsImZyb21BcnJheUJ1ZmZlciIsImVuY29kaW5nIiwiaXNFbmNvZGluZyIsImFjdHVhbCIsIndyaXRlIiwiZnJvbVN0cmluZyIsImNoZWNrZWQiLCJjb3B5IiwiZnJvbU9iamVjdCIsImFzc2VydFNpemUiLCJsb3dlcmVkQ2FzZSIsInV0ZjhUb0J5dGVzIiwiYmFzZTY0VG9CeXRlcyIsInNsb3dUb1N0cmluZyIsInN0YXJ0IiwiZW5kIiwiaGV4U2xpY2UiLCJ1dGY4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJiYXNlNjRTbGljZSIsInV0ZjE2bGVTbGljZSIsInN3YXAiLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImlzTmFOIiwiYXJyYXlJbmRleE9mIiwibGFzdEluZGV4T2YiLCJpbmRleFNpemUiLCJ2YWxMZW5ndGgiLCJidWYiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwibGF0aW4xV3JpdGUiLCJiYXNlNjRXcml0ZSIsInVjczJXcml0ZSIsInVuaXRzIiwiaGkiLCJsbyIsInV0ZjE2bGVUb0J5dGVzIiwiZnJvbUJ5dGVBcnJheSIsInJlcyIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImZpcnN0Qnl0ZSIsImNvZGVQb2ludCIsImJ5dGVzUGVyU2VxdWVuY2UiLCJjb2RlUG9pbnRzIiwiZGVjb2RlQ29kZVBvaW50c0FycmF5IiwiU2xvd0J1ZmZlciIsImFsbG9jIiwiSU5TUEVDVF9NQVhfQllURVMiLCJmb28iLCJzdWJhcnJheSIsInR5cGVkQXJyYXlTdXBwb3J0IiwicG9vbFNpemUiLCJfYXVnbWVudCIsInNwZWNpZXMiLCJjb25maWd1cmFibGUiLCJmaWxsIiwiYWxsb2NVbnNhZmVTbG93IiwiX2lzQnVmZmVyIiwiY29tcGFyZSIsImxpc3QiLCJwb3MiLCJzd2FwMTYiLCJzd2FwMzIiLCJzd2FwNjQiLCJlcXVhbHMiLCJpbnNwZWN0IiwidGhpc1N0YXJ0IiwidGhpc0VuZCIsInRoaXNDb3B5IiwidGFyZ2V0Q29weSIsImluY2x1ZGVzIiwiaXNGaW5pdGUiLCJfYXJyIiwicmV0Iiwib3V0IiwidG9IZXgiLCJieXRlcyIsImNoZWNrT2Zmc2V0IiwiZXh0IiwiY2hlY2tJbnQiLCJvYmplY3RXcml0ZVVJbnQxNiIsImxpdHRsZUVuZGlhbiIsIm9iamVjdFdyaXRlVUludDMyIiwiY2hlY2tJRUVFNzU0Iiwid3JpdGVGbG9hdCIsIm5vQXNzZXJ0Iiwid3JpdGVEb3VibGUiLCJuZXdCdWYiLCJzbGljZUxlbiIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVUludEJFIiwicmVhZFVJbnQ4IiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEludExFIiwicG93IiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50OCIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUludExFIiwibGltaXQiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsIklOVkFMSURfQkFTRTY0X1JFIiwiSW5maW5pdHkiLCJsZWFkU3Vycm9nYXRlIiwidG9CeXRlQXJyYXkiLCJzdHJpbmd0cmltIiwiYmFzZTY0Y2xlYW4iLCJzcmMiLCJkc3QiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInZhbGlkTGVuIiwicGxhY2VIb2xkZXJzTGVuIiwidG1wIiwiQXJyIiwiX2J5dGVMZW5ndGgiLCJjdXJCeXRlIiwicmV2TG9va3VwIiwidWludDgiLCJleHRyYUJ5dGVzIiwibGVuMiIsImVuY29kZUNodW5rIiwibG9va3VwIiwibnVtIiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJydCIsImxvZyIsIkxOMiIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJ0b0dNVFN0cmluZyIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsInJlbGF0aXZlVVJMIiwiaWdub3JlRHVwbGljYXRlT2YiLCJsaW5lIiwib3JpZ2luVVJMIiwibXNpZSIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImxvY2F0aW9uIiwicmVxdWVzdFVSTCIsImV4ZWMiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImNvbnNvbGUiLCJ3YXJuIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJ0b2tlbiIsIl9saXN0ZW5lcnMiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwibGlzdGVuZXIiLCJjYWxsYmFjayIsInBheWxvYWQiLCJfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyIsImJhc2VFYWNoIiwiYmFzZUZvck93biIsImNyZWF0ZUJhc2VFYWNoIiwiYmFzZUZvciIsIml0ZXJhdGVlIiwiY3JlYXRlQmFzZUZvciIsImZyb21SaWdodCIsImtleXNGdW5jIiwiaXRlcmFibGUiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJpc093biIsInVubWFza2VkIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwicmVxdWlyZSIsIm92ZXJBcmciLCJ0cmFuc2Zvcm0iLCJlYWNoRnVuYyIsImJhc2VNYXRjaGVzIiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsImJhc2VJc01hdGNoIiwiZ2V0TWF0Y2hEYXRhIiwibWF0Y2hlc1N0cmljdENvbXBhcmFibGUiLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJvYmpWYWx1ZSIsIkNPTVBBUkVfUEFSVElBTF9GTEFHIiwiYXNzb2NJbmRleE9mIiwicGFpcnMiLCJMQVJHRV9BUlJBWV9TSVpFIiwiaXNNYXNrZWQiLCJyZUlzSG9zdEN0b3IiLCJmdW5jUHJvdG8iLCJyZUlzTmF0aXZlIiwidWlkIiwiY29yZUpzRGF0YSIsIm1hc2tTcmNLZXkiLCJJRV9QUk9UTyIsIkhhc2giLCJoYXNoQ2xlYXIiLCJoYXNoRGVsZXRlIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiZ2V0TWFwRGF0YSIsImVxdWFsQXJyYXlzIiwiZXF1YWxCeVRhZyIsImVxdWFsT2JqZWN0cyIsIm9iamVjdFRhZyIsIm9iaklzQXJyIiwib3RoSXNBcnIiLCJvYmpUYWciLCJvdGhUYWciLCJvYmpJc09iaiIsIm90aElzT2JqIiwiaXNTYW1lVGFnIiwib2JqSXNXcmFwcGVkIiwib3RoSXNXcmFwcGVkIiwib2JqVW53cmFwcGVkIiwib3RoVW53cmFwcGVkIiwic2V0Q2FjaGVBZGQiLCJzZXRDYWNoZUhhcyIsInZhbHVlcyIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5Iiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwiY29udmVydCIsInN0YWNrZWQiLCJnZXRBbGxLZXlzIiwib2JqUHJvcHMiLCJvYmpMZW5ndGgiLCJvYmpTdGFja2VkIiwic2tpcEN0b3IiLCJvYmpDdG9yIiwib3RoQ3RvciIsImJhc2VHZXRBbGxLZXlzIiwiZ2V0U3ltYm9scyIsImFycmF5UHVzaCIsInN5bWJvbHNGdW5jIiwic3R1YkFycmF5IiwibmF0aXZlR2V0U3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbCIsImlzU3RyaWN0Q29tcGFyYWJsZSIsImhhc0luIiwiYmFzZUdldCIsImRlZmF1bHRWYWx1ZSIsIm1lbW9pemVDYXBwZWQiLCJyZVByb3BOYW1lIiwicmVFc2NhcGVDaGFyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJtZW1vaXplIiwicmVzb2x2ZXIiLCJtZW1vaXplZCIsIkNhY2hlIiwiYXJyYXlNYXAiLCJzeW1ib2xUb1N0cmluZyIsImJhc2VIYXNJbiIsImhhc1BhdGgiLCJoYXNGdW5jIiwiYmFzZVByb3BlcnR5IiwiYmFzZVByb3BlcnR5RGVlcCIsImJhc2VUcmltIiwicmVJc0JhZEhleCIsInJlSXNCaW5hcnkiLCJyZUlzT2N0YWwiLCJmcmVlUGFyc2VJbnQiLCJpc0JpbmFyeSIsInRyaW1tZWRFbmRJbmRleCIsInJlVHJpbVN0YXJ0IiwicmVXaGl0ZXNwYWNlIiwiZ2V0RnVuY05hbWUiLCJsb2Rhc2giLCJmdW5jTmFtZSIsInJlYWxOYW1lcyIsIm90aGVyRnVuYyIsIndyYXBwZXJDbG9uZSIsImNvcHlBcnJheSIsInJlV3JhcERldGFpbHMiLCJyZVNwbGl0RGV0YWlscyIsInJlV3JhcENvbW1lbnQiLCJkZXRhaWxzIiwiY29uc3RhbnQiLCJhcnJheUVhY2giLCJhcnJheUluY2x1ZGVzIiwid3JhcEZsYWdzIiwicGFpciIsInNvcnQiLCJuYXRpdmVNaW4iLCJpbmRleGVzIiwib2xkQXJyYXkiLCJzcmNCaXRtYXNrIiwibmV3Qml0bWFzayIsImlzQ29tbW9uIiwiaXNDb21ibyIsIm92ZXJSZXN0Iiwib3RoZXJBcmdzIiwiY2FzdFNsaWNlIiwiaGFzVW5pY29kZSIsInN0cmluZ1RvQXJyYXkiLCJtZXRob2ROYW1lIiwic3RyU3ltYm9scyIsImNociIsInRyYWlsaW5nIiwiYmFzZVNsaWNlIiwiYXNjaWlUb0FycmF5IiwidW5pY29kZVRvQXJyYXkiLCJyc0FzdHJhbCIsInJzQ29tYm8iLCJyc0ZpdHoiLCJyc05vbkFzdHJhbCIsInJzUmVnaW9uYWwiLCJyc1N1cnJQYWlyIiwicmVPcHRNb2QiLCJyc1NlcSIsInJzU3ltYm9sIiwicmVVbmljb2RlIiwibGljZW5zZSIsInN0YXRlIiwiY2xlYW5MaWNlbnNlIiwidmFsaWQiLCJyZWFzb25zIiwiYmFzZVJhbmdlIiwiaXNJdGVyYXRlZUNhbGwiLCJzdGVwIiwibmF0aXZlQ2VpbCIsIkJhc2VBUEkiLCJ0d2lsaW9LZXkiLCJhcGkiLCJwdXQiLCJwb3N0IiwicGhvbmUiLCJlbWFpbCIsImVtYWlsX2lkIiwic3NuIiwicGFydG5lcl9uYW1lIiwicGFydG5lcl9pZCIsImNvaG9ydF9pZCIsImluaXRpYWxIZWFkZXJzIiwiQWNjZXB0Iiwib2siLCJwcm9ibGVtIiwib3JpZ2luYWxFcnJvciIsImNsaWVudCIsImdldEJhc2VVUkwiLCJzZXRIZWFkZXJzIiwibmV3SGVhZGVycyIsImNyZWF0ZUFwaXNhdWNlQ29tcGF0aWJsZUNsaWVudCIsIlByZWZlciIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJlbWVyYWxkIiwidGFydE9yYW5nZSIsInllbGxvd09yYW5nZSIsInNsYXRlR3JheSIsImNhZGV0Qmx1ZSIsInBlcml3aW5rbGUiLCJhbGljZUJsdWUiLCJzbW9rZVdoaXRlIiwiYWxlcnQwIiwiYWxlcnQxIiwiYWxlcnQyIiwiYWxlcnQzIiwiY2VydWxlYW5CbHVlIiwicGVhY2giLCJiYWJ5UGluayIsInNwYW5pc2hQaW5rIiwiYmVhdUJsdWUiLCJjdWx0dXJlZCIsImJsdWVCZWxsIiwiYmFieUJsdWVFeWVzIiwicG93ZGVyQmx1ZSIsImhvbmV5RGV3IiwiYnVmZiIsImJsYWNrIiwid2hpdGUiLCJub3RpY2VNdXRlZCIsIm5vdGljZUVycm9yIiwibm90aWNlV2FybmluZyIsIm5vdGljZVN1Y2Nlc3MiLCJub3RpY2VJbmZvIiwicGFyc2VQeXRob25EYXRlIiwidGltZSIsIm5ld0RhdGUiLCJob3VycyIsInNldEhvdXJzIiwiZm9ybWF0RGF0ZSIsInBhcnNlZERhdGUiLCJmb3JtYXRFbWFpbCIsImZvcm1hdE5hbWUiLCJyZW5kZXJQaG9uZSIsImVuY3J5cHRlZCIsImFyZWFDb2RlIiwicGhvbmVOdW1iZXIiLCJmb3JtYXRQaG9uZSIsImZvcm1hdFNTTiIsInNzbk51bWJlciIsImZvcm1hdFppcGNvZGUiLCJ6aXBjb2RlIiwiZ2V0UmVqZWN0TWVzc2FnZSIsInBhcnRuZXJfdHlwZSIsIlJJU0tfTUFOQUdFTUVOVCIsIkZDUkEiLCJGQ1JBX0UiLCJGQ1JBX04iLCJnZXRTdGF0dXMiLCJyZXZpZXciLCJwZW5kaW5nIiwiaW5pdGlhdGVkIiwiZ2V0WWVhciIsImlzVXJsIiwidXJsU3RyaW5nIiwidGVybXMiLCJsZWdhbFJlcGxhY2UiLCJvcmlnaW5hbCIsInJlcGxhY2VtZW50IiwicmV0dXJuVmFsIiwibWFza05hbWUiLCJvYmplY3RUb1F1ZXJ5IiwicXVlcnkiLCJxdWVyeUFycmF5IiwicGFyc2VRdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsInN0YXJ0c1dpdGgiLCJwaWNrQ29sb3IiLCJjb2xvcnMiLCJwaWNrU2NvcmVDb2xvciIsInNjb3JlIiwicHJldHRpZnlEYXRlIiwiZGF0ZVN0cmluZyIsIkREIiwiWVlZWSIsImZhbHN5U3RyaW5ncyIsInZhbHVlRXhpc3RzIiwicmVuZGVyRGV0YWlsVmFsdWUiLCJkZWVwIiwicmVuZGVyTmVzdGVkT2JqZWN0IiwibmVzdGVkIiwic2VsZWN0TWFzdGVyS2V5IiwibWFzdGVyS2V5IiwiYmx1ZXByaW50IiwiZmluZCIsInNldFZhbHVlIiwiZmFsbGJhY2siLCJzZXRPcHRpb24iLCJhbGxvd2VkIiwic2V0dGVyRmFjdG9yeUN1cnJpZWQiLCJ0b2dnbGVCb29sQ3VycmllZCIsInNldFN0cmluZ0ZhY3RvcnkiLCJzZXROdW1iZXJGYWN0b3J5Iiwic2V0Qm9vbEZhY3RvcnkiLCJzZXRUcnV0aHlDdXJyaWVkIiwic2V0RmFsc3lDdXJyaWVkIiwic2V0T3B0aW9uRmFjdG9yeUN1cnJpZWQiLCJTZXR0ZXIiLCJzdG9yYWdlTW9jayIsInN0b3JhZ2UiLCJzZXRJdGVtIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJ0b0Jvb2xlYW4iLCJkYXlqcyIsInRvUmVsYXRpdmVGcm9tSVNPIiwicmVsYXRpdmVEYXRlIiwidG9SZWxhdGl2ZURhdGUiLCJhZGp1c3RlZE5vdyIsInRvU2VudGVuY2VDYXNlIiwic2VudGVuY2UiLCJ0ZXJtaW5hdGlvbiIsInRvVGl0bGVDYXNlIiwid29yZCIsImZpcnN0Q2hhciIsInJlbWFpbmluZ0NoYXJzIiwiSU5JVElBVEVEIiwiUEVORElORyIsIldJVEhEUkFXTiIsIkFQUFJPVkVEIiwiUkVKRUNURUQiLCJDT05TRU5UIiwiRU1BSUxFRCIsIlJFVklFVyIsIlJFVklFV0lORyIsIkNPTlNJREVSIiwiUFJPQ0VTU0lORyIsIlBFTkRJTkdfRElTUFVURSIsIlBFTkRJTkdfRklSU1RfTk9USUNFIiwiUEVORElOR19TRUNPTkRfTk9USUNFIiwiRklSU1RfTk9USUNFIiwiU0VDT05EX05PVElDRSIsIlNTTl9UUkFDRV9GQUlMRUQiLCJNVlJfRkFJTEVEIiwiQ09NUExJQU5DRSIsIkNPTVBMSUFOQ0VfU08iLCJWRVJJRllJTkciLCJDT01QTElBTkNFUkVWSUVXIiwiU1RPUkVEIiwidHJhbnNsYXRlU3RhdHVzIiwiYWR2ZXJzZV9hY3Rpb24iLCJjdXJyZW50U3RhdGVzIiwidmFsaWRhdGVEcml2ZXJzTGljZW5zZSIsInZhbGlkU3NuUmVnZXgiLCJtaXN1c2VkUmVnZXgiLCJpbnZhbGlkRmlyc3RUaHJlZSIsInZhbGlkYXRlX3NzbiIsIm51bWJlclNTTiIsImlzQXJyYXlPck9ic2VydmFibGVBcnJheSIsInZhbGlkYXRlRW1haWwiLCJ2YWxpZGF0ZVBob25lIiwiaXNBbHBoYU51bWVyaWMiLCJjaCIsImlzVmFsaWRDYW5hZGlhblppcGNvZGUiLCJ2YWxpZGF0ZVNTTiIsInZhbGlkYXRlQ2hlY2siLCJ3b3JrZXJfY2hlY2siLCJjaGVjayIsImNvbnRhaW5zQXRTeW1ib2wiLCJjb250YWluc051bWJlciIsInZhbGlkYXRlTmFtZSIsInZhbGlkYXRlQWRkcmVzcyIsImFkZHJlc3MiLCJ2YWxpZGF0ZUN1c3RvbUlucHV0IiwidmFsaWRhdGVaaXBjb2RlIiwidmFsaWRhdGVDYW5hZGlhblppcGNvZGUiLCJ2YWxpZGF0ZU1WUkNoZWNrIiwidmFsaWRhdGVQaG9uZVZlcmlmaWNhdGlvbiIsImRpc2FibGVfY2hlY2siLCJlbnZfdmFyIiwidmFsaWRhdGVFbWFpbElkIiwidmFsaWRhdGVUdXJuSWQiXSwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxJQUNRLG1CQUFYRyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sY0FBZSxHQUFJSCxHQUNBLGlCQUFaQyxRQUNkQSxRQUFRLGVBQWlCRCxJQUV6QkQsRUFBSyxlQUFpQkMsSUFSeEIsQ0FTbUIsb0JBQVRLLEtBQXVCQSxLQUFPQyxNQUFNLFdBQzlDLE8sWUNURSxJQUFJQyxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVUixRQUduQyxJQUFJQyxFQUFTSyxFQUFpQkUsR0FBWSxDQUN6Q0MsRUFBR0QsRUFDSEUsR0FBRyxFQUNIVixRQUFTLElBVVYsT0FOQVcsRUFBUUgsR0FBVUksS0FBS1gsRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU08sR0FHL0ROLEVBQU9TLEdBQUksRUFHSlQsRUFBT0QsUUEwRGYsT0FyREFPLEVBQW9CTSxFQUFJRixFQUd4QkosRUFBb0JPLEVBQUlSLEVBR3hCQyxFQUFvQlEsRUFBSSxTQUFTZixFQUFTZ0IsRUFBTUMsR0FDM0NWLEVBQW9CVyxFQUFFbEIsRUFBU2dCLElBQ2xDRyxPQUFPQyxlQUFlcEIsRUFBU2dCLEVBQU0sQ0FBRUssWUFBWSxFQUFNQyxJQUFLTCxLQUtoRVYsRUFBb0JnQixFQUFJLFNBQVN2QixHQUNYLG9CQUFYd0IsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlcEIsRUFBU3dCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3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T0FBTzdCLFFBR1QrekMsR0FBa0IsU0FBQTNILEdBQU8sT0FDcEMsS0FBV0EsSUFBWUEsRUFBUXBzQyxRQUFVLEdBRTlCZzBDLEdBQTBCLFNBQUE1SCxHQUFPLE9BQzVDLEtBQVdBLElBQ044RyxHQUFlOUcsSUFDZmdILEdBQXVCaEgsSUFFakJydEMsR0FBVSxTQUFBeEIsR0FBSyxPQUMxQncxQyxHQUF5QngxQyxJQUVkMDJDLEdBQW1CLFNBQUFULEdBQUssT0FDbkMsS0FBV0EsSUFBMkIsaUJBQVZBLEVBQXFCQSxFQUFRLElBRTlDVSxHQUE0QixTQUFBanBDLEdBQ3ZDLE9BQVFBLEdBQ04sSUFBSyxXQUNMLElBQUssT0FDSCxNQUFPLFdBQ1QsSUFBSyxhQUNMLElBQUssUUFDSCxNQUFPLGFBQ1QsUUFDRSxNQUFPLEtBSUFrcEMsR0FBZ0IsU0FBQUMsR0FBTyxNQUNmLGlCQUFaQSxHQUFpRCxTQUExQkEsRUFBUXgxQyxlQUUzQnkxQyxHQUFrQixTQUFBenBCLEdBQUUsT0FBSSxLQUFXQSxJQUFxQixLQUFkQSxFQUFHNXFCLFFBRTdDczBDLEdBQWlCLFNBQUExcEIsR0FBRSxPQUM5QixLQUFXQSxJQUFPLGtCQUFrQnBrQixLQUFLb2tCIiwiZmlsZSI6InR1cm4tc2hhcmVkLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwidHVybi1zaGFyZWRcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1widHVybi1zaGFyZWRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1widHVybi1zaGFyZWRcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDIzOSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBraW5kT2YgPSAoZnVuY3Rpb24oY2FjaGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5mdW5jdGlvbiBraW5kT2ZUZXN0KHR5cGUpIHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzS2luZE9mKHRoaW5nKSB7XG4gICAgcmV0dXJuIGtpbmRPZih0aGluZykgPT09IHR5cGU7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh0aGluZykge1xuICB2YXIgcGF0dGVybiA9ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fFxuICAgIHRvU3RyaW5nLmNhbGwodGhpbmcpID09PSBwYXR0ZXJuIHx8XG4gICAgKGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09IHBhdHRlcm4pXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXRzKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZpbHRlcl1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gdG9GbGF0T2JqZWN0KHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyKSB7XG4gIHZhciBwcm9wcztcbiAgdmFyIGk7XG4gIHZhciBwcm9wO1xuICB2YXIgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKlxuICogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgdmFyIGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdFxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodGhpbmcpIHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIHZhciBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoaXNVbmRlZmluZWQoaSkpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIgaXNUeXBlZEFycmF5ID0gKGZ1bmN0aW9uKFR5cGVkQXJyYXkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT00sXG4gIGluaGVyaXRzOiBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0OiB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZjoga2luZE9mLFxuICBraW5kT2ZUZXN0OiBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aDogZW5kc1dpdGgsXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0OiBpc0ZpbGVMaXN0XG59O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixjPVwibW9udGhcIixmPVwicXVhcnRlclwiLGg9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsYykscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxjKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Yyx5OmgsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmZ9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1cIiRpc0RheWpzT2JqZWN0XCIsUz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fCEoIXR8fCF0W3BdKX0sdz1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtpZighZSlyZXR1cm4gZztpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO0Rbc10mJihpPXMpLG4mJihEW3NdPW4saT1zKTt2YXIgdT1lLnNwbGl0KFwiLVwiKTtpZighaSYmdS5sZW5ndGg+MSlyZXR1cm4gdCh1WzBdKX1lbHNle3ZhciBhPWUubmFtZTtEW2FdPWUsaT1hfXJldHVybiFyJiZpJiYoZz1pKSxpfHwhciYmZ30sTz1mdW5jdGlvbih0LGUpe2lmKFModCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZT9lOnt9O3JldHVybiBuLmRhdGU9dCxuLmFyZ3M9YXJndW1lbnRzLG5ldyBfKG4pfSxiPXY7Yi5sPXcsYi5pPVMsYi53PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCx7bG9jYWxlOmUuJEwsdXRjOmUuJHUseDplLiR4LCRvZmZzZXQ6ZS4kb2Zmc2V0fSl9O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTSh0KXt0aGlzLiRMPXcodC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZSh0KSx0aGlzLiR4PXRoaXMuJHh8fHQueHx8e30sdGhpc1twXT0hMH12YXIgbT1NLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbih0KXt0aGlzLiRkPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZSxuPXQudXRjO2lmKG51bGw9PT1lKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKGIudShlKSlyZXR1cm4gbmV3IERhdGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhL1okL2kudGVzdChlKSl7dmFyIHI9ZS5tYXRjaCgkKTtpZihyKXt2YXIgaT1yWzJdLTF8fDAscz0ocls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBuP25ldyBEYXRlKERhdGUuVVRDKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpKTpuZXcgRGF0ZShyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKGUpfSh0KSx0aGlzLmluaXQoKX0sbS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0TW9udGgoKSx0aGlzLiREPXQuZ2V0RGF0ZSgpLHRoaXMuJFc9dC5nZXREYXkoKSx0aGlzLiRIPXQuZ2V0SG91cnMoKSx0aGlzLiRtPXQuZ2V0TWludXRlcygpLHRoaXMuJHM9dC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRNaWxsaXNlY29uZHMoKX0sbS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sbS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1sKX0sbS5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PKHQpO3JldHVybiB0aGlzLnN0YXJ0T2YoZSk8PW4mJm48PXRoaXMuZW5kT2YoZSl9LG0uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQpPHRoaXMuc3RhcnRPZihlKX0sbS5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVuZE9mKGUpPE8odCl9LG0uJGc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBiLnUodCk/dGhpc1tlXTp0aGlzLnNldChuLHQpfSxtLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj0hIWIudShlKXx8ZSxmPWIucCh0KSxsPWZ1bmN0aW9uKHQsZSl7dmFyIGk9Yi53KG4uJHU/RGF0ZS5VVEMobi4keSxlLHQpOm5ldyBEYXRlKG4uJHksZSx0KSxuKTtyZXR1cm4gcj9pOmkuZW5kT2YoYSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi53KG4udG9EYXRlKClbdF0uYXBwbHkobi50b0RhdGUoXCJzXCIpLChyP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoZSkpLG4pfSx5PXRoaXMuJFcsTT10aGlzLiRNLG09dGhpcy4kRCx2PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSBoOnJldHVybiByP2woMSwwKTpsKDMxLDExKTtjYXNlIGM6cmV0dXJuIHI/bCgxLE0pOmwoMCxNKzEpO2Nhc2Ugbzp2YXIgZz10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsRD0oeTxnP3krNzp5KS1nO3JldHVybiBsKHI/bS1EOm0rKDYtRCksTSk7Y2FzZSBhOmNhc2UgZDpyZXR1cm4gJCh2K1wiSG91cnNcIiwwKTtjYXNlIHU6cmV0dXJuICQoditcIk1pbnV0ZXNcIiwxKTtjYXNlIHM6cmV0dXJuICQoditcIlNlY29uZHNcIiwyKTtjYXNlIGk6cmV0dXJuICQoditcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LG0uZW5kT2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhcnRPZih0LCExKX0sbS4kc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1iLnAodCksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksbD0obj17fSxuW2FdPWYrXCJEYXRlXCIsbltkXT1mK1wiRGF0ZVwiLG5bY109ZitcIk1vbnRoXCIsbltoXT1mK1wiRnVsbFllYXJcIixuW3VdPWYrXCJIb3Vyc1wiLG5bc109ZitcIk1pbnV0ZXNcIixuW2ldPWYrXCJTZWNvbmRzXCIsbltyXT1mK1wiTWlsbGlzZWNvbmRzXCIsbilbb10sJD1vPT09YT90aGlzLiREKyhlLXRoaXMuJFcpOmU7aWYobz09PWN8fG89PT1oKXt2YXIgeT10aGlzLmNsb25lKCkuc2V0KGQsMSk7eS4kZFtsXSgkKSx5LmluaXQoKSx0aGlzLiRkPXkuc2V0KGQsTWF0aC5taW4odGhpcy4kRCx5LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGwmJnRoaXMuJGRbbF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LG0uc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsZSl9LG0uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2IucCh0KV0oKX0sbS5hZGQ9ZnVuY3Rpb24ocixmKXt2YXIgZCxsPXRoaXM7cj1OdW1iZXIocik7dmFyICQ9Yi5wKGYpLHk9ZnVuY3Rpb24odCl7dmFyIGU9TyhsKTtyZXR1cm4gYi53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKHQqcikpLGwpfTtpZigkPT09YylyZXR1cm4gdGhpcy5zZXQoYyx0aGlzLiRNK3IpO2lmKCQ9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJHkrcik7aWYoJD09PWEpcmV0dXJuIHkoMSk7aWYoJD09PW8pcmV0dXJuIHkoNyk7dmFyIE09KGQ9e30sZFtzXT1lLGRbdV09bixkW2ldPXQsZClbJF18fDEsbT10aGlzLiRkLmdldFRpbWUoKStyKk07cmV0dXJuIGIudyhtLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkKC0xKnQsZSl9LG0uZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uaW52YWxpZERhdGV8fGw7dmFyIHI9dHx8XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGk9Yi56KHRoaXMpLHM9dGhpcy4kSCx1PXRoaXMuJG0sYT10aGlzLiRNLG89bi53ZWVrZGF5cyxjPW4ubW9udGhzLGY9bi5tZXJpZGllbSxoPWZ1bmN0aW9uKHQsbixpLHMpe3JldHVybiB0JiYodFtuXXx8dChlLHIpKXx8aVtuXS5zbGljZSgwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBiLnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9Znx8ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gbj9yLnRvTG93ZXJDYXNlKCk6cn07cmV0dXJuIHIucmVwbGFjZSh5LChmdW5jdGlvbih0LHIpe3JldHVybiByfHxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKGUuJHkpLnNsaWNlKC0yKTtjYXNlXCJZWVlZXCI6cmV0dXJuIGIucyhlLiR5LDQsXCIwXCIpO2Nhc2VcIk1cIjpyZXR1cm4gYSsxO2Nhc2VcIk1NXCI6cmV0dXJuIGIucyhhKzEsMixcIjBcIik7Y2FzZVwiTU1NXCI6cmV0dXJuIGgobi5tb250aHNTaG9ydCxhLGMsMyk7Y2FzZVwiTU1NTVwiOnJldHVybiBoKGMsYSk7Y2FzZVwiRFwiOnJldHVybiBlLiREO2Nhc2VcIkREXCI6cmV0dXJuIGIucyhlLiRELDIsXCIwXCIpO2Nhc2VcImRcIjpyZXR1cm4gU3RyaW5nKGUuJFcpO2Nhc2VcImRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c01pbixlLiRXLG8sMik7Y2FzZVwiZGRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c1Nob3J0LGUuJFcsbywzKTtjYXNlXCJkZGRkXCI6cmV0dXJuIG9bZS4kV107Y2FzZVwiSFwiOnJldHVybiBTdHJpbmcocyk7Y2FzZVwiSEhcIjpyZXR1cm4gYi5zKHMsMixcIjBcIik7Y2FzZVwiaFwiOnJldHVybiBkKDEpO2Nhc2VcImhoXCI6cmV0dXJuIGQoMik7Y2FzZVwiYVwiOnJldHVybiAkKHMsdSwhMCk7Y2FzZVwiQVwiOnJldHVybiAkKHMsdSwhMSk7Y2FzZVwibVwiOnJldHVybiBTdHJpbmcodSk7Y2FzZVwibW1cIjpyZXR1cm4gYi5zKHUsMixcIjBcIik7Y2FzZVwic1wiOnJldHVybiBTdHJpbmcoZS4kcyk7Y2FzZVwic3NcIjpyZXR1cm4gYi5zKGUuJHMsMixcIjBcIik7Y2FzZVwiU1NTXCI6cmV0dXJuIGIucyhlLiRtcywzLFwiMFwiKTtjYXNlXCJaXCI6cmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfHxpLnJlcGxhY2UoXCI6XCIsXCJcIil9KSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihyLGQsbCl7dmFyICQseT10aGlzLE09Yi5wKGQpLG09TyhyKSx2PShtLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsZz10aGlzLW0sRD1mdW5jdGlvbigpe3JldHVybiBiLm0oeSxtKX07c3dpdGNoKE0pe2Nhc2UgaDokPUQoKS8xMjticmVhaztjYXNlIGM6JD1EKCk7YnJlYWs7Y2FzZSBmOiQ9RCgpLzM7YnJlYWs7Y2FzZSBvOiQ9KGctdikvNjA0OGU1O2JyZWFrO2Nhc2UgYTokPShnLXYpLzg2NGU1O2JyZWFrO2Nhc2UgdTokPWcvbjticmVhaztjYXNlIHM6JD1nL2U7YnJlYWs7Y2FzZSBpOiQ9Zy90O2JyZWFrO2RlZmF1bHQ6JD1nfXJldHVybiBsPyQ6Yi5hKCQpfSxtLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoYykuJER9LG0uJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBEW3RoaXMuJExdfSxtLmxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiRMO3ZhciBuPXRoaXMuY2xvbmUoKSxyPXcodCxlLCEwKTtyZXR1cm4gciYmKG4uJEw9ciksbn0sbS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLncodGhpcy4kZCx0aGlzKX0sbS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxtLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sbS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxNfSgpLGs9Xy5wcm90b3R5cGU7cmV0dXJuIE8ucHJvdG90eXBlPWssW1tcIiRtc1wiLHJdLFtcIiRzXCIsaV0sW1wiJG1cIixzXSxbXCIkSFwiLHVdLFtcIiRXXCIsYV0sW1wiJE1cIixjXSxbXCIkeVwiLGhdLFtcIiREXCIsZF1dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tbdFsxXV09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGcoZSx0WzBdLHRbMV0pfX0pKSxPLmV4dGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LiRpfHwodChlLF8sTyksdC4kaT0hMCksT30sTy5sb2NhbGU9dyxPLmlzRGF5anM9UyxPLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIE8oMWUzKnQpfSxPLmVuPURbZ10sTy5Mcz1ELE8ucD17fSxPfSkpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbnZhciBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbnZhciBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChmdW5jdGlvbihjb2RlKSB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSBmdW5jdGlvbihlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpIHtcbiAgdmFyIGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3NFcnJvcjtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCJ2YXIgY3JlYXRlV3JhcCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVdyYXAnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9DVVJSWV9GTEFHID0gODtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFyZ3VtZW50cyBvZiBgZnVuY2AgYW5kIGVpdGhlciBpbnZva2VzXG4gKiBgZnVuY2AgcmV0dXJuaW5nIGl0cyByZXN1bHQsIGlmIGF0IGxlYXN0IGBhcml0eWAgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlXG4gKiBiZWVuIHByb3ZpZGVkLCBvciByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSByZW1haW5pbmcgYGZ1bmNgXG4gKiBhcmd1bWVudHMsIGFuZCBzbyBvbi4gVGhlIGFyaXR5IG9mIGBmdW5jYCBtYXkgYmUgc3BlY2lmaWVkIGlmIGBmdW5jLmxlbmd0aGBcbiAqIGlzIG5vdCBzdWZmaWNpZW50LlxuICpcbiAqIFRoZSBgXy5jdXJyeS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAqIH07XG4gKlxuICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5KGFiYyk7XG4gKlxuICogY3VycmllZCgxKSgyKSgzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIGN1cnJpZWQoMSwgMikoMyk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiBjdXJyaWVkKDEsIDIsIDMpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqL1xuZnVuY3Rpb24gY3VycnkoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9DVVJSWV9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkpO1xuICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeS5wbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxuY3VycnkucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBjdXJyeTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7XG4gICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksXG4gICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3RvcjtcbiIsIi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqXG4gKiBSZXBsYWNlcyBhbGwgYHBsYWNlaG9sZGVyYCBlbGVtZW50cyBpbiBgYXJyYXlgIHdpdGggYW4gaW50ZXJuYWwgcGxhY2Vob2xkZXJcbiAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZWlyIGluZGV4ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHZhbHVlID09PSBwbGFjZWhvbGRlciB8fCB2YWx1ZSA9PT0gUExBQ0VIT0xERVIpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IFBMQUNFSE9MREVSO1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVwbGFjZUhvbGRlcnM7XG4iLCIvKipcbiAqIExpc3Qgb2YgVVMgRHJpdmVyIGxpY2Vuc2VzIHJlZ2V4XG4gKiBBbGwgY3JlZGl0IGZvciBjb21waWxpbmcgdGhpcyBsaXN0IGdvZXMgdG8gZ2l0aHViIHVzZXIgbWlrZW1mbGVtaW5nXG4gKiBZb3UgbWF5IHNlZSBoaXMgb3JpZ2luYWwgQ0xJIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtlbWZsZW1pbmcvc3RhdGUtZHJpdmVycy1saWNlbnNlLXJlZ2V4XG4gKiBBbmQgdG8gdGhlIG9yaWdpbmFsIGNvbXBpbGVyIG9mIGFsbCB0aGUgcmVnZXgsIGdpdGh1YiB1c2VyIGFkYW1idWxsbWVyXG4gKiBZb3UgbWF5IHNlZSBoaXMgb3JpZ2luYWwgYXBwcm9hY2ggdG8gdGhpcyBtb2R1bGUgKGluIFBIUCkgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hZGFtYnVsbG1lci9VU0RMUmVnZXhcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUw6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7Nyw4fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7Niw3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICBdLFxuICBBSzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgQVo6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEFSOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIENBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA3IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBDTzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXszLDZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTiBtaW4gbGVuZ3RoIDQgbWF4IDdcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9WzAtOV17MSw1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFBTk5OTk4gbWluIGxlbmd0aCAzIG1heCA3XCIsXG4gICAgfSxcbiAgXSxcbiAgQ1Q6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBERTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxLDd9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS03IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBEQzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgRkw6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHsxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTIgTWF4TGVuZ3RoID0gMTJcIixcbiAgICB9LFxuICBdLFxuICBHQTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezcsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNy05IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBHVTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxMH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTAgTWF4TGVuZ3RoID0gMTBcIixcbiAgICB9LFxuICBdLFxuICBISTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJRDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9WzAtOV17Nn1bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgbGV0dGVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJTDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDExIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJTjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezksMTB9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDktMTAgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXszfVtBLVpdezJ9WzAtOV17NH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMaWNlbnNlIG11c3QgYmUgMyBudW1iZXJzIGZvbGxvd2VkIGJ5IDIgbGV0dGVycyBmb2xsb3dlZCBieSA0IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBLUzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBLWTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OCw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTEE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxLDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTUU6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9W0EtWl17MX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgbGV0dGVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBNRDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezEsMn1bMC05XXsxMSwxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMaWNlbnNlIG11c3QgYmUgMSBvciAyIGxldHRlcnMgZm9sbG93ZWQgYnkgMTEgb3IgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1BOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC8oXltBLVpdezF9WzAtOV17OH0kfF5bQS1aXXsyfVswLTldezd9JCkvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnMgb3IgMiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1JOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1OOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1TOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gVE9ETzogVGVzdCByZW1haW5pbmcgTGljZW5zZXNcbiAgTU86IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezUsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgNS05IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17Nn1bUl17MX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0xpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA2IG51bWJlcnMgZm9sbG93ZWQgYnkgXCJSXCInLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX1bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnMgZm9sbG93ZWQgYnkgMSBsZXR0ZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17M31bQS1aXXsxfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDMgbnVtYmVycyArIDEgYWxmYW51bWVyaWMgKyA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezUsNn1bQS1aXSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFOTk5OTkEgTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3IE9SIEFOTk5OTkEgTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgXSxcbiAgTVQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxM30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMTMgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZChcXGR8W0EtWl0pXFxkezJ9W0EtWl17M31cXGQkL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTlhOTkFBQU4gTWluTGVuZ3RoID0gOSBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bYS16XXszfVxcZHsxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaHJlZSBsZXR0ZXJzIGFuZCAxMCBkaWdpdHNcIixcbiAgICB9LFxuICBdLFxuICBORTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezMsOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk4gTWluTGVuZ3RoID0gNCBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgXSxcbiAgTlY6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5LDEwfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5LTEwIG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBOSDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvKF5bMC05XXsyfVtBLVpdezN9WzAtOV17NX0kfF5bQS1aXXszfVswLTldezh9JCkvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAyIG51bWJlcnMgZm9sbG93ZWQgYnkgMyBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDUgbnVtYmVycyBPUiAzIGxldHRlcnMgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTko6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezE0fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxNCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTk06IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDgtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTlk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxNywxOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTctMTggbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OCw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE5DOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17MSwxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS0xMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTkQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXszfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDMgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE9IOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgT0s6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezcsOX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBPUjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezUsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNS05IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk4gTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aMC05XXs2LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiWFhYWFhYWFhYIE1pbkxlbmd0aCA9IDYgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIFBBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgUkk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LDh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgb3IgOCBudW1iZXJzIHdpdGhvdXQgbGV0dGVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBTQzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezYsMTF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDYtMTEgbnVtYmVycyAobmV3OiA5LCBvbGQgZm9ybWF0OiA2LTExKVwiLFxuICAgIH0sXG4gIF0sXG4gIFNEOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Niw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA2LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFROOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Nyw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFRYOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezUsOH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OIE1pbkxlbmd0aCA9IDUgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gIF0sXG4gIFVUOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17NCwxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNC0xMCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVlQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNy04IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9W0FdJC9pLFxuICAgICAgZGVzY3JpcHRpb246ICdMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzIGZvbGxvd2VkIGJ5IFwiQVwiJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3fVtBLVpdPyQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk5OTk5OTk5BIE1pbkxlbmd0aCA9IDggTWF4TGVuZ3RoID0gOCBPUiBOTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gN1wiLFxuICAgIH0sXG4gIF0sXG4gIFZBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVkk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7MTB9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJOTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDEwIE1heExlbmd0aCA9IDEwXCIsXG4gICAgfSxcbiAgXSxcbiAgV0E6IFtcbiAgICB7XG4gICAgICByZWdleDogL14oPz0uezEyfSQpW0EtWl17MSw3fVtBLVowLTlcXFxcKl17NCwxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0xpY2Vuc2UgbXVzdCBiZSAxLTcgbGV0dGVycyBmb2xsb3dlZCBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgbnVtYmVycywgb3IgXCIqXCIgZm9yIGEgdG90YWwgb2YgMTIgY2hhcmFjdGVycycsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJYWFhYWFhYWFhYWFggTWluTGVuZ3RoID0gMTIgTWF4TGVuZ3RoID0gMTJcIixcbiAgICB9LFxuICBdLFxuICBXVjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxLDJ9WzAtOV17Nn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS0yIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsyfVxcZHs1LDZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQUFOTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDcgT1IgQUFOTk5OTk4gTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15cXGRbQS1aXVxcZHs1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5BTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgV0k6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEzfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMyBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgV1k6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFBSOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezcsOX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi90cmFuc2l0aW9uYWwnKTtcbnZhciB0b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuICAgIHZhciBjb250ZW50VHlwZSA9IGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG5cbiAgICB2YXIgaXNGaWxlTGlzdDtcblxuICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IChpc09iamVjdFBheWxvYWQgJiYgY29udGVudFR5cGUgPT09ICdtdWx0aXBhcnQvZm9ybS1kYXRhJykpIHtcbiAgICAgIHZhciBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcbiAgICAgIHJldHVybiB0b0Zvcm1EYXRhKGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCkpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vanNvbicpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcmVxdWlyZSgnLi9lbnYvRm9ybURhdGEnKVxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xudmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHdyYXBwZXIgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGxhenkgZXZhbHVhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICovXG5mdW5jdGlvbiBMYXp5V3JhcHBlcih2YWx1ZSkge1xuICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgdGhpcy5fX2Rpcl9fID0gMTtcbiAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gIHRoaXMuX190YWtlQ291bnRfXyA9IE1BWF9BUlJBWV9MRU5HVEg7XG4gIHRoaXMuX192aWV3c19fID0gW107XG59XG5cbi8vIEVuc3VyZSBgTGF6eVdyYXBwZXJgIGlzIGFuIGluc3RhbmNlIG9mIGBiYXNlTG9kYXNoYC5cbkxhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTGF6eVdyYXBwZXI7XG4iLCIvKipcbiAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUxvZGFzaDtcbiIsIi8qKlxuICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgdmFyIG9iamVjdCA9IGZ1bmM7XG4gIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SG9sZGVyO1xuIiwiKGZ1bmN0aW9uKGYpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiBleHBvcnRzICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiBleHBvcnRzLm5vZGVUeXBlICE9PSAnbnVtYmVyJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZiAoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgIT0gbnVsbCkge1xuICAgIGRlZmluZSAoW10sIGYpO1xuICB9IGVsc2Uge1xuICAgIHZhciBiYXNlNjQgPSBmICgpO1xuICAgIHZhciBnbG9iYWwgPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogJC5nbG9iYWw7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuYnRvYSAhPT0gJ2Z1bmN0aW9uJykgZ2xvYmFsLmJ0b2EgPSBiYXNlNjQuYnRvYTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5hdG9iICE9PSAnZnVuY3Rpb24nKSBnbG9iYWwuYXRvYiA9IGJhc2U2NC5hdG9iO1xuICB9XG5cbn0gKGZ1bmN0aW9uKCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuXG4gIGZ1bmN0aW9uIEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgfVxuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yICgpO1xuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuICAvLyBlbmNvZGVyXG4gIC8vIFtodHRwczovL2dpc3QuZ2l0aHViLmNvbS85OTkxNjZdIGJ5IFtodHRwczovL2dpdGh1Yi5jb20vbmlnbmFnXVxuICBmdW5jdGlvbiBidG9hKGlucHV0KSB7XG4gICAgdmFyIHN0ciA9IFN0cmluZyAoaW5wdXQpO1xuICAgIGZvciAoXG4gICAgICAvLyBpbml0aWFsaXplIHJlc3VsdCBhbmQgY291bnRlclxuICAgICAgdmFyIGJsb2NrLCBjaGFyQ29kZSwgaWR4ID0gMCwgbWFwID0gY2hhcnMsIG91dHB1dCA9ICcnO1xuICAgICAgLy8gaWYgdGhlIG5leHQgc3RyIGluZGV4IGRvZXMgbm90IGV4aXN0OlxuICAgICAgLy8gICBjaGFuZ2UgdGhlIG1hcHBpbmcgdGFibGUgdG8gXCI9XCJcbiAgICAgIC8vICAgY2hlY2sgaWYgZCBoYXMgbm8gZnJhY3Rpb25hbCBkaWdpdHNcbiAgICAgIHN0ci5jaGFyQXQgKGlkeCB8IDApIHx8IChtYXAgPSAnPScsIGlkeCAlIDEpO1xuICAgICAgLy8gXCI4IC0gaWR4ICUgMSAqIDhcIiBnZW5lcmF0ZXMgdGhlIHNlcXVlbmNlIDIsIDQsIDYsIDhcbiAgICAgIG91dHB1dCArPSBtYXAuY2hhckF0ICg2MyAmIGJsb2NrID4+IDggLSBpZHggJSAxICogOClcbiAgICApIHtcbiAgICAgIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQgKGlkeCArPSAzIC8gNCk7XG4gICAgICBpZiAoY2hhckNvZGUgPiAweEZGKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgKFwiJ2J0b2EnIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBlbmNvZGVkIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBvZiB0aGUgTGF0aW4xIHJhbmdlLlwiKTtcbiAgICAgIH1cbiAgICAgIGJsb2NrID0gYmxvY2sgPDwgOCB8IGNoYXJDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLy8gZGVjb2RlclxuICAvLyBbaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTAyMDM5Nl0gYnkgW2h0dHBzOi8vZ2l0aHViLmNvbS9hdGtdXG4gIGZ1bmN0aW9uIGF0b2IoaW5wdXQpIHtcbiAgICB2YXIgc3RyID0gKFN0cmluZyAoaW5wdXQpKS5yZXBsYWNlICgvWz1dKyQvLCAnJyk7IC8vICMzMTogRXh0ZW5kU2NyaXB0IGJhZCBwYXJzZSBvZiAvPVxuICAgIGlmIChzdHIubGVuZ3RoICUgNCA9PT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvciAoXCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLlwiKTtcbiAgICB9XG4gICAgZm9yIChcbiAgICAgIC8vIGluaXRpYWxpemUgcmVzdWx0IGFuZCBjb3VudGVyc1xuICAgICAgdmFyIGJjID0gMCwgYnMsIGJ1ZmZlciwgaWR4ID0gMCwgb3V0cHV0ID0gJyc7XG4gICAgICAvLyBnZXQgbmV4dCBjaGFyYWN0ZXJcbiAgICAgIGJ1ZmZlciA9IHN0ci5jaGFyQXQgKGlkeCsrKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25kLWFzc2lnblxuICAgICAgLy8gY2hhcmFjdGVyIGZvdW5kIGluIHRhYmxlPyBpbml0aWFsaXplIGJpdCBzdG9yYWdlIGFuZCBhZGQgaXRzIGFzY2lpIHZhbHVlO1xuICAgICAgfmJ1ZmZlciAmJiAoYnMgPSBiYyAlIDQgPyBicyAqIDY0ICsgYnVmZmVyIDogYnVmZmVyLFxuICAgICAgICAvLyBhbmQgaWYgbm90IGZpcnN0IG9mIGVhY2ggNCBjaGFyYWN0ZXJzLFxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gb25lIGFzY2lpIGNoYXJhY3RlclxuICAgICAgICBiYysrICUgNCkgPyBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoMjU1ICYgYnMgPj4gKC0yICogYmMgJiA2KSkgOiAwXG4gICAgKSB7XG4gICAgICAvLyB0cnkgdG8gZmluZCBjaGFyYWN0ZXIgaW4gdGFibGUgKDAtNjMsIG5vdCBmb3VuZCA9PiAtMSlcbiAgICAgIGJ1ZmZlciA9IGNoYXJzLmluZGV4T2YgKGJ1ZmZlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICByZXR1cm4ge2J0b2E6IGJ0b2EsIGF0b2I6IGF0b2J9O1xuXG59KSk7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGNyZWF0ZVdyYXAgPSByZXF1aXJlKCcuL19jcmVhdGVXcmFwJyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlXG4gKiBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYmluZGAgZXhjZXB0IGl0IGRvZXMgKipub3QqKlxuICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICpcbiAqIFRoZSBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4yLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gKiB9XG4gKlxuICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gKlxuICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsKGdyZWV0LCBfLCAnZnJlZCcpO1xuICogZ3JlZXRGcmVkKCdoaScpO1xuICogLy8gPT4gJ2hpIGZyZWQnXG4gKi9cbnZhciBwYXJ0aWFsID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWwpKTtcbiAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xufSk7XG5cbi8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbnBhcnRpYWwucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJ0aWFsO1xuIiwidmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xudmFyIGlzVmFsaWRVU0xpY2Vuc2UgPSByZXF1aXJlKFwiLi9pcy12YWxpZC11cy1saWNlbnNlXCIpO1xudmFyIHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlLWRyaXZlcnMtbGljZW5zZVwiKTtcbnZhciBzdXBwb3J0ZWRTdGF0ZXMgPSByZXF1aXJlKFwiLi9zdXBwb3J0ZWQtc3RhdGVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZHJpdmVyc0xpY2Vuc2VSZWdleDogZHJpdmVyc0xpY2Vuc2VSZWdleCxcbiAgaXNWYWxpZFVTTGljZW5zZTogaXNWYWxpZFVTTGljZW5zZSxcbiAgdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlOiB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UsXG4gIHN1cHBvcnRlZFN0YXRlczogc3VwcG9ydGVkU3RhdGVzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgRm9ybURhdGEoKTtcblxuICB2YXIgc3RhY2sgPSBbXTtcblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGQoZGF0YSwgcGFyZW50S2V5KSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoZGF0YSkgfHwgdXRpbHMuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2YoZGF0YSkgIT09IC0xKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhcmVudEtleSk7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrLnB1c2goZGF0YSk7XG5cbiAgICAgIHV0aWxzLmZvckVhY2goZGF0YSwgZnVuY3Rpb24gZWFjaCh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgdmFyIGZ1bGxLZXkgPSBwYXJlbnRLZXkgPyBwYXJlbnRLZXkgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgIHZhciBhcnI7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmICFwYXJlbnRLZXkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgIXV0aWxzLmlzVW5kZWZpbmVkKGVsKSAmJiBmb3JtRGF0YS5hcHBlbmQoZnVsbEtleSwgY29udmVydFZhbHVlKGVsKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICB9KTtcblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJlbnRLZXksIGNvbnZlcnRWYWx1ZShkYXRhKSk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Gb3JtRGF0YTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xudmFyIHBhcnNlUHJvdG9jb2wgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0LCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWxlZEVycm9yKCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIFsgJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScgXS5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbWVyZ2VNYXAgPSB7XG4gICAgJ3VybCc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ21ldGhvZCc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2RhdGEnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdiYXNlVVJMJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVxdWVzdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlc3BvbnNlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncGFyYW1zU2VyaWFsaXplcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0TWVzc2FnZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3dpdGhDcmVkZW50aWFscyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2FkYXB0ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZVR5cGUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmQ29va2llTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25VcGxvYWRQcm9ncmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uRG93bmxvYWRQcm9ncmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2RlY29tcHJlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Qm9keUxlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2JlZm9yZVJlZGlyZWN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNwb3J0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cEFnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cHNBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2NhbmNlbFRva2VuJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnc29ja2V0UGF0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlRW5jb2RpbmcnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd2YWxpZGF0ZVN0YXR1cyc6IG1lcmdlRGlyZWN0S2V5c1xuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoY29uZmlnMSkuY29uY2F0KE9iamVjdC5rZXlzKGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICB2YXIgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIHZhciBjb25maWdWYWx1ZSA9IG1lcmdlKHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yNy4yXCJcbn07IiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUlzTmFOID0gcmVxdWlyZSgnLi9fYmFzZUlzTmFOJyksXG4gICAgc3RyaWN0SW5kZXhPZiA9IHJlcXVpcmUoJy4vX3N0cmljdEluZGV4T2YnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW5kZXhPZjtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDAsXG4gICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTIuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvRmluaXRlKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b0Zpbml0ZShJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9GaW5pdGUoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gIH1cbiAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgIHZhciBzaWduID0gKHZhbHVlIDwgMCA/IC0xIDogMSk7XG4gICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgfVxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvRmluaXRlO1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBjcmVhdGVCaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlQmluZCcpLFxuICAgIGNyZWF0ZUN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3VycnknKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVQYXJ0aWFsID0gcmVxdWlyZSgnLi9fY3JlYXRlUGFydGlhbCcpLFxuICAgIGdldERhdGEgPSByZXF1aXJlKCcuL19nZXREYXRhJyksXG4gICAgbWVyZ2VEYXRhID0gcmVxdWlyZSgnLi9fbWVyZ2VEYXRhJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAqIGB0aGlzYCBiaW5kaW5nIGFuZCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgICAxIC0gYF8uYmluZGBcbiAqICAgIDIgLSBgXy5iaW5kS2V5YFxuICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gKiAgICA4IC0gYF8uY3VycnlgXG4gKiAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAqICAxMjggLSBgXy5yZWFyZ2BcbiAqICAyNTYgLSBgXy5hcnlgXG4gKiAgNTEyIC0gYF8uZmxpcGBcbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIGFyeSA9IGFyeSA9PT0gdW5kZWZpbmVkID8gYXJ5IDogbmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLCAwKTtcbiAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7XG4gICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICBpZiAoZGF0YSkge1xuICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgfVxuICBmdW5jID0gbmV3RGF0YVswXTtcbiAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gIHRoaXNBcmcgPSBuZXdEYXRhWzJdO1xuICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRhWzldID09PSB1bmRlZmluZWRcbiAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgaWYgKCFhcml0eSAmJiBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgfVxuICBpZiAoIWJpdG1hc2sgfHwgYml0bWFzayA9PSBXUkFQX0JJTkRfRkxBRykge1xuICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpO1xuICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgfVxuICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlV3JhcDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyk7XG5cbi8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1ldGFNYXA7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgY291bnRIb2xkZXJzID0gcmVxdWlyZSgnLi9fY291bnRIb2xkZXJzJyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlb3JkZXIgPSByZXF1aXJlKCcuL19yZW9yZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUh5YnJpZDtcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICByZXN1bHRbbGVmdEluZGV4KytdID0gYXJnc1thcmdzSW5kZXgrK107XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJncztcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gKiBpcyB0YWlsb3JlZCBmb3IgYF8ucGFydGlhbFJpZ2h0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0luZGV4ID0gLTEsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICByaWdodExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlhbHNbcmlnaHRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCJ2YXIgaXNMYXppYWJsZSA9IHJlcXVpcmUoJy4vX2lzTGF6aWFibGUnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBjb250aW51ZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYywgYml0bWFzaywgd3JhcEZ1bmMsIHBsYWNlaG9sZGVyLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgIG5ld0hvbGRlcnMgPSBpc0N1cnJ5ID8gaG9sZGVycyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld0hvbGRlcnNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBob2xkZXJzLFxuICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdQYXJ0aWFsc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IHBhcnRpYWxzO1xuXG4gIGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICBpZiAoIShiaXRtYXNrICYgV1JBUF9DVVJSWV9CT1VORF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyk7XG4gIH1cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld0hvbGRlcnMsIG5ld1BhcnRpYWxzUmlnaHQsXG4gICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICB2YXIgcmVzdWx0ID0gd3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7XG4gIH1cbiAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcocmVzdWx0LCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWN1cnJ5O1xuIiwidmFyIG1ldGFNYXAgPSByZXF1aXJlKCcuL19tZXRhTWFwJyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpO1xuXG4vKipcbiAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqL1xudmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RGF0YTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgdGhpcy5fX2luZGV4X18gPSAwO1xuICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG59XG5cbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9kYXNoV3JhcHBlcjtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBiYXNlU2V0RGF0YSA9IHJlcXVpcmUoJy4vX2Jhc2VTZXREYXRhJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAqIGZ1bmN0aW9uIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZVxuICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXREYXRhO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGdldFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fZ2V0V3JhcERldGFpbHMnKSxcbiAgICBpbnNlcnRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2luc2VydFdyYXBEZXRhaWxzJyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpLFxuICAgIHVwZGF0ZVdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fdXBkYXRlV3JhcERldGFpbHMnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICovXG5mdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFdyYXBUb1N0cmluZztcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG52YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHN5bWJvbCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNVbmljb2RlKHN0cmluZykge1xuICByZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNVbmljb2RlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgYmFzZUZpbHRlciA9IHJlcXVpcmUoJy4vX2Jhc2VGaWx0ZXInKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIENvbWJpbmluZyBzZXZlcmFsIHByZWRpY2F0ZXMgdXNpbmcgYF8ub3ZlckV2ZXJ5YCBvciBgXy5vdmVyU29tZWAuXG4gKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAnYmFybmV5J11cbiAqL1xuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaWx0ZXI7XG4iLCJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBgdmFsdWVgIGlzIGZvdW5kIGluIGBhcnJheWBcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXMgdGhlXG4gKiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmRleE9mO1xuIiwidmFyIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICpcbiAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICogcHJvcGVydGllcy5cbiAqXG4gKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbXB0eShudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkodHJ1ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUuc3BsaWNlID09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5zaXplO1xuICB9XG4gIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFbXB0eTtcbiIsIiFmdW5jdGlvbihyLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOihyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6cnx8c2VsZikuZGF5anNfcGx1Z2luX3JlbGF0aXZlVGltZT1lKCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKHIsZSx0KXtyPXJ8fHt9O3ZhciBuPWUucHJvdG90eXBlLG89e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9O2Z1bmN0aW9uIGkocixlLHQsbyl7cmV0dXJuIG4uZnJvbVRvQmFzZShyLGUsdCxvKX10LmVuLnJlbGF0aXZlVGltZT1vLG4uZnJvbVRvQmFzZT1mdW5jdGlvbihlLG4saSxkLHUpe2Zvcih2YXIgZixhLHMsbD1pLiRsb2NhbGUoKS5yZWxhdGl2ZVRpbWV8fG8saD1yLnRocmVzaG9sZHN8fFt7bDpcInNcIixyOjQ0LGQ6XCJzZWNvbmRcIn0se2w6XCJtXCIscjo4OX0se2w6XCJtbVwiLHI6NDQsZDpcIm1pbnV0ZVwifSx7bDpcImhcIixyOjg5fSx7bDpcImhoXCIscjoyMSxkOlwiaG91clwifSx7bDpcImRcIixyOjM1fSx7bDpcImRkXCIscjoyNSxkOlwiZGF5XCJ9LHtsOlwiTVwiLHI6NDV9LHtsOlwiTU1cIixyOjEwLGQ6XCJtb250aFwifSx7bDpcInlcIixyOjE3fSx7bDpcInl5XCIsZDpcInllYXJcIn1dLG09aC5sZW5ndGgsYz0wO2M8bTtjKz0xKXt2YXIgeT1oW2NdO3kuZCYmKGY9ZD90KGUpLmRpZmYoaSx5LmQsITApOmkuZGlmZihlLHkuZCwhMCkpO3ZhciBwPShyLnJvdW5kaW5nfHxNYXRoLnJvdW5kKShNYXRoLmFicyhmKSk7aWYocz1mPjAscDw9eS5yfHwheS5yKXtwPD0xJiZjPjAmJih5PWhbYy0xXSk7dmFyIHY9bFt5LmxdO3UmJihwPXUoXCJcIitwKSksYT1cInN0cmluZ1wiPT10eXBlb2Ygdj92LnJlcGxhY2UoXCIlZFwiLHApOnYocCxuLHkubCxzKTticmVha319aWYobilyZXR1cm4gYTt2YXIgTT1zP2wuZnV0dXJlOmwucGFzdDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBNP00oYSk6TS5yZXBsYWNlKFwiJXNcIixhKX0sbi50bz1mdW5jdGlvbihyLGUpe3JldHVybiBpKHIsZSx0aGlzLCEwKX0sbi5mcm9tPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIGkocixlLHRoaXMpfTt2YXIgZD1mdW5jdGlvbihyKXtyZXR1cm4gci4kdT90LnV0YygpOnQoKX07bi50b05vdz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy50byhkKHRoaXMpLHIpfSxuLmZyb21Ob3c9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZnJvbShkKHRoaXMpLHIpfX19KSk7IiwiIWZ1bmN0aW9uKHQsaSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9aSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoaSk6KHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5fdXRjPWkoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD1cIm1pbnV0ZVwiLGk9L1srLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2csZT0vKFsrLV18XFxkXFxkKS9nO3JldHVybiBmdW5jdGlvbihzLGYsbil7dmFyIHU9Zi5wcm90b3R5cGU7bi51dGM9ZnVuY3Rpb24odCl7dmFyIGk9e2RhdGU6dCx1dGM6ITAsYXJnczphcmd1bWVudHN9O3JldHVybiBuZXcgZihpKX0sdS51dGM9ZnVuY3Rpb24oaSl7dmFyIGU9bih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITB9KTtyZXR1cm4gaT9lLmFkZCh0aGlzLnV0Y09mZnNldCgpLHQpOmV9LHUubG9jYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITF9KX07dmFyIHI9dS5wYXJzZTt1LnBhcnNlPWZ1bmN0aW9uKHQpe3QudXRjJiYodGhpcy4kdT0hMCksdGhpcy4kdXRpbHMoKS51KHQuJG9mZnNldCl8fCh0aGlzLiRvZmZzZXQ9dC4kb2Zmc2V0KSxyLmNhbGwodGhpcyx0KX07dmFyIG89dS5pbml0O3UuaW5pdD1mdW5jdGlvbigpe2lmKHRoaXMuJHUpe3ZhciB0PXRoaXMuJGQ7dGhpcy4keT10LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy4kTT10LmdldFVUQ01vbnRoKCksdGhpcy4kRD10LmdldFVUQ0RhdGUoKSx0aGlzLiRXPXQuZ2V0VVRDRGF5KCksdGhpcy4kSD10LmdldFVUQ0hvdXJzKCksdGhpcy4kbT10LmdldFVUQ01pbnV0ZXMoKSx0aGlzLiRzPXQuZ2V0VVRDU2Vjb25kcygpLHRoaXMuJG1zPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9ZWxzZSBvLmNhbGwodGhpcyl9O3ZhciBhPXUudXRjT2Zmc2V0O3UudXRjT2Zmc2V0PWZ1bmN0aW9uKHMsZil7dmFyIG49dGhpcy4kdXRpbHMoKS51O2lmKG4ocykpcmV0dXJuIHRoaXMuJHU/MDpuKHRoaXMuJG9mZnNldCk/YS5jYWxsKHRoaXMpOnRoaXMuJG9mZnNldDtpZihcInN0cmluZ1wiPT10eXBlb2YgcyYmKHM9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9XCJcIik7dmFyIHM9dC5tYXRjaChpKTtpZighcylyZXR1cm4gbnVsbDt2YXIgZj0oXCJcIitzWzBdKS5tYXRjaChlKXx8W1wiLVwiLDAsMF0sbj1mWzBdLHU9NjAqK2ZbMV0rICtmWzJdO3JldHVybiAwPT09dT8wOlwiK1wiPT09bj91Oi11fShzKSxudWxsPT09cykpcmV0dXJuIHRoaXM7dmFyIHU9TWF0aC5hYnMocyk8PTE2PzYwKnM6cztpZigwPT09dSlyZXR1cm4gdGhpcy51dGMoZik7dmFyIHI9dGhpcy5jbG9uZSgpO2lmKGYpcmV0dXJuIHIuJG9mZnNldD11LHIuJHU9ITEscjt2YXIgbz10aGlzLiR1P3RoaXMudG9EYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTotMSp0aGlzLnV0Y09mZnNldCgpO3JldHVybihyPXRoaXMubG9jYWwoKS5hZGQodStvLHQpKS4kb2Zmc2V0PXUsci4keC4kbG9jYWxPZmZzZXQ9byxyfTt2YXIgaD11LmZvcm1hdDt1LmZvcm1hdD1mdW5jdGlvbih0KXt2YXIgaT10fHwodGhpcy4kdT9cIllZWVktTU0tRERUSEg6bW06c3NbWl1cIjpcIlwiKTtyZXR1cm4gaC5jYWxsKHRoaXMsaSl9LHUudmFsdWVPZj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJHV0aWxzKCkudSh0aGlzLiRvZmZzZXQpPzA6dGhpcy4kb2Zmc2V0Kyh0aGlzLiR4LiRsb2NhbE9mZnNldHx8dGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpKTtyZXR1cm4gdGhpcy4kZC52YWx1ZU9mKCktNmU0KnR9LHUuaXNVVEM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuJHV9LHUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfSx1LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9VVENTdHJpbmcoKX07dmFyIGw9dS50b0RhdGU7dS50b0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuXCJzXCI9PT10JiZ0aGlzLiRvZmZzZXQ/bih0aGlzLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3M6U1NTXCIpKS50b0RhdGUoKTpsLmNhbGwodGhpcyl9O3ZhciBjPXUuZGlmZjt1LmRpZmY9ZnVuY3Rpb24odCxpLGUpe2lmKHQmJnRoaXMuJHU9PT10LiR1KXJldHVybiBjLmNhbGwodGhpcyx0LGksZSk7dmFyIHM9dGhpcy5sb2NhbCgpLGY9bih0KS5sb2NhbCgpO3JldHVybiBjLmNhbGwocyxmLGksZSl9fX0pKTsiLCJ2YXIgY3JlYXRlQ2FzZUZpcnN0ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ2FzZUZpcnN0Jyk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAqIC8vID0+ICdGcmVkJ1xuICpcbiAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICogLy8gPT4gJ0ZSRUQnXG4gKi9cbnZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVwcGVyRmlyc3Q7XG4iLCJ2YXIgY3JlYXRlUmFuZ2UgPSByZXF1aXJlKCcuL19jcmVhdGVSYW5nZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gKlxuICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yYW5nZSg0KTtcbiAqIC8vID0+IFswLCAxLCAyLCAzXVxuICpcbiAqIF8ucmFuZ2UoLTQpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICpcbiAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAqXG4gKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDQsIDApO1xuICogLy8gPT4gWzEsIDEsIDFdXG4gKlxuICogXy5yYW5nZSgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmFuZ2U7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcbmF4aW9zLlZFUlNJT04gPSByZXF1aXJlKCcuL2Vudi9kYXRhJykudmVyc2lvbjtcbmF4aW9zLnRvRm9ybURhdGEgPSByZXF1aXJlKCcuL2hlbHBlcnMvdG9Gb3JtRGF0YScpO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2xpYi9jb3JlL0F4aW9zRXJyb3InKTtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4vYnVpbGRGdWxsUGF0aCcpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzXG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vQXhpb3NFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICB2YXIgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxubW9kdWxlLmV4cG9ydHMgPSBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIHZhciBvcHQgPSBrZXlzW2ldO1xuICAgIHZhciB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbCA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaWx0ZXI7XG4iLCJ2YXIgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBjcmVhdGVCYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VFYWNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VFYWNoO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VFYWNoO1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgYmFzZUlzTWF0Y2ggPSByZXF1aXJlKCcuL19iYXNlSXNNYXRjaCcpLFxuICAgIGdldE1hdGNoRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hdGNoRGF0YScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXM7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpLFxuICAgIGdldCA9IHJlcXVpcmUoJy4vZ2V0JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwidmFyIGJhc2VIYXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VIYXNJbicpLFxuICAgIGhhc1BhdGggPSByZXF1aXJlKCcuL19oYXNQYXRoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNJbjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXNJbjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgIGlmICghKHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc0Z1bmMob2JqZWN0LCBrZXkpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICB9XG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpICYmXG4gICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNQYXRoO1xuIiwidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHk7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5RGVlcDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwidmFyIGJhc2VUcmltID0gcmVxdWlyZSgnLi9fYmFzZVRyaW0nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXI7XG4iLCJ2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZSgnLi9fdHJpbW1lZEVuZEluZGV4Jyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVHJpbTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmltbWVkRW5kSW5kZXg7XG4iLCJ2YXIgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmluZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYHBsYWNlaG9sZGVyYCBvY2N1cnJlbmNlcyBpbiBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAqL1xuZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gMDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvdW50SG9sZGVycztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBnZXRGdW5jTmFtZSA9IHJlcXVpcmUoJy4vX2dldEZ1bmNOYW1lJyksXG4gICAgbG9kYXNoID0gcmVxdWlyZSgnLi93cmFwcGVyTG9kYXNoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGF6aWFibGUoZnVuYykge1xuICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChmdW5jID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7XG4gIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xhemlhYmxlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXJDbG9uZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFdyYXBEZXRhaWxzO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy87XG5cbi8qKlxuICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICB2YXIgbGVuZ3RoID0gZGV0YWlscy5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICBkZXRhaWxzID0gZGV0YWlscy5qb2luKGxlbmd0aCA+IDIgPyAnLCAnIDogJyAnKTtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0V3JhcERldGFpbHM7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVBhcnRpYWw7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gKlxuICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgXG4gKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICogZXhlY3V0ZWQgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3ZSBtYWtlXG4gKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkge1xuICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLFxuICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgdmFyIGlzQ29tYm8gPVxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgLy8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG4gIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgZGF0YVsyXSA9IHNvdXJjZVsyXTtcbiAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gIGlmICh2YWx1ZSkge1xuICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogc291cmNlWzRdO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gIHZhbHVlID0gc291cmNlWzVdO1xuICBpZiAodmFsdWUpIHtcbiAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgZGF0YVs1XSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs2XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJnUG9zYCBpZiBhdmFpbGFibGUuXG4gIHZhbHVlID0gc291cmNlWzddO1xuICBpZiAodmFsdWUpIHtcbiAgICBkYXRhWzddID0gdmFsdWU7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9BUllfRkxBRykge1xuICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcml0eWAgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICBkYXRhWzBdID0gc291cmNlWzBdO1xuICBkYXRhWzFdID0gbmV3Qml0bWFzaztcblxuICByZXR1cm4gZGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZURhdGE7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwidmFyIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhc2VGaXJzdDtcbiIsInZhciBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0U2xpY2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwidmFyIGFzY2lpVG9BcnJheSA9IHJlcXVpcmUoJy4vX2FzY2lpVG9BcnJheScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgdW5pY29kZVRvQXJyYXkgPSByZXF1aXJlKCcuL191bmljb2RlVG9BcnJheScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcbiIsIi8qKlxuICogVmFsaWRhdGVzIGEgVVMgRHJpdmVycyBMaWNlbnNlIGdpdmVuIGEgdHdvIGxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIFVTXG4gKiBTdGF0ZSB0byB2YWxpZGF0ZSBpdCBpbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGljZW5zZSBEcml2ZXJzIExpY2Vuc2UgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgVHdvIENoYXJhY3RlciBBYmJyZXZpYXRpb24gZm9yIHRoZSBVUyBTdGF0ZSB0byB2YWxpZGF0ZVxuICogdGhlIGxpY2Vuc2UgaW4uXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxpY2Vuc2UgaXMgdmFsaWQgb3Igbm90LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGlzVmFsaWRVU0xpY2Vuc2UgfSA9IHJlcXVpcmUoJ0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlJylcbiAqXG4gKiBjb25zdCB2YWxpZCA9IGlzVmFsaWRVU0xpY2Vuc2UoJzEyMzQ1NjcnLCAnQUwnKVxuICogY29uc29sZS5sb2codmFsaWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBpc1ZhbGlkVVNMaWNlbnNlXG4gKi9cblxudmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpY2Vuc2UsIHN0YXRlKSB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHZhbGlkYXRvcnMgPSBkcml2ZXJzTGljZW5zZVJlZ2V4W3N0YXRlXTtcbiAgaWYgKCF2YWxpZGF0b3JzKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNsZWFuTGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgvW1xccy1dL2csICcnKTtcbiAgdmFyIHJlYXNvbnMgPSB2YWxpZGF0b3JzXG4gICAgLmZpbHRlcihmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAhdmFsLnJlZ2V4LnRlc3QoY2xlYW5MaWNlbnNlKTtcbiAgICB9KVxuICAgIC5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdmFsLmRlc2NyaXB0aW9uO1xuICAgIH0pO1xuICByZXR1cm4gcmVhc29ucy5sZW5ndGggPCB2YWxpZGF0b3JzLmxlbmd0aDtcbn07XG4iLCIvKipcbiAqIFZhbGlkYXRlcyBhIFVTIERyaXZlcnMgTGljZW5zZSBnaXZlbiBhIHR3byBsZXR0ZXIgYWJicmV2aWF0aW9uIG9mIHRoZSBVU1xuICogU3RhdGUgdG8gdmFsaWRhdGUgaXQgaW4uXG4gKiBTaW1pbGFyIHRvIGlzVmFsaWRVU0xpY2Vuc2UgYnV0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSAndmFsaWQnXG4gKiBib29sZWFuIHByb3BlcnR5IGZvciB0aGUgdmFsaWRhdGlvbiBpdHNlbGYsIGFzIHdlbGwgYXMgYSByZWFzb25zIGFycmF5IHRoYXRcbiAqIGF0dGVtcHRzIHRvIGV4cGxhaW4gdGhlIHJlc3VsdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsaWNlbnNlIERyaXZlcnMgTGljZW5zZSB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSBUd28gQ2hhcmFjdGVyIEFiYnJldmlhdGlvbiBmb3IgdGhlIFVTIFN0YXRlIHRvIHZhbGlkYXRlXG4gKiB0aGUgbGljZW5zZSBpbi5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSB2YWxpZGF0aW9uIGFuZCBhIHJlYXNvbnNcbiAqIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NycsICdBTCcpXG4gKiBjb25zb2xlLmxvZyh2YWxpZExpY2Vuc2UudmFsaWQpIC8vIHRydWVcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NzgnLCAnQUwnKSAvL1xuICogY29uc29sZS5sb2codmFsaWRMaWNlbnNlLnJlYXNvbnMpIC8vIFsnTGljZW5zZSBtdXN0IGJlIDEtNyBudW1iZXJzJ11cbiAqXG4gKiBAbmFtZSB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2VcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGljZW5zZSwgc3RhdGUpIHtcbiAgaWYgKHR5cGVvZiBsaWNlbnNlICE9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBzdGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uczogWydMaWNlbnNlIGFuZCBTdGF0ZSBtdXN0IGJlIFN0cmluZ3MnXSB9O1xuICB9XG4gIHZhciB2YWxpZGF0b3JzID0gZHJpdmVyc0xpY2Vuc2VSZWdleFtzdGF0ZV07XG4gIGlmICghdmFsaWRhdG9ycykgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBbJ05vdCBhIHZhbGlkIFVTIFN0YXRlJ10gfTtcbiAgY29uc3QgY2xlYW5MaWNlbnNlID0gbGljZW5zZS5yZXBsYWNlKC9bXFxzLV0vZywgJycpO1xuICB2YXIgcmVhc29ucyA9IHZhbGlkYXRvcnNcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHZhbCkge1xuICAgICAgcmV0dXJuICF2YWwucmVnZXgudGVzdChjbGVhbkxpY2Vuc2UpO1xuICAgIH0pXG4gICAgLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuZGVzY3JpcHRpb247XG4gICAgfSk7XG4gIHJldHVybiB7IHZhbGlkOiByZWFzb25zLmxlbmd0aCA8IHZhbGlkYXRvcnMubGVuZ3RoLCByZWFzb25zIH1cbn07XG4iLCIvKipcbiAqIExpc3Qgb2Ygc3VwcG9ydGVkIFVTIFN0YXRlcyBhcyBhbiBhcnJheVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHN1cHBvcnRlZFN0YXRlcyB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IGlzU3VwcG9ydGVkID0gY3VycmVudFN0YXRlcy5pbmNsdWRlcygnSUwnKVxuICogY29uc29sZS5sb2coaXNTdXBwb3J0ZWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBzdXBwb3J0ZWRTdGF0ZXNcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG4iLCJ2YXIgYmFzZVJhbmdlID0gcmVxdWlyZSgnLi9fYmFzZVJhbmdlJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIHRvRmluaXRlID0gcmVxdWlyZSgnLi90b0Zpbml0ZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZ2U7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAqIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSYW5nZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBidG9hIH0gZnJvbSBcIkJhc2U2NFwiO1xuXG4vKipcbiAqIE1hcHMgSFRUUCBzdGF0dXMgdG8gYXBpc2F1Y2Utc3R5bGUgYHByb2JsZW1gIHN0cmluZ3MgZm9yIGNvbXBhdGliaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIHByb2JsZW1Gcm9tU3RhdHVzKHN0YXR1cykge1xuICBpZiAoc3RhdHVzID49IDQwMCAmJiBzdGF0dXMgPD0gNDk5KSByZXR1cm4gXCJDTElFTlRfRVJST1JcIjtcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHJldHVybiBcIlNFUlZFUl9FUlJPUlwiO1xuICByZXR1cm4gXCJVTktOT1dOX0VSUk9SXCI7XG59XG5cbi8qKlxuICogQXhpb3MgaW5zdGFuY2Ugd3JhcHBlZCB0byBtYXRjaCBhcGlzYXVjZSByZXNwb25zZSBzaGFwZSB7IG9rLCBkYXRhLCBzdGF0dXMsIHByb2JsZW0sIC4uLiB9XG4gKiBzbyBleGlzdGluZyBjYWxsZXJzIG9mIEJhc2VBUEkga2VlcCB3b3JraW5nLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBcGlzYXVjZUNvbXBhdGlibGVDbGllbnQoeyBiYXNlVVJMLCBoZWFkZXJzOiBpbml0aWFsSGVhZGVycyA9IHt9IH0pIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoe1xuICAgIGJhc2VVUkwsXG4gICAgaGVhZGVyczoge1xuICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIC4uLmluaXRpYWxIZWFkZXJzXG4gICAgfSxcbiAgICB2YWxpZGF0ZVN0YXR1czogKCkgPT4gdHJ1ZVxuICB9KTtcblxuICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuICAgIHJlc3BvbnNlID0+ICh7XG4gICAgICBvazogcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDAsXG4gICAgICBkYXRhOiByZXNwb25zZS5kYXRhLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnOiByZXNwb25zZS5jb25maWcsXG4gICAgICBwcm9ibGVtOlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMFxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogcHJvYmxlbUZyb21TdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSxcbiAgICAgIG9yaWdpbmFsRXJyb3I6IG51bGxcbiAgICB9KSxcbiAgICBlcnJvciA9PiAoe1xuICAgICAgb2s6IGZhbHNlLFxuICAgICAgcHJvYmxlbTpcbiAgICAgICAgZXJyb3IuY29kZSA9PT0gXCJFQ09OTkFCT1JURURcIlxuICAgICAgICAgID8gXCJUSU1FT1VUX0VSUk9SXCJcbiAgICAgICAgICA6IFwiTkVUV09SS19FUlJPUlwiLFxuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgIGhlYWRlcnM6IG51bGwsXG4gICAgICBjb25maWc6IGVycm9yLmNvbmZpZyxcbiAgICAgIG9yaWdpbmFsRXJyb3I6IGVycm9yXG4gICAgfSlcbiAgKTtcblxuICBjb25zdCBjbGllbnQgPSB7XG4gICAgZ2V0QmFzZVVSTDogKCkgPT4gaW5zdGFuY2UuZGVmYXVsdHMuYmFzZVVSTCB8fCBcIlwiLFxuICAgIHNldEhlYWRlcnM6IG5ld0hlYWRlcnMgPT4ge1xuICAgICAgT2JqZWN0LmFzc2lnbihpbnN0YW5jZS5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vbiwgbmV3SGVhZGVycyk7XG4gICAgfSxcbiAgICBnZXQ6ICh1cmwsIHBhcmFtcywgY29uZmlnKSA9PlxuICAgICAgaW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIHBhcmFtczogcGFyYW1zID09IG51bGwgPyB1bmRlZmluZWQgOiBwYXJhbXNcbiAgICAgIH0pLFxuICAgIHBvc3Q6ICh1cmwsIGRhdGEsIGNvbmZpZykgPT4gaW5zdGFuY2UucG9zdCh1cmwsIGRhdGEsIGNvbmZpZyksXG4gICAgcHV0OiAodXJsLCBkYXRhLCBjb25maWcpID0+IGluc3RhbmNlLnB1dCh1cmwsIGRhdGEsIGNvbmZpZylcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xpZW50LCBcImhlYWRlcnNcIiwge1xuICAgIGdldDogKCkgPT4gaW5zdGFuY2UuZGVmYXVsdHMuaGVhZGVycy5jb21tb25cbiAgfSk7XG5cbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuY2xhc3MgQmFzZUFQSSB7XG4gIGNvbnN0cnVjdG9yKGJhc2VVUkwsIHR3aWxpb0tleSkge1xuICAgIGlmIChiYXNlVVJMKSB7XG4gICAgICB0aGlzLmFwaSA9IGNyZWF0ZUFwaXNhdWNlQ29tcGF0aWJsZUNsaWVudCh7XG4gICAgICAgIGJhc2VVUkwsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodHdpbGlvS2V5KSB7XG4gICAgICB0aGlzLnR3aWxpb0tleSA9IHR3aWxpb0tleTtcbiAgICB9XG4gIH1cbiAgc2V0VG9rZW4odG9rZW4pIHtcbiAgICBpZiAoIXRva2VuKSByZXR1cm4gdGhpcztcbiAgICB0aGlzLmFwaS5zZXRIZWFkZXJzKHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgc2V0U3RhdHVzUHJlZmVyZW5jZShzdGF0dXMpIHtcbiAgICBpZiAoIXN0YXR1cykgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5hcGkuc2V0SGVhZGVycyh7IFByZWZlcjogYHN0YXR1cz0ke3N0YXR1c31gIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGFwcHJvdmVXb3JrZXIgPSAoaWQsIHBhcmFtcykgPT5cbiAgICB0aGlzLmFwaS5wdXQoYC9wYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L2FwcHJvdmVgLCBwYXJhbXMpO1xuICB3aXRoZHJhd1dvcmtlciA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9wYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L3dpdGhkcmF3YCwgcGFyYW1zKTtcbiAgcmVqZWN0V29ya2VyID0gKGlkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucHV0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9yZWplY3RgLCBwYXJhbXMpO1xuICBnZXRNZW1iZXIgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvcGFydG5lcnMvbWVcIik7XG4gIGdldFNldHRpbmdzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3BhcnRuZXJzL3NldHRpbmdzXCIpO1xuICBnZXRXb3JrZXJzID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvcGFydG5lcnMvbWUvd29ya2Vycz9xdWVyeT0ke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9YCk7XG4gIGdldFBlbmRpbmdXb3JrZXJzID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvY29ob3J0L2NhbmRpZGF0ZXM/cXVlcnk9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWApO1xuICBnZXRXb3JrZXIgPSBpZCA9PiB0aGlzLmFwaS5nZXQoYC9wYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9P2Z1bGw9ZmFsc2VgKTtcbiAgY2hlY2tXb3JrZXIgPSBwYXJhbXMgPT4gdGhpcy5hcGkucG9zdChcIi9wYXJ0bmVycy93b3JrZXJzXCIsIHBhcmFtcyk7XG4gIHZhbGlkYXRlUGhvbmUgPSBwaG9uZSA9PlxuICAgIHRoaXMuYXBpLmdldChgUGhvbmVOdW1iZXJzLyR7cGhvbmV9P1R5cGU9Y2FycmllciZDb3VudHJ5Q29kZT1VU2AsIG51bGwsIHtcbiAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7YnRvYSh0aGlzLnR3aWxpb0tleSB8fCBcIlwiKX1gIH1cbiAgICB9KTtcbiAgdmFsaWRhdGVFbWFpbCA9IGVtYWlsID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvdmVyaWZ5X2VtYWlsP2VtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKX1gKTtcbiAgdmFsaWRhdGVTU04gPSAoZW1haWxfaWQsIHNzbikgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L3ZhbGlkYXRlYCwge1xuICAgICAgc3NuXG4gICAgfSk7XG4gIHZhbGlkYXRlQ2FuZGlkYXRlRW1haWwgPSAoZW1haWxfaWQsIGVtYWlsKSA9PlxuICAgIHRoaXMuYXBpLmdldChcbiAgICAgIGAvY2FuZGlkYXRlX3ZlcmlmeV9lbWFpbC8ke2VtYWlsX2lkfT9lbWFpbD0ke2VuY29kZVVSSUNvbXBvbmVudChlbWFpbCl9YFxuICAgICk7XG4gIGdldENhbmRpZGF0ZURhdGEgPSBlbWFpbF9pZCA9PlxuICAgIHRoaXMuYXBpLmdldChgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfWApO1xuICBnZXRJbnRlcmVzdHMgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvaW50ZXJlc3RzXCIpO1xuICBnZXRUcmFuc3BvcnRzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3RyYW5zcG9ydHNcIik7XG4gIGdldFBheW1ldE1ldGhvZCA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXltZW50X3NldHRpbmdzL3BhcnRuZXJfbWV0aG9kc1wiKTtcbiAgZ2V0QmFja2dyb3VuZFJlcG9ydCA9IChlbWFpbF9pZCwgdG9rZW4pID0+XG4gICAgdGhpcy5hcGkuZ2V0KFxuICAgICAgYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH0vcmVwb3J0P3Rva2VuPSR7dG9rZW59YFxuICAgICk7XG4gIHByb3ZpZGVDYW5kaWRhdGVDb25zZW50ID0gKGVtYWlsX2lkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucG9zdChgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfWAsIHBhcmFtcyk7XG4gIHByb3ZpZGVDYW5kaWRhdGVDb25zZW50QXN5bmMgPSAoZW1haWxfaWQsIHBhcmFtcykgPT5cbiAgICB0aGlzLmFwaS5wb3N0KFxuICAgICAgYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH0vYXN5bmNgLFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgZ2V0VHJpYWxTdGF0dXMgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvb3JnYW5pemF0aW9ucy90cmlhbF9zdGF0dXNcIik7XG4gIG5ld0NhbmRpZGF0ZSA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9vcmdhbml6YXRpb25zL25ld19jYW5kaWRhdGVcIik7XG4gIGdldFRlcm1zID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3BhcnRuZXJzL3Rlcm1zXCIpO1xuICBjb25zZW50ID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvcGFydG5lcnMvbWUvY29uc2VudFwiLCBwYXJhbXMpO1xuICBhcHBseSA9ICh7IHBhcnRuZXJfbmFtZSwgcGFydG5lcl9pZCB9KSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC8ke3BhcnRuZXJfbmFtZX0vJHtwYXJ0bmVyX2lkfWAsIHt9KTtcbiAgYXNzZW50ID0gKGVtYWlsX2lkLCBkYXRhKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoXG4gICAgICBgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS9hc3NlbnRgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIGdldENvaG9ydENvdW50ID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvY29ob3J0L2NvdW50P3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgY3JlYXRlQ29ob3J0ID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvY29ob3J0XCIsIHBhcmFtcyk7XG4gIHJlcXVlc3RDb2hvcnRXb3JrZXJzID0gKGNvaG9ydF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jb2hvcnQvJHtjb2hvcnRfaWR9L3JlcXVlc3RgLCBwYXJhbXMpO1xuICBnZXROb3RlcyA9IGlkID0+IHRoaXMuYXBpLmdldChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2ApO1xuICBzYXZlTm90ZSA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2AsIHBhcmFtcyk7XG4gIHJlc2VuZEVtYWlsID0gaWQgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGBwYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L2VtYWlsL2NvbnNlbnQvcmVzZW5kYCk7XG4gIHBvc3RTZXR0aW5ncyA9ICh1cmwsIHBhcmFtcykgPT4gdGhpcy5hcGkucG9zdCh1cmwsIHBhcmFtcyk7XG4gIGJ0b2FUZXN0ID0gc3RyaW5nID0+IGJ0b2Eoc3RyaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFzZUFQSTtcbiIsIi8vVHVybiBQcmltYXJ5IFBhbGV0dGVcbmV4cG9ydCBjb25zdCBwcmltYXJ5ID0gXCIjMkQzMDQ3XCI7IC8vQ29vbEdyYXkgb3IgU3BhY2VDYWRldFxuZXhwb3J0IGNvbnN0IHNlY29uZGFyeSA9IFwiIzAwRDlDRFwiOyAvL1R1cnF1b2lzZVxuZXhwb3J0IGNvbnN0IGVtZXJhbGQgPSBcIiMwZWQwNjdcIjtcbmV4cG9ydCBjb25zdCB0YXJ0T3JhbmdlID0gXCIjZmI0ZDQ5XCI7XG5leHBvcnQgY29uc3QgeWVsbG93T3JhbmdlID0gXCIjZmFhNzNjXCI7XG5cbi8vVHVybiBHcmV5IFBhbGV0dGVcbmV4cG9ydCBjb25zdCBzbGF0ZUdyYXkgPSBcIiM1ZjdkOTVcIjtcbmV4cG9ydCBjb25zdCBjYWRldEJsdWUgPSBcIiM5YmIxYzhcIjtcbmV4cG9ydCBjb25zdCBwZXJpd2lua2xlID0gXCIjYmZjZGRkXCI7XG5leHBvcnQgY29uc3QgYWxpY2VCbHVlID0gXCIjZTFlOGYzXCI7XG5leHBvcnQgY29uc3Qgc21va2VXaGl0ZSA9IFwiI2Y3ZjlmY1wiO1xuXG4vL1R1cm4gQWxlcnRzIFBhbGV0dGVcbmV4cG9ydCBjb25zdCBhbGVydDAgPSBzbGF0ZUdyYXk7XG5leHBvcnQgY29uc3QgYWxlcnQxID0gZW1lcmFsZDtcbmV4cG9ydCBjb25zdCBhbGVydDIgPSB0YXJ0T3JhbmdlO1xuZXhwb3J0IGNvbnN0IGFsZXJ0MyA9IHllbGxvd09yYW5nZTtcbmV4cG9ydCBjb25zdCBjZXJ1bGVhbkJsdWUgPSBcIiM0MzU3YWRcIjtcblxuLy9UdXJuIFNlY29uZGFyeSBQYWxldHRlIDFcbmV4cG9ydCBjb25zdCBwZWFjaCA9IFwiI2Y5Y2I5Y1wiO1xuZXhwb3J0IGNvbnN0IGJhYnlQaW5rID0gXCIjZjRjY2NjXCI7XG5leHBvcnQgY29uc3Qgc3BhbmlzaFBpbmsgPSBcIiNlNmI4YWZcIjtcbmV4cG9ydCBjb25zdCBiZWF1Qmx1ZSA9IFwiI2NmZTJmM1wiO1xuZXhwb3J0IGNvbnN0IGN1bHR1cmVkID0gXCIjZTNlOWVkXCI7XG5cbi8vVHVybiBTZWNvbmRhcnkgUGFsZXR0ZSAyXG5leHBvcnQgY29uc3QgYmx1ZUJlbGwgPSBcIiNiNGE3ZDZcIjtcbmV4cG9ydCBjb25zdCBiYWJ5Qmx1ZUV5ZXMgPSBcIiM5ZmM1ZThcIjtcbmV4cG9ydCBjb25zdCBwb3dkZXJCbHVlID0gXCIjYjdlY2VjXCI7XG5leHBvcnQgY29uc3QgaG9uZXlEZXcgPSBcIiNkOWVhZDNcIjtcbmV4cG9ydCBjb25zdCBidWZmID0gXCIjZmZlNTk5XCI7XG5cbi8vT3RoZXJzXG5leHBvcnQgY29uc3QgYmxhY2sgPSBcIiMwMDBcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZSA9IFwiI2ZmZlwiO1xuXG4vL05vdGljZSBjb2xvcnNcbmV4cG9ydCBjb25zdCBub3RpY2VNdXRlZCA9IHNsYXRlR3JheTtcbmV4cG9ydCBjb25zdCBub3RpY2VFcnJvciA9IFwiI2ZmNmM2OVwiO1xuZXhwb3J0IGNvbnN0IG5vdGljZVdhcm5pbmcgPSBcIiNmYWEwM2NcIjtcbmV4cG9ydCBjb25zdCBub3RpY2VTdWNjZXNzID0gXCIjMTNjMDYzXCI7XG5leHBvcnQgY29uc3Qgbm90aWNlSW5mbyA9IHNsYXRlR3JheTtcbiIsImNvbnN0IHBhcnNlUHl0aG9uRGF0ZSA9IGRhdGUgPT4ge1xuICBpZiAoIWlzTmFOKHBhcnNlSW50KGRhdGUsIDEwKSkpIHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSAqIDEwMDApO1xuICAgIGNvbnN0IHRpbWUgPSBkLmdldFRpbWUoKTtcbiAgICBpZiAodGltZSkge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRpbWUgKyBkLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MCAqIDEwMDApO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gNjA7XG4gICAgICBjb25zdCBob3VycyA9IGQuZ2V0SG91cnMoKTtcbiAgICAgIG5ld0RhdGUuc2V0SG91cnMoaG91cnMgLSBvZmZzZXQpO1xuICAgICAgcmV0dXJuIG5ld0RhdGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VQeXRob25EYXRlO1xuIiwiaW1wb3J0IHBhcnNlUHl0aG9uRGF0ZSBmcm9tIFwiLi9wYXJzZS1weXRob24tZGF0ZVwiO1xuXG5jb25zdCBmb3JtYXREYXRlID0gZGF0ZSA9PiB7XG4gIGNvbnN0IHBhcnNlZERhdGUgPSBwYXJzZVB5dGhvbkRhdGUoZGF0ZSk7XG4gIGlmICghcGFyc2VkRGF0ZSkgcmV0dXJuIFwiTi9BXCI7XG4gIHJldHVybiBgJHtwYXJzZWREYXRlLmdldE1vbnRoKCkgK1xuICAgIDF9LyR7cGFyc2VkRGF0ZS5nZXREYXRlKCl9LyR7cGFyc2VkRGF0ZS5nZXRGdWxsWWVhcigpfWA7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGF0ZTtcbiIsImNvbnN0IGZvcm1hdEVtYWlsID0gZW1haWwgPT4ge1xuICBpZiAodHlwZW9mIGVtYWlsICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGVtYWlsLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXRFbWFpbDtcbiIsImNvbnN0IGZvcm1hdE5hbWUgPSBuYW1lID0+IHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXROYW1lO1xuIiwiY29uc3QgZm9ybWF0UGhvbmUgPSAocGhvbmUsIGVuY3J5cHRlZCA9IGZhbHNlKSA9PiB7XG4gIGlmICh0eXBlb2YgcGhvbmUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIk4vQVwiO1xuICBsZXQgcGhvbmVOdW1iZXIgPSBlbmNyeXB0ZWRcbiAgICA/IHBob25lXG4gICAgOiBwaG9uZS5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDExKTtcbiAgbGV0IGFyZWFDb2RlO1xuICBpZiAocGhvbmVOdW1iZXIubGVuZ3RoIDwgMTApIHJldHVybiBwaG9uZU51bWJlcjtcbiAgaWYgKHBob25lTnVtYmVyLmxlbmd0aCA+IDEwKSB7XG4gICAgYXJlYUNvZGUgPSBwaG9uZU51bWJlclswXTtcbiAgICBwaG9uZU51bWJlciA9IHBob25lTnVtYmVyLnN1YnN0cmluZygxLCAxMSk7XG4gIH1cbiAgcGhvbmVOdW1iZXIgPSBwaG9uZU51bWJlci5tYXRjaCgvLnsxLDN9L2cpO1xuICByZXR1cm4gcmVuZGVyUGhvbmUoeyBwaG9uZTogcGhvbmVOdW1iZXIsIGVuY3J5cHRlZCwgYXJlYUNvZGUgfSk7XG59O1xuXG5jb25zdCByZW5kZXJQaG9uZSA9ICh7IHBob25lLCBlbmNyeXB0ZWQsIGFyZWFDb2RlIH0pID0+IHtcbiAgbGV0IHBob25lTnVtYmVyID0gZW5jcnlwdGVkXG4gICAgPyBgKCR7cGhvbmVbMF19KSAke3Bob25lWzFdfSAke3Bob25lWzJdfSR7cGhvbmVbM119YFxuICAgIDogYCgke3Bob25lWzBdfSkgJHtwaG9uZVsxXX0tJHtwaG9uZVsyXX0ke3Bob25lWzNdfWA7XG4gIHBob25lTnVtYmVyID0gYXJlYUNvZGUgPyBgJHthcmVhQ29kZX0gJHtwaG9uZU51bWJlcn1gIDogcGhvbmVOdW1iZXI7XG4gIHJldHVybiBwaG9uZU51bWJlcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFBob25lO1xuIiwiY29uc3QgZm9ybWF0U1NOID0gc3NuID0+IHtcbiAgaWYgKHR5cGVvZiBzc24gIT09IFwic3RyaW5nXCIpIHJldHVybiBcIk4vQVwiO1xuICBjb25zdCBzc25OdW1iZXIgPSBzc24ucmVwbGFjZSgvXFxEL2csIFwiXCIpLnN1YnN0cmluZygwLCA5KTtcbiAgaWYgKHNzbk51bWJlci5sZW5ndGggPCA5KSByZXR1cm4gc3NuTnVtYmVyO1xuICByZXR1cm4gYCR7c3NuTnVtYmVyLnN1YnN0cmluZygwLCAzKX0tJHtzc25OdW1iZXIuc3Vic3RyaW5nKFxuICAgIDMsXG4gICAgNVxuICApfS0ke3Nzbk51bWJlci5zdWJzdHJpbmcoNSwgOSl9YDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFNTTjtcbiIsImNvbnN0IGZvcm1hdFppcGNvZGUgPSB6aXBjb2RlID0+IHtcbiAgaWYgKHR5cGVvZiB6aXBjb2RlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIHppcGNvZGUucmVwbGFjZSgvXFxEL2csIFwiXCIpLnN1YnN0cmluZygwLCA1KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFppcGNvZGU7XG4iLCJjb25zdCBnZXRSZWplY3RNZXNzYWdlID0gcGFydG5lcl90eXBlID0+IHtcbiAgaWYgKCFbXCJSSVNLX01BTkFHRU1FTlRcIiwgXCJGQ1JBX0VcIiwgXCJGQ1JBX05cIiwgXCJGQ1JBXCJdLmluY2x1ZGVzKHBhcnRuZXJfdHlwZSkpXG4gICAgcmV0dXJuIFwiUmVqZWN0XCI7XG4gIGNvbnN0IHJlamVjdE1lc3NhZ2VzID0ge1xuICAgIFJJU0tfTUFOQUdFTUVOVDogXCJSZWplY3RcIixcbiAgICBGQ1JBOiBcIlByZS1BZHZlcnNlIEFjdGlvblwiLFxuICAgIEZDUkFfRTogXCJQcmUtQWR2ZXJzZSBBY3Rpb25cIixcbiAgICBGQ1JBX046IFwiQWR2ZXJzZSBBY3Rpb25cIlxuICB9O1xuICByZXR1cm4gcmVqZWN0TWVzc2FnZXNbcGFydG5lcl90eXBlXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJlamVjdE1lc3NhZ2U7XG4iLCJleHBvcnQgY29uc3QgZ2V0U3RhdHVzID0gc3RhdHVzID0+IHtcbiAgY29uc3Qgc3RhdHVzTWFwID0ge1xuICAgIHJldmlldzogXCJyZXZpZXdpbmdcIixcbiAgICBwZW5kaW5nOiBcImNvbnNpZGVyXCIsXG4gICAgXCJyZXZpZXdfX2lkZW50aXR5XCI6IFwidmVyaWZ5aW5nXCIsXG4gICAgXCJyZXZpZXdfX212clwiOiBcIkNvbXBsaWFuY2UgUmV2aWV3XCIsXG4gICAgXCJyZXZpZXdfX3NvXCI6IFwiQ29tcGxpYW5jZSBSZXZpZXdcIixcbiAgICBcInJldmlld19fcWFcIjogXCJDb21wbGlhbmNlIFJldmlld1wiLFxuICAgIGluaXRpYXRlZDogXCJTdG9yZWRcIlxuICB9O1xuXG4gIHJldHVybiBzdGF0dXNNYXBbc3RhdHVzXSB8fCBzdGF0dXM7XG59O1xuIiwiY29uc3QgaXNEYXRlID0gdmFsdWUgPT4ge1xuICBpZiAoaXNOYU4ocGFyc2VJbnQodmFsdWUsIDEwKSkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlICogMTAwMCk7XG4gIGNvbnN0IHJpZ2h0Tm93ID0gbmV3IERhdGUoKTtcbiAgaWYgKGRhdGUgPiByaWdodE5vdykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZGF0ZS5nZXRZZWFyKCkgPiAxMDA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0RhdGU7XG4iLCJjb25zdCBpc09iamVjdCA9IGRhdGEgPT4gISFkYXRhICYmIGRhdGEuY29uc3RydWN0b3IgPT09IE9iamVjdDtcblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3Q7XG4iLCJjb25zdCBpc1VybCA9IHVybFN0cmluZyA9PiB7XG4gIGNvbnN0IHJlZ2V4cCA9IC8oZnRwfGh0dHB8aHR0cHMpOlxcL1xcLyhcXHcrOnswLDF9XFx3KkApPyhcXFMrKSg6WzAtOV0rKT8oXFwvfFxcLyhbXFx3IyE6Lj8rPSYlQCFcXC0vXSkpPy87XG4gIHJldHVybiByZWdleHAudGVzdCh1cmxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaXNVcmw7XG4iLCJjb25zdCB0ZXJtcyA9IFtcIlR1cm4gVGVjaG5vbG9naWVzIEluYy5cIiwgXCJbQ09NUEFOWV1cIl07XG5jb25zdCBsZWdhbFJlcGxhY2UgPSAob3JpZ2luYWwgPSBcIlwiLCByZXBsYWNlbWVudCA9IFwiXCIpID0+IHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiXCI7XG4gIGxldCByZXR1cm5WYWwgPSBvcmlnaW5hbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXJtcy5sZW5ndGg7IGkrKykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGx1c3BsdXNcbiAgICByZXR1cm5WYWwgPSByZXR1cm5WYWwucmVwbGFjZSh0ZXJtc1tpXSwgcmVwbGFjZW1lbnQpO1xuICB9XG4gIHJldHVybiByZXR1cm5WYWw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsZWdhbFJlcGxhY2U7XG4iLCJjb25zdCBtYXNrTmFtZSA9IG5hbWUgPT5cbiAgdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgbmFtZS5sZW5ndGggPiAwID8gYCR7bmFtZS5zbGljZSgwLCAxKX0uYCA6IG5hbWU7XG5cbmV4cG9ydCBkZWZhdWx0IG1hc2tOYW1lO1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gXCIuL2lzLW9iamVjdFwiO1xuXG5jb25zdCBvYmplY3RUb1F1ZXJ5ID0gcXVlcnkgPT4ge1xuICBpZiAoIWlzT2JqZWN0KHF1ZXJ5KSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhxdWVyeSk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHF1ZXJ5QXJyYXkgPSBrZXlzLm1hcChrZXkgPT4gYCR7a2V5fT0ke3F1ZXJ5W2tleV19YCk7XG4gIHJldHVybiBgPyR7cXVlcnlBcnJheS5qb2luKFwiJlwiKX1gO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9RdWVyeTtcbiIsImNvbnN0IHBhcnNlUXVlcnkgPSBxdWVyeSA9PiB7XG4gIGlmICh0eXBlb2YgcXVlcnkgIT09IFwic3RyaW5nXCIpIHJldHVybiBxdWVyeTtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeS5zdGFydHNXaXRoKFwiP1wiKSA/IHF1ZXJ5LnNsaWNlKDEpIDogcXVlcnkpO1xuICBjb25zdCBvYmogPSB7fTtcbiAgcGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlUXVlcnk7XG4iLCJpbXBvcnQgKiBhcyBjb2xvcnMgZnJvbSBcIi4uL3N0eWxlcy9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IHBpY2tDb2xvciA9IHN0YXR1cyA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIHN0YXR1cyA9PT0gXCJzdHJpbmdcIiA/IHN0YXR1cy50b0xvd2VyQ2FzZSgpIDogc3RhdHVzKSB7XG4gICAgY2FzZSBcImZpcnN0X25vdGljZVwiOlxuICAgIGNhc2UgXCJzZWNvbmRfbm90aWNlXCI6XG4gICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICBjYXNlIFwiY29uc2lkZXJcIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlV2FybmluZztcbiAgICBjYXNlIFwidW52ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJub3RfdmVyaWZpZWRcIjpcbiAgICBjYXNlIFwiZnJhdWRcIjpcbiAgICBjYXNlIFwibm90X21hdGNoZWRcIjpcbiAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICBjYXNlIFwiZGVjZWFzZWRcIjpcbiAgICBjYXNlIFwid2l0aGRyYXduXCI6XG4gICAgICByZXR1cm4gY29sb3JzLm5vdGljZUVycm9yO1xuICAgIGNhc2UgXCJ2ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJtYXRjaGVkXCI6XG4gICAgY2FzZSBcInZhbGlkXCI6XG4gICAgY2FzZSBcInJlYWR5XCI6XG4gICAgY2FzZSBcImNvbXBsZXRlXCI6XG4gICAgY2FzZSBcImNsZWFyXCI6XG4gICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgIGNhc2UgXCJyYW5kb21pemVkXCI6XG4gICAgY2FzZSBcImFwcHJvdmVkXCI6XG4gICAgICByZXR1cm4gY29sb3JzLm5vdGljZVN1Y2Nlc3M7XG4gICAgY2FzZSBcInByb2Nlc3NpbmdcIjpcbiAgICBjYXNlIFwicmV2aWV3aW5nXCI6XG4gICAgY2FzZSBcInJldmlld1wiOlxuICAgIGNhc2UgXCJjb25zZW50XCI6XG4gICAgY2FzZSBcImVtYWlsZWRcIjpcbiAgICBjYXNlIFwiaW5pdGlhdGVkXCI6XG4gICAgY2FzZSBcImF0dGVudGlvblwiOlxuICAgIGNhc2UgXCJ2ZXJpZnlpbmdcIjpcbiAgICBjYXNlIFwicmV2aWV3X19tdnJcIjpcbiAgICBjYXNlIFwicmV2aWV3X19xYVwiOlxuICAgICAgcmV0dXJuIGNvbG9ycy5ub3RpY2VJbmZvO1xuICAgIGNhc2UgXCJub25lXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcImdyYXlcIjtcbiAgfVxufTtcbiIsImltcG9ydCAqIGFzIGNvbG9ycyBmcm9tIFwiLi4vc3R5bGVzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBwaWNrU2NvcmVDb2xvciA9IHNjb3JlID0+IHtcbiAgY29uc3QgdmFsdWUgPSBwYXJzZUludChzY29yZSwgMTApO1xuICBpZiAodmFsdWUgPiA4OSkgcmV0dXJuIGNvbG9ycy5ub3RpY2VTdWNjZXNzO1xuICBpZiAodmFsdWUgPiA2OSkgcmV0dXJuIGNvbG9ycy5ub3RpY2VXYXJuaW5nO1xuICByZXR1cm4gY29sb3JzLm5vdGljZUVycm9yO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcGlja1Njb3JlQ29sb3I7IiwiZXhwb3J0IGNvbnN0IHByZXR0aWZ5RGF0ZSA9IGRhdGVTdHJpbmcgPT4ge1xuICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gIGNvbnN0IG1vbnRoID0gZC50b1VUQ1N0cmluZygpLnNsaWNlKDgsIDExKTtcbiAgY29uc3QgREQgPSBkLnRvVVRDU3RyaW5nKCkuc2xpY2UoNSwgNyk7XG4gIGNvbnN0IFlZWVkgPSBkLnRvVVRDU3RyaW5nKCkuc2xpY2UoMTIsIDE2KTtcbiAgcmV0dXJuIGAke21vbnRofSAke0REfSwgJHtZWVlZfWA7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG5leHBvcnQgY29uc3QgZmFsc3lTdHJpbmdzID0gW1wiTm9uZVwiLCBcIm5vbmVcIiwgXCJOL0FcIl07XG5cbmNvbnN0IHZhbHVlRXhpc3RzID0gdmFsdWUgPT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gIV8uaXNFbXB0eSh2YWx1ZSk7XG4gIGlmIChfLmluZGV4T2YoZmFsc3lTdHJpbmdzLCB2YWx1ZSkgPiAtMSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlRXhpc3RzO1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHZhbHVlRXhpc3RzIGZyb20gXCIuL3ZhbHVlLWV4aXN0c1wiO1xuXG5jb25zdCByZW5kZXJEZXRhaWxWYWx1ZSA9ICh2YWx1ZSwgZGVlcCA9IGZhbHNlKSA9PiB7XG4gIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKGRlZXApXG4gICAgICByZXR1cm4gdmFsdWUubWFwKFxuICAgICAgICB2YWwgPT5cbiAgICAgICAgICBfLmlzT2JqZWN0KHZhbClcbiAgICAgICAgICAgID8gcmVuZGVyTmVzdGVkT2JqZWN0KHZhbCwgZGVlcClcbiAgICAgICAgICAgIDogcmVuZGVyRGV0YWlsVmFsdWUodmFsLCBkZWVwKVxuICAgICAgKTtcbiAgICByZXR1cm4gdmFsdWUuam9pbihcIiAvIFwiKTtcbiAgfVxuICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiByZW5kZXJOZXN0ZWRPYmplY3QodmFsdWUsIGRlZXApO1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCByZW5kZXJOZXN0ZWRPYmplY3QgPSAobmVzdGVkID0ge30sIGRlZXAgPSBmYWxzZSkgPT4ge1xuICBjb25zdCB2YWx1ZXMgPSBfLmZpbHRlcihuZXN0ZWQsIHZhbHVlID0+IHZhbHVlRXhpc3RzKHZhbHVlKSk7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IHJlbmRlckRldGFpbFZhbHVlKHZhbHVlLCBkZWVwKSkuam9pbihcIiAvIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlckRldGFpbFZhbHVlO1xuIiwiaW1wb3J0IHZhbHVlRXhpc3RzIGZyb20gXCIuL3ZhbHVlLWV4aXN0c1wiO1xuXG5jb25zdCBzZWxlY3RNYXN0ZXJLZXkgPSAoZGF0YSwgcHJvcGVydHkpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpIHx8IGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgbGV0IG1hc3RlcktleTtcbiAgY29uc3QgYmx1ZXByaW50ID0gZGF0YVswXTtcbiAgaWYgKHZhbHVlRXhpc3RzKGJsdWVwcmludFtwcm9wZXJ0eV0pKSB7XG4gICAgbWFzdGVyS2V5ID0gcHJvcGVydHk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcG9zaWJsZUtleXMgPSBPYmplY3Qua2V5cyhibHVlcHJpbnQpO1xuICAgIG1hc3RlcktleSA9IHBvc2libGVLZXlzLmZpbmQoa2V5ID0+IHZhbHVlRXhpc3RzKGJsdWVwcmludFtrZXldKSk7XG4gIH1cbiAgcmV0dXJuIG1hc3RlcktleTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdE1hc3RlcktleTtcbiIsImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcblxuLyoqIEBuYW1lc3BhY2UgdXRpbGl0eV9mdW5jdGlvbnMgKi9cblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIHRoZSB0eXBlb2YgdGhlIHZhbHVlIHNob3VsZCBiZSB8IHN0cmluZywgbnVtYmVyLCBib29sZWFuXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gZmFsbGJhY2sgLSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIHZhbHVlXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IGtleSB3aXRoXG4gKiBAZGVzYyBTZXRzIGEgdmFsdWUgb2YgYSBzcGVjaWZpYyB0eXBlIG9uIHByb3ZpZGVkIG9iamVjdCdzIHN0aXB1bGF0ZWQgcHJvcGVydHkva2V5IHdpdGggYW4gb3B0aW9uYWwgZGVmYXVsdC9mYWxsYmFjayB2YWx1ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0VmFsdWUgPSAodHlwZSwgc2VsZiwgcHJvcGVydHksIGZhbGxiYWNrLCB2YWx1ZSA9IGZhbGxiYWNrKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGUpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSB2YWx1ZTtcbn07XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiB1dGlsaXR5X2Z1bmN0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIHRoZSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyhzdHJpbmd8YXJyYXkpfSBvcHRpb25zIC0gc3RyaW5nIGtleSBvZiBzZWxmIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBhcnJheSBvZiBjaG9pY2VzIG9yIGFuIGFycmF5IG9mIGNob2ljZXNcbiAqIEBwYXJhbSB7Kn0gZmFsbGJhY2sgLSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIHZhbHVlXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IGtleSB3aXRoXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZhY3RvcnkgdG8gaGFyZCBiYWtlIHRoZSBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZCBhbmQgYSBmYWxsYmFjayAob3B0aW9uYWwpXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb24gPSAoXG4gIHNlbGYsXG4gIHByb3BlcnR5LFxuICBvcHRpb25zLFxuICBmYWxsYmFjayxcbiAgdmFsdWUgPSBmYWxsYmFja1xuKSA9PiB7XG4gIGNvbnN0IGFsbG93ZWQgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpID8gb3B0aW9ucyA6IHNlbGZbb3B0aW9uc107XG4gIGlmICghYWxsb3dlZC5pbmNsdWRlcyh2YWx1ZSkpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSB2YWx1ZTtcbn07XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiB1dGlsaXR5X2Z1bmN0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdHJ1dGh5IHZhbHVlIHRvIGJlIHNldFxuICogQGRlc2MgV2lsbCBzZXQgYSB0cnV0aHkgdmFsdWUgYW5kIGlnbm9yZSBhbnl0aGluZyB0aGF0IGNhc3RzIHRvIGZhbHNlICghISlcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFRydXRoeSA9IChzZWxmLCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSBmYWxzeSB2YWx1ZSB0byBiZSBzZXRcbiAqIEBkZXNjIFdpbGwgc2V0IGEgZmFsc3kgdmFsdWUgYW5kIGlnbm9yZSBhbnl0aGluZyB0aGF0IGNhc3RzIHRvIHRydWUgKCEhISlcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZhbHN5ID0gKHNlbGYsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIHNlbGZbcHJvcGVydHldID0gIXZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQGRlc2MgVG9nZ2xlcyBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUJvb2wgPSAoc2VsZiwgcHJvcGVydHkpID0+ICgpID0+IHtcbiAgaWYgKHR5cGVvZiBzZWxmW3Byb3BlcnR5XSAhPT0gXCJib29sZWFuXCIpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSAhc2VsZltwcm9wZXJ0eV07XG59O1xuXG4vKiogQG5hbWVzcGFjZSBmdW5jdGlvbl9mYWN0b3JpZXMgKi9cblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQGltcGxlbWVudHMge3NldFZhbHVlfVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBib29sZWFuLCBzdHJpbmcsIG9iamVjdCwgbnVsbCwgZXRjLlxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge3NldFZhbHVlfSAtIHNldFZhbHVlIGZ1bmN0aW9uIHdpdGggcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gKiBAZGVzYyBGYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgdmFsdWUgc2V0dGVyXG4gKi9cbmV4cG9ydCBjb25zdCBzZXR0ZXJGYWN0b3J5ID0gKHR5cGUsIHNlbGYsIHByb3BlcnR5LCBmYWxsYmFjayA9IHVuZGVmaW5lZCkgPT5cbiAgXy5wYXJ0aWFsKHNldFZhbHVlLCB0eXBlLCBzZWxmLCBwcm9wZXJ0eSwgZmFsbGJhY2spO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAZXh0ZW5kcyB7c2V0dGVyRmFjdG9yeX1cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gYm9vbGVhbiwgc3RyaW5nLCBvYmplY3QsIG51bGwsIGV0Yy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhIHZhbHVlIHNldHRlciB3aXRoIGFwcGxpZWQgYXJndW1lbnRzXG4gKiBAZGVzYyBBIGN1cnJpZWQgZmFjdG9yeSBmb3IgZ2VuZXJhdGluZyBhIHZhbHVlIHNldHRlclxuICovXG5leHBvcnQgY29uc3Qgc2V0dGVyRmFjdG9yeUN1cnJpZWQgPSBfLmN1cnJ5KHNldHRlckZhY3RvcnkpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAZXh0ZW5kcyB7dG9nZ2xlQm9vbH1cbiAqIEBkZXNjIEEgY3VycmllZCBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIHRvZ2dsZUJvb2woKSB3aXRoIGFwcGxpZWQgYXJndW1lbnRzXG4gKiBAcmV0dXJucyB7dG9nZ2xlQm9vbH0gQSBjdXJyaWVkIHZlcnNpb24gb2YgdGhlIHRvZ2dsZUJvb2wgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUJvb2xDdXJyaWVkID0gXy5jdXJyeSh0b2dnbGVCb29sKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggcHJlLXBvcHVsYXRlZCBkZXBlbmRlbmNpZXNcbiAqIEBkZXNjIEEgZmFjdG9yeSBmb3IgZ2VuZXJhdGluZyBhIHN0cmluZyB2YWx1ZSBzZXR0ZXIsIGlmIHZhbHVlIGlzIG5vdCBhIHN0cmluZyBleGl0cyB3aXRob3V0IHNpZGUtZWZmZWN0c1xuICovXG5leHBvcnQgY29uc3Qgc2V0U3RyaW5nRmFjdG9yeSA9IHNldHRlckZhY3RvcnlDdXJyaWVkKFwic3RyaW5nXCIpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYSB2YWx1ZSBzZXR0ZXIgd2l0aCBwcmUtcG9wdWxhdGVkIGRlcGVuZGVuY2llc1xuICogQGRlc2MgQSBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgbnVtYmVyIHZhbHVlIHNldHRlciwgaWYgdmFsdWUgaXMgbm90IGEgc3RyaW5nIGV4aXRzIHdpdGhvdXQgc2lkZS1lZmZlY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXROdW1iZXJGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJudW1iZXJcIik7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhIHZhbHVlIHNldHRlciB3aXRoIHByZS1wb3B1bGF0ZWQgZGVwZW5kZW5jaWVzXG4gKiBAZGVzYyBBIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSBib29sZWFuIHZhbHVlIHNldHRlciwgaWYgdmFsdWUgaXMgbm90IGEgc3RyaW5nIGV4aXRzIHdpdGhvdXQgc2lkZS1lZmZlY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRCb29sRmFjdG9yeSA9IHNldHRlckZhY3RvcnlDdXJyaWVkKFwiYm9vbGVhblwiKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQGV4dGVuZHMge3NldFRydXRoeX1cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHRydXRoeSB2YWx1ZSB0byBiZSBzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFRydXRoeUN1cnJpZWQgPSBfLmN1cnJ5KHNldFRydXRoeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHtzZXRUcnV0aHl9XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSBmYWxzeSB2YWx1ZSB0byBiZSBzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZhbHN5Q3VycmllZCA9IF8uY3Vycnkoc2V0RmFsc3kpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAaW1wbGVtZW50cyB7c2V0T3B0aW9ufVxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7c2V0T3B0aW9ufVxuICovXG5leHBvcnQgY29uc3Qgc2V0T3B0aW9uRmFjdG9yeSA9IChcbiAgc2VsZixcbiAgcHJvcGVydHksXG4gIG9wdGlvbnMsXG4gIGZhbGxiYWNrID0gdW5kZWZpbmVkXG4pID0+IF8ucGFydGlhbChzZXRPcHRpb24sIHNlbGYsIHByb3BlcnR5LCBvcHRpb25zLCBmYWxsYmFjayk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBleHRlbmRzIHtzZXRPcHRpb25GYWN0b3J5fVxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7c2V0T3B0aW9ufVxuICovXG5leHBvcnQgY29uc3Qgc2V0T3B0aW9uRmFjdG9yeUN1cnJpZWQgPSBfLmN1cnJ5KHNldE9wdGlvbkZhY3RvcnkpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGRlc2MgVXNlZCB0byBjcmVhdGUgbW9ieCByZWFkeSBtb2RlbHMgd2l0aCB0aGUgbW9zdCBjb21tb24gc2V0dGVycyBib290c3RyYXBwZWRcbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRlciB7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c2V0VmFsdWV9IHNldFZhbHVlIGZ1bmN0aW9uIHdpdGggcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgc3RyaW5nIHNldHRlclxuICAgKi9cbiAgc2V0U3RyaW5nRmFjdG9yeSA9IHNldFN0cmluZ0ZhY3RvcnkodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c2V0VmFsdWV9IHNldFZhbHVlIGZ1bmN0aW9uIHdpdGggcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgbnVtYmVyIHNldHRlclxuICAgKi9cbiAgc2V0TnVtYmVyRmFjdG9yeSA9IHNldE51bWJlckZhY3RvcnkodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c2V0VmFsdWV9IHNldFZhbHVlIGZ1bmN0aW9uIHdpdGggcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgYm9vbGVhbiBzZXR0ZXJcbiAgICovXG4gIHNldEJvb2xGYWN0b3J5ID0gc2V0Qm9vbEZhY3RvcnkodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSAoYm9vbCkgdG8gYmUgaW52ZXJ0ZWRcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAZGVzYyBmYWN0b3J5IHRvIHJldHVybiBhIHRydXRoeSBzZXR0ZXJcbiAgIFxuICAgKi9cbiAgc2V0VHJ1dGh5RmFjdG9yeSA9IHNldFRydXRoeUN1cnJpZWQodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSAoYm9vbCkgdG8gYmUgaW52ZXJ0ZWRcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAZGVzYyBmYWN0b3J5IHRvIHJldHVybiBhIGZhbHN5IHNldHRlclxuICAgXG4gICAqL1xuICBzZXRGYWxzeUZhY3RvcnkgPSBzZXRGYWxzeUN1cnJpZWQodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZFxuICAgKiBAcGFyYW0geyhzdHJpbmd8YXJyYXkpfSBvcHRpb25zIC0gc3RyaW5nIGtleSBvZiBzZWxmIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBhcnJheSBvZiBjaG9pY2VzIG9yIGFuIGFycmF5IG9mIGNob2ljZXNcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAZGVzYyBmYWN0b3J5IHRvIHJldHVybiBhbiBvcHRpb24gc2V0dGVyXG4gICAqL1xuICBzZXRPcHRpb25GYWN0b3J5ID0gc2V0T3B0aW9uRmFjdG9yeUN1cnJpZWQodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSAoYm9vbCkgdG8gYmUgaW52ZXJ0ZWRcbiAgICogQHBhcmFtIHthcnJheX0gb3B0aW9ucyAtIGFuIGFycmF5IG9mIHRoZSBwb3NzaWJsZSBjaG9pY2VzIGFsbG93ZWRcbiAgICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHJldHVybmVkIGZ1bmN0aW9uJ3MgdmFsdWUgYXJndW1lbnRcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAZGVzYyBmYWN0b3J5IHRvIHJldHVybiBhIGJvb2xlYW4gdG9nZ2xlclxuICAgKi9cbiAgdG9nZ2xlQm9vbEZhY3RvcnkgPSB0b2dnbGVCb29sQ3VycmllZCh0aGlzKTtcbn1cbiIsImZ1bmN0aW9uIHN0b3JhZ2VNb2NrKCkge1xuICBjb25zdCBzdG9yYWdlID0ge307XG5cbiAgcmV0dXJuIHtcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpIHtcbiAgICAgIHN0b3JhZ2Vba2V5XSA9IHZhbHVlIHx8IFwiXCI7XG4gICAgfSxcbiAgICBnZXRJdGVtKGtleSkge1xuICAgICAgcmV0dXJuIGtleSBpbiBzdG9yYWdlID8gc3RvcmFnZVtrZXldIDogbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZUl0ZW0oa2V5KSB7XG4gICAgICBkZWxldGUgc3RvcmFnZVtrZXldO1xuICAgIH0sXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzdG9yYWdlKS5sZW5ndGg7XG4gICAgfSxcbiAgICBrZXkoaSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHN0b3JhZ2UpO1xuICAgICAgcmV0dXJuIGtleXNbaV0gfHwgbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0b3JhZ2VNb2NrO1xuIiwiY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiB2YWx1ZSA+IDA7XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICByZXR1cm4gIShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSkubGVuZ3RoID09PSAwKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0b0Jvb2xlYW47XG4iLCJpbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgcmVsYXRpdmVUaW1lIGZyb20gXCJkYXlqcy9wbHVnaW4vcmVsYXRpdmVUaW1lXCI7XG5pbXBvcnQgdXRjIGZyb20gXCJkYXlqcy9wbHVnaW4vdXRjXCI7XG5pbXBvcnQgcGFyc2VQeXRob25EYXRlIGZyb20gXCIuL3BhcnNlLXB5dGhvbi1kYXRlXCI7XG5cbmRheWpzLmV4dGVuZChyZWxhdGl2ZVRpbWUpO1xuZGF5anMuZXh0ZW5kKHV0Yyk7XG5cbmNvbnN0IHRvUmVsYXRpdmVEYXRlID0gZGF0ZSA9PiB7XG4gIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJudW1iZXJcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IHBhcnNlZERhdGUgPSBwYXJzZVB5dGhvbkRhdGUoZGF0ZSk7XG4gIGlmICghcGFyc2VkRGF0ZSkgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IHJlbGF0aXZlRGF0ZSA9IGRheWpzKHBhcnNlZERhdGUpO1xuICBjb25zdCBub3cgPSBkYXlqcygpLnV0Y09mZnNldChwYXJzZWREYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICBjb25zdCBhZGp1c3RlZE5vdyA9IG5vdy5zdWJ0cmFjdChwYXJzZWREYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MCwgXCJob3VyXCIpO1xuICBpZiAoYWRqdXN0ZWROb3cuZGlmZihyZWxhdGl2ZURhdGUsIFwiZGF5XCIpIDwgOCkgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mcm9tKGFkanVzdGVkTm93KTtcbiAgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mb3JtYXQoXCJNL0REL1lZWVlcIik7XG59O1xuXG5leHBvcnQgY29uc3QgdG9SZWxhdGl2ZUZyb21JU08gPSBkYXRlID0+IHtcbiAgaWYgKHR5cGVvZiBkYXRlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcmVsYXRpdmVEYXRlID0gZGF5anMoZGF0ZSk7XG4gIGlmICghcmVsYXRpdmVEYXRlLmlzVmFsaWQoKSkgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjT2Zmc2V0KHJlbGF0aXZlRGF0ZS51dGNPZmZzZXQoKSk7XG4gIGlmIChub3cuZGlmZihyZWxhdGl2ZURhdGUsIFwiZGF5XCIpIDwgOCkgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mcm9tKG5vdyk7XG4gIHJldHVybiByZWxhdGl2ZURhdGUuZm9ybWF0KFwiTS9ERC9ZWVlZXCIpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdG9SZWxhdGl2ZURhdGU7XG4iLCJpbXBvcnQgeyB1cHBlckZpcnN0IH0gZnJvbSBcImxvZGFzaFwiO1xuXG5jb25zdCB0b1NlbnRlbmNlQ2FzZSA9IHN0ciA9PiB7XG4gIGxldCBzZW50ZW5jZSA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwZXJpb2QgPSBcIi4gXCI7XG4gIGNvbnN0IGV4Y2xhbWF0aW9uID0gXCIhIFwiO1xuICBjb25zdCBxdWVzdGlvbiA9IFwiPyBcIjtcbiAgY29uc3QgdGVybWluYXRpb25zID0gW3BlcmlvZCwgZXhjbGFtYXRpb24sIHF1ZXN0aW9uXTtcbiAgdGVybWluYXRpb25zLmZvckVhY2godGVybWluYXRpb24gPT4ge1xuICAgIHNlbnRlbmNlID0gc2VudGVuY2VcbiAgICAgIC5zcGxpdCh0ZXJtaW5hdGlvbilcbiAgICAgIC5tYXAodXBwZXJGaXJzdClcbiAgICAgIC5qb2luKHRlcm1pbmF0aW9uKTtcbiAgfSk7XG4gIHJldHVybiBzZW50ZW5jZTtcbn07XG5leHBvcnQgZGVmYXVsdCB0b1NlbnRlbmNlQ2FzZTtcbiIsImNvbnN0IHRvVGl0bGVDYXNlID0gc3RyID0+IHtcbiAgY29uc3Qgc3RyaW5nID0gdHlwZW9mIHN0ciA9PT0gXCJzdHJpbmdcIiA/IHN0ciA6IFN0cmluZyhzdHIpO1xuICBjb25zdCBzdHJfbG93ZXJjYXNlZCA9IHN0cmluZy50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCB3b3JkcyA9IHN0cl9sb3dlcmNhc2VkLnNwbGl0KFwiIFwiKTtcbiAgY29uc3QgdGl0bGVDYXNlZExpc3QgPSB3b3Jkcy5tYXAod29yZCA9PiB7XG4gICAgY29uc3QgZmlyc3RDaGFyID0gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCByZW1haW5pbmdDaGFycyA9IHdvcmQuc2xpY2UoMSk7XG4gICAgcmV0dXJuIGAke2ZpcnN0Q2hhcn0ke3JlbWFpbmluZ0NoYXJzfWA7XG4gIH0pO1xuICByZXR1cm4gdGl0bGVDYXNlZExpc3Quam9pbihcIiBcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0b1RpdGxlQ2FzZTtcbiIsImV4cG9ydCBjb25zdCBJTklUSUFURUQgPSBcImluaXRpYXRlZFwiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkcgPSBcInBlbmRpbmdcIjtcbmV4cG9ydCBjb25zdCBXSVRIRFJBV04gPSBcIndpdGhkcmF3blwiO1xuZXhwb3J0IGNvbnN0IEFQUFJPVkVEID0gXCJhcHByb3ZlZFwiO1xuZXhwb3J0IGNvbnN0IFJFSkVDVEVEID0gXCJyZWplY3RlZFwiO1xuZXhwb3J0IGNvbnN0IENPTlNFTlQgPSBcImNvbnNlbnRcIjtcbmV4cG9ydCBjb25zdCBFTUFJTEVEID0gXCJlbWFpbGVkXCI7XG5leHBvcnQgY29uc3QgUkVWSUVXID0gXCJyZXZpZXdcIjtcbmV4cG9ydCBjb25zdCBSRVZJRVdJTkcgPSBcInJldmlld2luZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlNJREVSID0gXCJjb25zaWRlclwiO1xuZXhwb3J0IGNvbnN0IFBST0NFU1NJTkcgPSBcInByb2Nlc3NpbmdcIjtcbmV4cG9ydCBjb25zdCBQRU5ESU5HX0RJU1BVVEUgPSBcInBlbmRpbmdfX2Rpc3B1dGVcIjtcbmV4cG9ydCBjb25zdCBQRU5ESU5HX0ZJUlNUX05PVElDRSA9IFwicGVuZGluZ19fZmlyc3Rfbm90aWNlXCI7XG5leHBvcnQgY29uc3QgUEVORElOR19TRUNPTkRfTk9USUNFID0gXCJwZW5kaW5nX19zZWNvbmRfbm90aWNlXCI7XG5leHBvcnQgY29uc3QgRklSU1RfTk9USUNFID0gXCJmaXJzdF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBTRUNPTkRfTk9USUNFID0gXCJzZWNvbmRfbm90aWNlXCI7XG5leHBvcnQgY29uc3QgU1NOX1RSQUNFX0ZBSUxFRCA9IFwicmV2aWV3X19pZGVudGl0eVwiO1xuZXhwb3J0IGNvbnN0IE1WUl9GQUlMRUQgPSBcInJldmlld19fbXZyXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRSA9IFwicmV2aWV3X19xYVwiO1xuZXhwb3J0IGNvbnN0IENPTVBMSUFOQ0VfU08gPSBcInJldmlld19fc29cIjtcbmV4cG9ydCBjb25zdCBWRVJJRllJTkcgPSBcInZlcmlmeWluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTVBMSUFOQ0VSRVZJRVcgPSBcIkNvbXBsaWFuY2UgUmV2aWV3XCI7XG5leHBvcnQgY29uc3QgU1RPUkVEID0gXCJTdG9yZWRcIjtcblxuY29uc3QgdHJhbnNsYXRlU3RhdHVzID0gKHN0YXR1cywgYWR2ZXJzZV9hY3Rpb24pID0+IHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIEFQUFJPVkVEOlxuICAgICAgcmV0dXJuIEFQUFJPVkVEO1xuICAgIGNhc2UgUEVORElORzpcbiAgICBjYXNlIFBFTkRJTkdfRElTUFVURTpcbiAgICAgIHJldHVybiBQRU5ESU5HO1xuICAgIGNhc2UgUkVKRUNURUQ6XG4gICAgICByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBQRU5ESU5HX0ZJUlNUX05PVElDRTpcbiAgICAgIGlmIChhZHZlcnNlX2FjdGlvbikgcmV0dXJuIEZJUlNUX05PVElDRTtcbiAgICAgIGVsc2UgcmV0dXJuIFJFSkVDVEVEO1xuICAgIGNhc2UgUEVORElOR19TRUNPTkRfTk9USUNFOlxuICAgICAgaWYgKGFkdmVyc2VfYWN0aW9uKSByZXR1cm4gU0VDT05EX05PVElDRTtcbiAgICAgIGVsc2UgcmV0dXJuIFJFSkVDVEVEO1xuICAgIGNhc2UgQ09OU0VOVDpcbiAgICAgIHJldHVybiBDT05TRU5UO1xuICAgIGNhc2UgUFJPQ0VTU0lORzpcbiAgICAgIHJldHVybiBQUk9DRVNTSU5HO1xuICAgIGNhc2UgRU1BSUxFRDpcbiAgICAgIHJldHVybiBFTUFJTEVEO1xuICAgIGNhc2UgUkVWSUVXOlxuICAgICAgcmV0dXJuIFJFVklFVztcbiAgICBjYXNlIFJFVklFV0lORzpcbiAgICAgIHJldHVybiBSRVZJRVdJTkc7XG4gICAgY2FzZSBXSVRIRFJBV046XG4gICAgICByZXR1cm4gV0lUSERSQVdOO1xuICAgIGNhc2UgSU5JVElBVEVEOlxuICAgICAgcmV0dXJuIFNUT1JFRDtcbiAgICBjYXNlIFNTTl9UUkFDRV9GQUlMRUQ6XG4gICAgICByZXR1cm4gVkVSSUZZSU5HO1xuICAgIGNhc2UgTVZSX0ZBSUxFRDpcbiAgICAgIHJldHVybiBDT01QTElBTkNFUkVWSUVXO1xuICAgIGNhc2UgQ09NUExJQU5DRTpcbiAgICAgIHJldHVybiBDT01QTElBTkNFUkVWSUVXO1xuICAgIGNhc2UgQ09NUExJQU5DRV9TTzpcbiAgICAgIHJldHVybiBDT01QTElBTkNFUkVWSUVXO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gUEVORElORztcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRlU3RhdHVzO1xuIiwiaW1wb3J0IHtcbiAgdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlLFxuICBkcml2ZXJzTGljZW5zZVJlZ2V4XG59IGZyb20gXCJAdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZVwiO1xuXG5leHBvcnQgY29uc3QgY3VycmVudFN0YXRlcyA9IE9iamVjdC5rZXlzKGRyaXZlcnNMaWNlbnNlUmVnZXgpO1xuXG5jb25zdCB2YWxpZGF0ZURyaXZlcnNMaWNlbnNlID0gKGxpY2Vuc2UsIHN0YXRlID0gXCJcIikgPT4ge1xuICBpZiAodHlwZW9mIGxpY2Vuc2UgIT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHN0YXRlICE9PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uczogXCJMaWNlbnNlIGFuZCBTdGF0ZSBtdXN0IGJlIFN0cmluZ3NcIiB9O1xuICBpZiAoIWN1cnJlbnRTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpKSByZXR1cm4geyB2YWxpZDogdHJ1ZSwgcmVhc29uczogXCJcIiB9O1xuICByZXR1cm4gdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlKGxpY2Vuc2UsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlRHJpdmVyc0xpY2Vuc2U7XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbi8qKlxuICogQmFzZWQgb24gTydSZWlsbHkncyBSZWdleCBDb29rYm9vazpcbiAqIGh0dHBzOi8vd3d3Lm9yZWlsbHkuY29tL2xpYnJhcnkvdmlldy9yZWd1bGFyLWV4cHJlc3Npb25zLWNvb2tib29rLzk3ODE0NDkzMjc0NTMvY2gwNHMxMi5odG1sXG4gKiBcbiAqIEV4dHJhIHJ1bGVzOlxuICogIDEyMzQ1Njc4OSBpcyBhbiBpbnZhbGlkIFNTTlxuICogIFJlcGVhdGluZyBkaWdpdHMgYXJlIGludmFsaWQgKDExMTExMTExMSwgMTExMTExMTExLCBldGMuKVxuICogIDk4NiBwcmVmaXggaXMgYWxsb3dlZCAoZm9yIFRlc3QgSWRlbnRpdGllcylcbiAqL1xuY29uc3QgdmFsaWRTc25SZWdleCA9IC9eKDk4NnwoPyEwMDB8NjY2fDEyMzQ1Njc4OXwoXFxkKVxcMns4fSlbMC04XVswLTldezJ9KSg/ITAwKVswLTldezJ9KD8hMDAwMClbMC05XXs0fSQvO1xuXG4vKipcbiAqIEJhc2VkIG9uIFNTQSdzIG1pc3VzZWQgYXJ0aWNsZTpcbiAqIGh0dHBzOi8vd3d3LnNzYS5nb3YvaGlzdG9yeS9zc24vbWlzdXNlZC5odG1sXG4gKiovXG5jb25zdCBtaXN1c2VkUmVnZXggPSAvXjA3ODA1MTEyMHwyMTkwOTk5OTkkLztcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlX3NzbiA9IHNzbiA9PiB7XG4gIGlmICh0eXBlb2Ygc3NuICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG51bWJlclNTTiA9IHNzbi5yZXBsYWNlKC9cXEQvZywgXCJcIik7XG4gIHJldHVybiAhbWlzdXNlZFJlZ2V4LnRlc3QobnVtYmVyU1NOKSAmJiB2YWxpZFNzblJlZ2V4LnRlc3QobnVtYmVyU1NOKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkRmlyc3RUaHJlZSA9IF8ucmFuZ2UoOTAwLCAxMDAwKVxuICAubWFwKG51bSA9PiBgJHtudW19YClcbiAgLmNvbmNhdChbXCIwMDBcIiwgXCI2NjZcIl0pO1xuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGVfc3NuO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUqL1xuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG4vLyBEdWNrIGNoZWNrIGZvciBhcnJheSBvciBNb2JYIG9ic2VydmFibGUgYXJyYXkgKGF2b2lkcyBidW5kbGluZyBtb2J4KVxuY29uc3QgaXNBcnJheU9yT2JzZXJ2YWJsZUFycmF5ID0gdmFsdWUgPT5cbiAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHxcbiAgISEodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHZhbHVlLnNsaWNlID09PSBcImZ1bmN0aW9uXCIpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFbWFpbCA9IGVtYWlsID0+IHtcbiAgaWYgKCFlbWFpbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByZWdleCA9IC9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyQvO1xuICByZXR1cm4gcmVnZXgudGVzdChlbWFpbCk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQaG9uZSA9IHBob25lID0+IHtcbiAgaWYgKCFwaG9uZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByZWdleCA9IC9eMT9cXHM/XFwoPyhcXGR7M30pXFwpP1stIF0/KFxcZHszfSlbLSBdPyhcXGR7NH0pJC87XG4gIHJldHVybiByZWdleC50ZXN0KHBob25lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FscGhhTnVtZXJpYyA9IGNoID0+IHtcbiAgcmV0dXJuIGNoLm1hdGNoKC9eKFthLXowLTldKSsvaSkgIT09IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ2FuYWRpYW5aaXBjb2RlID0gemlwY29kZSA9PiBcbiAgemlwY29kZS5tYXRjaCgvXltBLVphLXpdXFxkW0EtWmEtel0kLykgIT09IG51bGwgfHwgemlwY29kZS5tYXRjaCgvXltBLVphLXpdXFxkW0EtWmEtel1bIC1dP1xcZFtBLVphLXpdXFxkLykgIT09IG51bGxcblxuLy8gc2VlIHZhbGlkYXRlLXNzbi5qc1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU1NOID0gc3NuID0+IHtcbiAgaWYgKHR5cGVvZiBzc24gIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbnVtYmVyU1NOID0gc3NuLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbiAgcmV0dXJuIG51bWJlclNTTi5sZW5ndGggPT09IDk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDaGVjayA9IHdvcmtlcl9jaGVjayA9PiB7XG4gIGNvbnN0IGNoZWNrID0gd29ya2VyX2NoZWNrID09PSBcImNsZWFyXCIgPyBbXSA6IHdvcmtlcl9jaGVjaztcbiAgaWYgKGlzQXJyYXlPck9ic2VydmFibGVBcnJheShjaGVjaykpIHJldHVybiBbLi4uY2hlY2tdO1xuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBjb250YWluc0F0U3ltYm9sID0gc3RyID0+IC9ALy50ZXN0KHN0cik7XG5leHBvcnQgY29uc3QgY29udGFpbnNOdW1iZXIgPSBzdHIgPT4gL1xcZC8udGVzdChzdHIpO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTmFtZSA9IG5hbWUgPT5cbiAgbmFtZS50cmltKCkubGVuZ3RoICE9PSAwICYmICFjb250YWluc0F0U3ltYm9sKG5hbWUpICYmICFjb250YWluc051bWJlcihuYW1lKTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFkZHJlc3MgPSBhZGRyZXNzID0+XG4gIGFkZHJlc3MudHJpbSgpLmxlbmd0aCAhPT0gMCAmJiAhY29udGFpbnNBdFN5bWJvbChhZGRyZXNzKTsgIFxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQ3VzdG9tSW5wdXQgPSB2YWx1ZSA9PiB7XG4gIGlmICghXy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHZhbHVlLnRyaW0oKS5sZW5ndGggIT09IDA7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVaaXBjb2RlID0gemlwY29kZSA9PlxuICBfLmlzU3RyaW5nKHppcGNvZGUpICYmIHppcGNvZGUubGVuZ3RoID49IDU7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUNhbmFkaWFuWmlwY29kZSA9IHppcGNvZGUgPT5cbiAgXy5pc1N0cmluZyh6aXBjb2RlKSBcbiAgICAmJiBpc0FscGhhTnVtZXJpYyh6aXBjb2RlKSBcbiAgICAmJiBpc1ZhbGlkQ2FuYWRpYW5aaXBjb2RlKHppcGNvZGUpO1xuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXlPck9ic2VydmFibGVBcnJheSh2YWx1ZSk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1WUkNoZWNrID0gY2hlY2sgPT5cbiAgXy5pc09iamVjdChjaGVjaykgfHwgdHlwZW9mIGNoZWNrID09PSBcInN0cmluZ1wiID8gY2hlY2sgOiB7fTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGhvbmVWZXJpZmljYXRpb24gPSBzdGF0dXMgPT4ge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgXCJ2ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJUcnVlXCI6XG4gICAgICByZXR1cm4gXCJ2ZXJpZmllZFwiO1xuICAgIGNhc2UgXCJ1bnZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIkZhbHNlXCI6XG4gICAgICByZXR1cm4gXCJ1bnZlcmlmaWVkXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGlzYWJsZV9jaGVjayA9IGVudl92YXIgPT5cbiAgdHlwZW9mIGVudl92YXIgPT09IFwic3RyaW5nXCIgPyBlbnZfdmFyLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsSWQgPSBpZCA9PiBfLmlzU3RyaW5nKGlkKSAmJiBpZC5sZW5ndGggPT09IDMyO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUdXJuSWQgPSBpZCA9PlxuICBfLmlzU3RyaW5nKGlkKSAmJiAvXkN7MX1bMC05XXsxMH0kLy50ZXN0KGlkKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
|