@digitransit-component/digitransit-component-favourite-editing-modal 4.0.0 → 5.0.0

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.
@@ -1,8 +1,7 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@hsl-fi/container-spinner"),require("@hsl-fi/modal"),require("@digitransit-component/digitransit-component-icon"),require("@digitransit-component/digitransit-component-dialog-modal"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","react-sortablejs","@hsl-fi/container-spinner","@hsl-fi/modal","@digitransit-component/digitransit-component-icon","@digitransit-component/digitransit-component-dialog-modal","i18next"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-favourite-editing-modal"]={},e.PropTypes,e.React,e.reactI18next,e.reactSortablejs,e.ContainerSpinner,e.Modal,e.Icon,e.DialogModal,e.i18next)}(this,(function(e,t,r,i,n,a,o,s,l,u){"use strict";function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=c(t),f=c(r),v=c(a),_=c(o),p=c(s),h=c(l);function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function m(e){var t=function(e,t){if("object"!=y(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,t||"default");if("object"!=y(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==y(t)?t:t+""}function b(e,t,r){return(t=m(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e,t){return e(t={exports:{}},t.exports),t.exports}var j=g((function(e){
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@hsl-fi/container-spinner"),require("@hsl-fi/modal"),require("@digitransit-component/digitransit-component-icon"),require("@digitransit-component/digitransit-component-dialog-modal"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","react-sortablejs","@hsl-fi/container-spinner","@hsl-fi/modal","@digitransit-component/digitransit-component-icon","@digitransit-component/digitransit-component-dialog-modal","i18next"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["@digitransit-component/digitransit-component-favourite-editing-modal"]={},t.PropTypes,t.React,t.reactI18next,t.reactSortablejs,t.ContainerSpinner,t.Modal,t.Icon,t.DialogModal,t.i18next)}(this,(function(t,e,r,n,i,o,a,u,s,l){"use strict";function c(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var f=c(e),d=c(r),v=c(o),_=c(a),p=c(u),y=c(s);function h(t){return h="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},h(t)}function m(t){var e=function(t,e){if("object"!=h(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=h(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==h(e)?e:e+""}function b(t,e,r){return(e=m(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function g(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var j,w={exports:{}};
2
2
  /*!
3
3
  Copyright (c) 2018 Jed Watson.
4
4
  Licensed under the MIT License (MIT), see
5
5
  http://jedwatson.github.io/classnames
6
- */
7
- !function(){var t={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=n(e,i(r)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var i="";for(var a in e)t.call(e,a)&&e[a]&&(i=n(i,a));return i}function n(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):window.classNames=r}()})),w="object"==typeof global&&global&&global.Object===Object&&global,x="object"==typeof self&&self&&self.Object===Object&&self,S=w||x||Function("return this")(),O=S.Symbol,M=Object.prototype,E=M.hasOwnProperty,F=M.toString,N=O?O.toStringTag:void 0;var P=function(e){var t=E.call(e,N),r=e[N];try{e[N]=void 0;var i=!0}catch(e){}var n=F.call(e);return i&&(t?e[N]=r:delete e[N]),n},I=Object.prototype.toString;var A=function(e){return I.call(e)},V=O?O.toStringTag:void 0;var k=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":V&&V in Object(e)?P(e):A(e)};var C=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var D,z=function(e){if(!C(e))return!1;var t=k(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},Z=S["__core-js_shared__"],T=(D=/[^.]+$/.exec(Z&&Z.keys&&Z.keys.IE_PROTO||""))?"Symbol(src)_1."+D:"";var L=function(e){return!!T&&T in e},R=Function.prototype.toString;var H=function(e){if(null!=e){try{return R.call(e)}catch(e){}try{return e+""}catch(e){}}return""},J=/^\[object .+?Constructor\]$/,q=Function.prototype,B=Object.prototype,U=q.toString,$=B.hasOwnProperty,Q=RegExp("^"+U.call($).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var G=function(e){return!(!C(e)||L(e))&&(z(e)?Q:J).test(H(e))};var W=function(e,t){return null==e?void 0:e[t]};var K=function(e,t){var r=W(e,t);return G(r)?r:void 0},Y=K(Object,"create");var X=function(){this.__data__=Y?Y(null):{},this.size=0};var ee=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},te=Object.prototype.hasOwnProperty;var re=function(e){var t=this.__data__;if(Y){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return te.call(t,e)?t[e]:void 0},ie=Object.prototype.hasOwnProperty;var ne=function(e){var t=this.__data__;return Y?void 0!==t[e]:ie.call(t,e)};var ae=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Y&&void 0===t?"__lodash_hash_undefined__":t,this};function oe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}oe.prototype.clear=X,oe.prototype.delete=ee,oe.prototype.get=re,oe.prototype.has=ne,oe.prototype.set=ae;var se=oe;var le=function(){this.__data__=[],this.size=0};var ue=function(e,t){return e===t||e!=e&&t!=t};var ce=function(e,t){for(var r=e.length;r--;)if(ue(e[r][0],t))return r;return-1},de=Array.prototype.splice;var fe=function(e){var t=this.__data__,r=ce(t,e);return!(r<0)&&(r==t.length-1?t.pop():de.call(t,r,1),--this.size,!0)};var ve=function(e){var t=this.__data__,r=ce(t,e);return r<0?void 0:t[r][1]};var _e=function(e){return ce(this.__data__,e)>-1};var pe=function(e,t){var r=this.__data__,i=ce(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this};function he(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}he.prototype.clear=le,he.prototype.delete=fe,he.prototype.get=ve,he.prototype.has=_e,he.prototype.set=pe;var ye=he,me=K(S,"Map");var be=function(){this.size=0,this.__data__={hash:new se,map:new(me||ye),string:new se}};var ge=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var je=function(e,t){var r=e.__data__;return ge(t)?r["string"==typeof t?"string":"hash"]:r.map};var we=function(e){var t=je(this,e).delete(e);return this.size-=t?1:0,t};var xe=function(e){return je(this,e).get(e)};var Se=function(e){return je(this,e).has(e)};var Oe=function(e,t){var r=je(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this};function Me(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}Me.prototype.clear=be,Me.prototype.delete=we,Me.prototype.get=xe,Me.prototype.has=Se,Me.prototype.set=Oe;var Ee=Me;var Fe=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};var Ne=function(e){return this.__data__.has(e)};function Pe(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Ee;++t<r;)this.add(e[t])}Pe.prototype.add=Pe.prototype.push=Fe,Pe.prototype.has=Ne;var Ie=Pe;var Ae=function(e,t,r,i){for(var n=e.length,a=r+(i?1:-1);i?a--:++a<n;)if(t(e[a],a,e))return a;return-1};var Ve=function(e){return e!=e};var ke=function(e,t,r){for(var i=r-1,n=e.length;++i<n;)if(e[i]===t)return i;return-1};var Ce=function(e,t,r){return t==t?ke(e,t,r):Ae(e,Ve,r)};var De=function(e,t){return!!(null==e?0:e.length)&&Ce(e,t,0)>-1};var ze=function(e,t,r){for(var i=-1,n=null==e?0:e.length;++i<n;)if(r(t,e[i]))return!0;return!1};var Ze=function(e,t){for(var r=-1,i=null==e?0:e.length,n=Array(i);++r<i;)n[r]=t(e[r],r,e);return n};var Te=function(e){return function(t){return e(t)}};var Le=function(e,t){return e.has(t)};var Re=function(e,t,r,i){var n=-1,a=De,o=!0,s=e.length,l=[],u=t.length;if(!s)return l;r&&(t=Ze(t,Te(r))),i?(a=ze,o=!1):t.length>=200&&(a=Le,o=!1,t=new Ie(t));e:for(;++n<s;){var c=e[n],d=null==r?c:r(c);if(c=i||0!==c?c:0,o&&d==d){for(var f=u;f--;)if(t[f]===d)continue e;l.push(c)}else a(t,d,i)||l.push(c)}return l};var He=function(e,t){for(var r=-1,i=t.length,n=e.length;++r<i;)e[n+r]=t[r];return e};var Je=function(e){return null!=e&&"object"==typeof e};var qe=function(e){return Je(e)&&"[object Arguments]"==k(e)},Be=Object.prototype,Ue=Be.hasOwnProperty,$e=Be.propertyIsEnumerable,Qe=qe(function(){return arguments}())?qe:function(e){return Je(e)&&Ue.call(e,"callee")&&!$e.call(e,"callee")},Ge=Qe,We=Array.isArray,Ke=O?O.isConcatSpreadable:void 0;var Ye=function(e){return We(e)||Ge(e)||!!(Ke&&e&&e[Ke])};var Xe=function e(t,r,i,n,a){var o=-1,s=t.length;for(i||(i=Ye),a||(a=[]);++o<s;){var l=t[o];r>0&&i(l)?r>1?e(l,r-1,i,n,a):He(a,l):n||(a[a.length]=l)}return a};var et=function(e){return e};var tt=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)},rt=Math.max;var it=function(e,t,r){return t=rt(void 0===t?e.length-1:t,0),function(){for(var i=arguments,n=-1,a=rt(i.length-t,0),o=Array(a);++n<a;)o[n]=i[t+n];n=-1;for(var s=Array(t+1);++n<t;)s[n]=i[n];return s[t]=r(o),tt(e,this,s)}};var nt=function(e){return function(){return e}},at=function(){try{var e=K(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),ot=at?function(e,t){return at(e,"toString",{configurable:!0,enumerable:!1,value:nt(t),writable:!0})}:et,st=Date.now;var lt=function(e){var t=0,r=0;return function(){var i=st(),n=16-(i-r);if(r=i,n>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}},ut=lt(ot);var ct=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991};var dt=function(e){return null!=e&&ct(e.length)&&!z(e)};var ft=function(e){return Je(e)&&dt(e)};var vt=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0},_t=function(e,t){return ut(it(e,t,et),e+"")}((function(e,t){var r=vt(t);return ft(r)&&(r=void 0),ft(e)?Re(e,Xe(t,1,ft,!0),void 0,r):[]}));var pt=function(){this.__data__=new ye,this.size=0};var ht=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r};var yt=function(e){return this.__data__.get(e)};var mt=function(e){return this.__data__.has(e)};var bt=function(e,t){var r=this.__data__;if(r instanceof ye){var i=r.__data__;if(!me||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new Ee(i)}return r.set(e,t),this.size=r.size,this};function gt(e){var t=this.__data__=new ye(e);this.size=t.size}gt.prototype.clear=pt,gt.prototype.delete=ht,gt.prototype.get=yt,gt.prototype.has=mt,gt.prototype.set=bt;var jt=gt;var wt=function(e,t){for(var r=-1,i=null==e?0:e.length;++r<i;)if(t(e[r],r,e))return!0;return!1};var xt=function(e,t,r,i,n,a){var o=1&r,s=e.length,l=t.length;if(s!=l&&!(o&&l>s))return!1;var u=a.get(e),c=a.get(t);if(u&&c)return u==t&&c==e;var d=-1,f=!0,v=2&r?new Ie:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var _=e[d],p=t[d];if(i)var h=o?i(p,_,d,t,e,a):i(_,p,d,e,t,a);if(void 0!==h){if(h)continue;f=!1;break}if(v){if(!wt(t,(function(e,t){if(!Le(v,t)&&(_===e||n(_,e,r,i,a)))return v.push(t)}))){f=!1;break}}else if(_!==p&&!n(_,p,r,i,a)){f=!1;break}}return a.delete(e),a.delete(t),f},St=S.Uint8Array;var Ot=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e,i){r[++t]=[i,e]})),r};var Mt=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r},Et=O?O.prototype:void 0,Ft=Et?Et.valueOf:void 0;var Nt=function(e,t,r,i,n,a,o){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new St(e),new St(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return ue(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var s=Ot;case"[object Set]":var l=1&i;if(s||(s=Mt),e.size!=t.size&&!l)return!1;var u=o.get(e);if(u)return u==t;i|=2,o.set(e,t);var c=xt(s(e),s(t),i,n,a,o);return o.delete(e),c;case"[object Symbol]":if(Ft)return Ft.call(e)==Ft.call(t)}return!1};var Pt=function(e,t,r){var i=t(e);return We(e)?i:He(i,r(e))};var It=function(e,t){for(var r=-1,i=null==e?0:e.length,n=0,a=[];++r<i;){var o=e[r];t(o,r,e)&&(a[n++]=o)}return a};var At=function(){return[]},Vt=Object.prototype.propertyIsEnumerable,kt=Object.getOwnPropertySymbols,Ct=kt?function(e){return null==e?[]:(e=Object(e),It(kt(e),(function(t){return Vt.call(e,t)})))}:At;var Dt=function(e,t){for(var r=-1,i=Array(e);++r<e;)i[r]=t(r);return i};var zt=function(){return!1},Zt=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r?S.Buffer:void 0,a=(n?n.isBuffer:void 0)||zt;e.exports=a})),Tt=/^(?:0|[1-9]\d*)$/;var Lt=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&Tt.test(e))&&e>-1&&e%1==0&&e<t},Rt={};Rt["[object Float32Array]"]=Rt["[object Float64Array]"]=Rt["[object Int8Array]"]=Rt["[object Int16Array]"]=Rt["[object Int32Array]"]=Rt["[object Uint8Array]"]=Rt["[object Uint8ClampedArray]"]=Rt["[object Uint16Array]"]=Rt["[object Uint32Array]"]=!0,Rt["[object Arguments]"]=Rt["[object Array]"]=Rt["[object ArrayBuffer]"]=Rt["[object Boolean]"]=Rt["[object DataView]"]=Rt["[object Date]"]=Rt["[object Error]"]=Rt["[object Function]"]=Rt["[object Map]"]=Rt["[object Number]"]=Rt["[object Object]"]=Rt["[object RegExp]"]=Rt["[object Set]"]=Rt["[object String]"]=Rt["[object WeakMap]"]=!1;var Ht=function(e){return Je(e)&&ct(e.length)&&!!Rt[k(e)]},Jt=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r&&w.process,a=function(){try{var e=i&&i.require&&i.require("util").types;return e||n&&n.binding&&n.binding("util")}catch(e){}}();e.exports=a})),qt=Jt&&Jt.isTypedArray,Bt=qt?Te(qt):Ht,Ut=Object.prototype.hasOwnProperty;var $t=function(e,t){var r=We(e),i=!r&&Ge(e),n=!r&&!i&&Zt(e),a=!r&&!i&&!n&&Bt(e),o=r||i||n||a,s=o?Dt(e.length,String):[],l=s.length;for(var u in e)!t&&!Ut.call(e,u)||o&&("length"==u||n&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Lt(u,l))||s.push(u);return s},Qt=Object.prototype;var Gt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Qt)};var Wt=function(e,t){return function(r){return e(t(r))}},Kt=Wt(Object.keys,Object),Yt=Object.prototype.hasOwnProperty;var Xt=function(e){if(!Gt(e))return Kt(e);var t=[];for(var r in Object(e))Yt.call(e,r)&&"constructor"!=r&&t.push(r);return t};var er=function(e){return dt(e)?$t(e):Xt(e)};var tr=function(e){return Pt(e,er,Ct)},rr=Object.prototype.hasOwnProperty;var ir=function(e,t,r,i,n,a){var o=1&r,s=tr(e),l=s.length;if(l!=tr(t).length&&!o)return!1;for(var u=l;u--;){var c=s[u];if(!(o?c in t:rr.call(t,c)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var v=!0;a.set(e,t),a.set(t,e);for(var _=o;++u<l;){var p=e[c=s[u]],h=t[c];if(i)var y=o?i(h,p,c,t,e,a):i(p,h,c,e,t,a);if(!(void 0===y?p===h||n(p,h,r,i,a):y)){v=!1;break}_||(_="constructor"==c)}if(v&&!_){var m=e.constructor,b=t.constructor;m==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof m&&m instanceof m&&"function"==typeof b&&b instanceof b||(v=!1)}return a.delete(e),a.delete(t),v},nr=K(S,"DataView"),ar=K(S,"Promise"),or=K(S,"Set"),sr=K(S,"WeakMap"),lr="[object Map]",ur="[object Promise]",cr="[object Set]",dr="[object WeakMap]",fr="[object DataView]",vr=H(nr),_r=H(me),pr=H(ar),hr=H(or),yr=H(sr),mr=k;(nr&&mr(new nr(new ArrayBuffer(1)))!=fr||me&&mr(new me)!=lr||ar&&mr(ar.resolve())!=ur||or&&mr(new or)!=cr||sr&&mr(new sr)!=dr)&&(mr=function(e){var t=k(e),r="[object Object]"==t?e.constructor:void 0,i=r?H(r):"";if(i)switch(i){case vr:return fr;case _r:return lr;case pr:return ur;case hr:return cr;case yr:return dr}return t});var br=mr,gr="[object Arguments]",jr="[object Array]",wr="[object Object]",xr=Object.prototype.hasOwnProperty;var Sr=function(e,t,r,i,n,a){var o=We(e),s=We(t),l=o?jr:br(e),u=s?jr:br(t),c=(l=l==gr?wr:l)==wr,d=(u=u==gr?wr:u)==wr,f=l==u;if(f&&Zt(e)){if(!Zt(t))return!1;o=!0,c=!1}if(f&&!c)return a||(a=new jt),o||Bt(e)?xt(e,t,r,i,n,a):Nt(e,t,l,r,i,n,a);if(!(1&r)){var v=c&&xr.call(e,"__wrapped__"),_=d&&xr.call(t,"__wrapped__");if(v||_){var p=v?e.value():e,h=_?t.value():t;return a||(a=new jt),n(p,h,r,i,a)}}return!!f&&(a||(a=new jt),ir(e,t,r,i,n,a))};var Or=function e(t,r,i,n,a){return t===r||(null==t||null==r||!Je(t)&&!Je(r)?t!=t&&r!=r:Sr(t,r,i,n,e,a))};var Mr=function(e,t){return Or(e,t)},Er=Object.prototype.hasOwnProperty;var Fr=function(e){if(null==e)return!0;if(dt(e)&&(We(e)||"string"==typeof e||"function"==typeof e.splice||Zt(e)||Bt(e)||Ge(e)))return!e.length;var t=br(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(Gt(e))return!Xt(e).length;for(var r in e)if(Er.call(e,r))return!1;return!0};var Nr=function(e,t){for(var r=-1,i=null==e?0:e.length;++r<i&&!1!==t(e[r],r,e););return e};var Pr=function(e,t,r){"__proto__"==t&&at?at(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r},Ir=Object.prototype.hasOwnProperty;var Ar=function(e,t,r){var i=e[t];Ir.call(e,t)&&ue(i,r)&&(void 0!==r||t in e)||Pr(e,t,r)};var Vr=function(e,t,r,i){var n=!r;r||(r={});for(var a=-1,o=t.length;++a<o;){var s=t[a],l=i?i(r[s],e[s],s,r,e):void 0;void 0===l&&(l=e[s]),n?Pr(r,s,l):Ar(r,s,l)}return r};var kr=function(e,t){return e&&Vr(t,er(t),e)};var Cr=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t},Dr=Object.prototype.hasOwnProperty;var zr=function(e){if(!C(e))return Cr(e);var t=Gt(e),r=[];for(var i in e)("constructor"!=i||!t&&Dr.call(e,i))&&r.push(i);return r};var Zr=function(e){return dt(e)?$t(e,!0):zr(e)};var Tr=function(e,t){return e&&Vr(t,Zr(t),e)},Lr=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r?S.Buffer:void 0,a=n?n.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var r=e.length,i=a?a(r):new e.constructor(r);return e.copy(i),i}}));var Rr=function(e,t){var r=-1,i=e.length;for(t||(t=Array(i));++r<i;)t[r]=e[r];return t};var Hr=function(e,t){return Vr(e,Ct(e),t)},Jr=Wt(Object.getPrototypeOf,Object),qr=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)He(t,Ct(e)),e=Jr(e);return t}:At;var Br=function(e,t){return Vr(e,qr(e),t)};var Ur=function(e){return Pt(e,Zr,qr)},$r=Object.prototype.hasOwnProperty;var Qr=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&$r.call(e,"index")&&(r.index=e.index,r.input=e.input),r};var Gr=function(e){var t=new e.constructor(e.byteLength);return new St(t).set(new St(e)),t};var Wr=function(e,t){var r=t?Gr(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)},Kr=/\w*$/;var Yr=function(e){var t=new e.constructor(e.source,Kr.exec(e));return t.lastIndex=e.lastIndex,t},Xr=O?O.prototype:void 0,ei=Xr?Xr.valueOf:void 0;var ti=function(e){return ei?Object(ei.call(e)):{}};var ri=function(e,t){var r=t?Gr(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)};var ii=function(e,t,r){var i=e.constructor;switch(t){case"[object ArrayBuffer]":return Gr(e);case"[object Boolean]":case"[object Date]":return new i(+e);case"[object DataView]":return Wr(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return ri(e,r);case"[object Map]":case"[object Set]":return new i;case"[object Number]":case"[object String]":return new i(e);case"[object RegExp]":return Yr(e);case"[object Symbol]":return ti(e)}},ni=Object.create,ai=function(){function e(){}return function(t){if(!C(t))return{};if(ni)return ni(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();var oi=function(e){return"function"!=typeof e.constructor||Gt(e)?{}:ai(Jr(e))};var si=function(e){return Je(e)&&"[object Map]"==br(e)},li=Jt&&Jt.isMap,ui=li?Te(li):si;var ci=function(e){return Je(e)&&"[object Set]"==br(e)},di=Jt&&Jt.isSet,fi=di?Te(di):ci,vi="[object Arguments]",_i="[object Function]",pi="[object Object]",hi={};hi[vi]=hi["[object Array]"]=hi["[object ArrayBuffer]"]=hi["[object DataView]"]=hi["[object Boolean]"]=hi["[object Date]"]=hi["[object Float32Array]"]=hi["[object Float64Array]"]=hi["[object Int8Array]"]=hi["[object Int16Array]"]=hi["[object Int32Array]"]=hi["[object Map]"]=hi["[object Number]"]=hi[pi]=hi["[object RegExp]"]=hi["[object Set]"]=hi["[object String]"]=hi["[object Symbol]"]=hi["[object Uint8Array]"]=hi["[object Uint8ClampedArray]"]=hi["[object Uint16Array]"]=hi["[object Uint32Array]"]=!0,hi["[object Error]"]=hi[_i]=hi["[object WeakMap]"]=!1;var yi=function e(t,r,i,n,a,o){var s,l=1&r,u=2&r,c=4&r;if(i&&(s=a?i(t,n,a,o):i(t)),void 0!==s)return s;if(!C(t))return t;var d=We(t);if(d){if(s=Qr(t),!l)return Rr(t,s)}else{var f=br(t),v=f==_i||"[object GeneratorFunction]"==f;if(Zt(t))return Lr(t,l);if(f==pi||f==vi||v&&!a){if(s=u||v?{}:oi(t),!l)return u?Br(t,Tr(s,t)):Hr(t,kr(s,t))}else{if(!hi[f])return a?t:{};s=ii(t,f,l)}}o||(o=new jt);var _=o.get(t);if(_)return _;o.set(t,s),fi(t)?t.forEach((function(n){s.add(e(n,r,i,n,t,o))})):ui(t)&&t.forEach((function(n,a){s.set(a,e(n,r,i,a,t,o))}));var p=d?void 0:(c?u?Ur:tr:u?Zr:er)(t);return Nr(p||t,(function(n,a){p&&(n=t[a=n]),Ar(s,a,e(n,r,i,a,t,o))})),s};var mi=function(e){return"symbol"==typeof e||Je(e)&&"[object Symbol]"==k(e)},bi=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,gi=/^\w*$/;var ji=function(e,t){if(We(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!mi(e))||(gi.test(e)||!bi.test(e)||null!=t&&e in Object(t))};function wi(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var i=arguments,n=t?t.apply(this,i):i[0],a=r.cache;if(a.has(n))return a.get(n);var o=e.apply(this,i);return r.cache=a.set(n,o)||a,o};return r.cache=new(wi.Cache||Ee),r}wi.Cache=Ee;var xi=wi;var Si=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Oi=/\\(\\)?/g,Mi=function(e){var t=xi(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Si,(function(e,r,i,n){t.push(i?n.replace(Oi,"$1"):r||e)})),t})),Ei=O?O.prototype:void 0,Fi=Ei?Ei.toString:void 0;var Ni=function e(t){if("string"==typeof t)return t;if(We(t))return Ze(t,e)+"";if(mi(t))return Fi?Fi.call(t):"";var r=t+"";return"0"==r&&1/t==-1/0?"-0":r};var Pi=function(e){return null==e?"":Ni(e)};var Ii=function(e,t){return We(e)?e:ji(e,t)?[e]:Mi(Pi(e))};var Ai=function(e){if("string"==typeof e||mi(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t};var Vi=function(e,t){for(var r=0,i=(t=Ii(t,e)).length;null!=e&&r<i;)e=e[Ai(t[r++])];return r&&r==i?e:void 0};var ki=function(e,t,r){var i=-1,n=e.length;t<0&&(t=-t>n?0:n+t),(r=r>n?n:r)<0&&(r+=n),n=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(n);++i<n;)a[i]=e[i+t];return a};var Ci=function(e,t){return t.length<2?e:Vi(e,ki(t,0,-1))};var Di=function(e,t){return t=Ii(t,e),null==(e=Ci(e,t))||delete e[Ai(vt(t))]},zi=Function.prototype,Zi=Object.prototype,Ti=zi.toString,Li=Zi.hasOwnProperty,Ri=Ti.call(Object);var Hi=function(e){if(!Je(e)||"[object Object]"!=k(e))return!1;var t=Jr(e);if(null===t)return!0;var r=Li.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Ti.call(r)==Ri};var Ji=function(e){return Hi(e)?void 0:e};var qi=function(e){return(null==e?0:e.length)?Xe(e,1):[]};var Bi=function(e){return ut(it(e,void 0,qi),e+"")}((function(e,t){var r={};if(null==e)return r;var i=!1;t=Ze(t,(function(t){return t=Ii(t,e),i||(i=t.length>1),t})),Vr(e,Ur(e),r),i&&(r=yi(r,7,Ji));for(var n=t.length;n--;)Di(r,t[n]);return r}));or&&Mt(new or([,-0]))[1];var Ui=/[\\^$.*+?()[\]{}|]/g,$i=RegExp(Ui.source);var Qi=function(e){return(e=Pi(e))&&$i.test(e)?e.replace(Ui,"\\$&"):e};var Gi=function(e){return yi(e,5)};const Wi=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Ki=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Yi=(e,t)=>[e||t&&t.split(",")[0],"string"==typeof t?t.replace(new RegExp(`${Qi(e)}([ ,]|$)+`),""):""];function Xi(e,t){void 0===t&&(t={});var r=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===r&&i.firstChild?i.insertBefore(n,i.firstChild):i.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}xi(((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return Yi(e.name,e.address);case"favouriteVehicleRentalStation":case"bikestation":return[e.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${Qi(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],Wi(e)]:[e.name,e.id,Ki(e),Wi(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Wi(e)]}}),((e,t)=>{const r=Gi(e);return r.plain=t,r}));var en="modal-content_favourite-edit-modal-content-container__dGK6D",tn="modal-content_favourite-edit-modal-content-top__Luuv-",rn="modal-content_favourite-edit-modal-content-header__2oSv9";Xi(".modal-content_favourite-edit-modal-content-container__dGK6D {\n display: flex;\n flex-direction: column; }\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid #ddd;\n margin-bottom: 31px; }\n @media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n border-bottom: none;\n margin-bottom: 0; } }\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: inherit;\n font-size: 18px;\n font-weight: var(--font-weight-medium);\n line-height: normal;\n letter-spacing: -0.6px;\n color: #333;\n margin-bottom: 34px; }\n @media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n justify-content: start;\n align-items: center;\n margin-bottom: 26px;\n line-height: 1.33; } }\n");const nn=({headerText:e,renderList:t})=>f.default.createElement("div",{className:en},f.default.createElement("div",{className:tn},f.default.createElement("div",{className:rn},e)),t());"production"!==process.env.NODE_ENV&&(nn.propTypes={headerText:d.default.string.isRequired,renderList:d.default.func.isRequired});var an={"favourite-edit-list-container":"styles_favourite-edit-list-container__SM5ZN","favourite-edit-list":"styles_favourite-edit-list__VJIsM","favourite-edit-list-item":"styles_favourite-edit-list-item__VHc3F","favourite-edit-list-item-left":"styles_favourite-edit-list-item-left__iPstx","favourite-edit-list-arrow-hidden":"styles_favourite-edit-list-arrow-hidden__Of1nE","favourite-edit-list-item-drag":"styles_favourite-edit-list-item-drag__puT4i","favourite-edit-list-item-ellipsis":"styles_favourite-edit-list-item-ellipsis__ChHu0","favourite-edit-list-item-icon":"styles_favourite-edit-list-item-icon__QN7uQ",place:"styles_place__bY4jg",home:"styles_home__P1rvA",school:"styles_school__exJZw",sport:"styles_sport__rEyiE",shopping:"styles_shopping__hGZRe",work:"styles_work__PM6aB","favourite-edit-list-item-content":"styles_favourite-edit-list-item-content__qcbys","favourite-edit-list-item-name":"styles_favourite-edit-list-item-name__8HtQs","favourite-edit-list-item-address":"styles_favourite-edit-list-item-address__VxW9P","favourite-edit-list-item-right":"styles_favourite-edit-list-item-right__5dGkh","favourite-edit-list-item-edit":"styles_favourite-edit-list-item-edit__D-KxF","favourite-edit-list-item-remove":"styles_favourite-edit-list-item-remove__Ifpcz"};Xi(".styles_favourite-edit-list-container__SM5ZN {\n display: flex;\n position: relative;\n width: 100%; }\n @media screen and (min-width: 768px) {\n .styles_favourite-edit-list-container__SM5ZN {\n min-height: 286px; } }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0;\n padding: 0;\n box-sizing: border-box; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F:not(:first-child) {\n margin-top: 9px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F {\n display: flex;\n flex-direction: row;\n align-items: center;\n background: white;\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 50px;\n border-radius: 5px;\n border: solid 1px #d9d9d9;\n list-style: none;\n box-sizing: border-box; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx {\n display: flex;\n min-width: 69px;\n height: 100%;\n align-items: center; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE {\n z-index: -999;\n opacity: 0;\n width: 0;\n padding: 0;\n border: 0; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE:focus {\n font-weight: bold;\n z-index: 10;\n opacity: 1; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 37px;\n height: 100%;\n cursor: move; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 {\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 svg {\n fill: #888;\n height: 20px;\n transform: rotate(90deg); }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 24px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ svg {\n position: relative;\n left: -3px;\n top: -1px;\n fill: var(--color);\n width: 22px;\n height: 22px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_place__bY4jg svg {\n fill: var(--color);\n width: 24px;\n height: 24px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_home__P1rvA svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_school__exJZw svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_sport__rEyiE svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_shopping__hGZRe svg {\n fill: var(--color);\n width: 18px;\n height: 18px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_work__PM6aB svg {\n fill: var(--color);\n width: 20px;\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys {\n display: flex;\n flex-direction: column;\n width: calc(100% - 69px - 86px); }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-name__8HtQs {\n margin: 0;\n font-weight: var(--font-weight-medium);\n color: #333;\n font-size: 15px;\n line-height: 1;\n letter-spacing: -0.6px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P {\n margin: 3px 0 0;\n color: #666;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: -0.48px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P:empty {\n margin-top: 0; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh {\n display: flex;\n min-width: 86px;\n align-items: center;\n justify-content: space-evenly; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 22px;\n height: 48px;\n cursor: pointer; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF svg {\n fill: #888;\n width: 22px;\n height: 22px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: 18px;\n height: 48px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz svg {\n fill: #888;\n width: 18px;\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN > div {\n width: 100%; }\n");const on=u.createInstance({fallbackLng:"fi",resources:{de:{translation:{cancel:"Abbrechen",delete:"Löschen","delete-place-header":"Wollen Sie den Favoriten löschen?","delete-place-name":"Lösche Favorit: {{favourite.name}}","edit-places":"Bearbeite Favoriten","edit-place-name":"Bearbeite Favorit: {{favourite.name}}","edit-modal-on-open":"Favoriten bearbeiten.","choose-icon":"Wähle das Symbol für diesen Ort","close-modal":"Schließe den Dialog","input-placeholder":"Wählen Sie einen Name für diesen Ort (optional)",save:"Speichern","save-place":"Favorit speichern"}},en:{translation:{cancel:"Cancel",delete:"Delete","delete-place-header":"Do you want to delete the place?","delete-place-name":"Delete place: {{favourite.name}}","edit-places":"Edit places","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Select the place's icon","close-modal":"Close the modal","input-placeholder":"Give the name a place (optional)",save:"Save","save-place":"Save place",up:"Move favourite up",down:"Move favourite down"}},fi:{translation:{cancel:"Peruuta",delete:"Poista","delete-place-header":"Haluatko poistaa paikan?","delete-place-name":"Poista paikka: {{favourite.name}}","edit-places":"Muokkaa paikkoja","edit-place-name":"Muokkaa paikkaa: {{favourite.name}}","edit-modal-on-open":"Suosikkien muokkaus modaali.","choose-icon":"Valitse paikan kuvake","close-modal":"Sulje modaali","input-placeholder":"Anna paikalle nimi (vapaaehtoinen)",save:"Tallenna","save-place":"Tallenna paikka",up:"Siirrä suosikkisijaintia ylöpäin",down:"Siirrä suosikkisijaintia alaspäin"}},pl:{translation:{cancel:"Anuluj",delete:"Usuń","delete-place-header":"Czy na pewno chcesz usunąć to miejsce?","delete-place-name":"Usuń miejsce: {{favourite.name}}","edit-places":"Edytuj miejsca","edit-place-name":"Edytuj miejsce: {{favourite.name}}","edit-modal-on-open":"Modal edycji ulubionych.","choose-icon":"Wybierz ikonę miejsca","close-modal":"Zamknij modal","input-placeholder":"Nadaj nazwę miejscu (opcjonalne)",save:"Zapisz","save-place":"Zapisz miejsce",up:"Przenieś ulubione wyżej",down:"Przenieś ulubione niżej"}},sv:{translation:{cancel:"Avbryt",delete:"Ta bort","delete-place-header":"Vill du ta bort platsen?","delete-place-name":"Ta bort platsen: {{favourite.name}}","edit-places":"Redigera platser","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Välj platsens ikon","close-modal":"Stäng modalen","input-placeholder":"Ange platsens namn (frivilligt)",save:"Spara","save-place":"Spara plats",up:"Flytta favoriten uppåt",down:"Flytta favoriten nedåt"}}},defaultNS:"translation",react:{useSuspense:!0}});function sn(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}on.init();const ln=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)};class un extends f.default.Component{constructor(e){super(e),b(this,"translate",((e,t)=>this.props.t(e,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?sn(Object(r),!0).forEach((function(t){b(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):sn(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({lng:this.props.lang},t)))),b(this,"moveFavourite",((e,t)=>{const{favourites:r}=this.state,i=[...r],n=i[e+t];i[e+t]=i[e],i[e]=n,this.setState({favourites:i})})),b(this,"renderFavouriteListItem",((e,t)=>{let r="place";if(e.selectedIconId){const t=e.selectedIconId.indexOf("icon_");t>0&&(r=e.selectedIconId.substring(t+5))}const[i,n]=Yi(e.name,e.address);return f.default.createElement("li",{className:j(an["favourite-edit-list-item"]),key:e.favouriteId},f.default.createElement("div",{className:an["favourite-edit-list-item-left"]},t>0&&f.default.createElement("button",{className:an["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("up"),onClick:()=>{this.moveFavourite(t,-1)}},"↑"),t<this.state.favourites.length-1&&f.default.createElement("button",{className:an["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("down"),onClick:()=>{this.moveFavourite(t,1)}},"↓"),f.default.createElement("div",{className:an["favourite-edit-list-item-drag"]},f.default.createElement("div",{className:an["favourite-edit-list-item-ellipsis"]},f.default.createElement(p.default,{img:"ellipsis"}))),f.default.createElement("div",{className:j(an["favourite-edit-list-item-icon"],an[r])},f.default.createElement(p.default,{img:r,color:this.props.color}))),f.default.createElement("div",{className:an["favourite-edit-list-item-content"]},f.default.createElement("p",{className:an["favourite-edit-list-item-name"]},i),f.default.createElement("p",{className:an["favourite-edit-list-item-address"]},n)),f.default.createElement("div",{className:an["favourite-edit-list-item-right"]},f.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("edit-place-name",{favourite:e}),className:an["favourite-edit-list-item-edit"],onClick:()=>this.props.onEditSelected(e),onKeyDown:t=>{ln(t)&&this.props.onEditSelected(e)}},f.default.createElement(p.default,{img:"edit"})),f.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("delete-place-name",{favourite:e}),className:an["favourite-edit-list-item-remove"],onClick:()=>this.setState({selectedFavourite:e,showDeletePlaceModal:!0}),onKeyDown:t=>{ln(t)&&this.setState({selectedFavourite:e,showDeletePlaceModal:!0})}},f.default.createElement(p.default,{img:"trash"}))))})),b(this,"renderFavouriteList",(()=>{const{isLoading:e}=this.props,{favourites:t}=this.state;return f.default.createElement("div",{className:an["favourite-edit-list-container"]},f.default.createElement(v.default,{visible:e},f.default.createElement(n.ReactSortable,{className:an["favourite-edit-list"],tag:"ul",list:t,setList:e=>this.setState({favourites:e}),animation:200,handle:`.${an["favourite-edit-list-item-left"]}`},t.map(((e,t)=>this.renderFavouriteListItem(e,t))))))})),b(this,"renderDeleteFavouriteModal",(e=>f.default.createElement(h.default,{appElement:this.props.appElement,headerText:this.translate("delete-place-header"),handleClose:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1},(()=>this.props.handleClose())),isModalOpen:this.state.showDeletePlaceModal,dialogContent:e?`${e.name}: ${e.address}`:"",primaryButtonText:this.translate("delete"),primaryButtonOnClick:()=>{this.props.deleteFavourite(e),this.setState({selectedFavourite:null,showDeletePlaceModal:!1})},secondaryButtonText:this.translate("cancel"),secondaryButtonOnClick:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1}),color:this.props.color,hoverColor:this.props.hoverColor,fontWeights:this.props.fontWeights,lang:this.props.lang}))),b(this,"closeModal",(()=>{this.props.handleClose();const e=this.state.favourites.map((e=>Bi(e,["chosen","selected"])));Mr(e,this.props.favourites)||this.props.updateFavourites(e)})),b(this,"renderModalContent",(()=>{const{color:e,hoverColor:t,fontWeights:r}=this.props,i={headerText:this.translate("edit-places"),renderList:()=>this.renderFavouriteList()};return f.default.createElement("div",{style:{"--color":`${e}`,"--hover-color":`${t}`,"--font-weight-medium":r.medium}},f.default.createElement(nn,i))})),this.state={favourites:e.favourites,showDeletePlaceModal:!1,selectedFavourite:null}}static getDerivedStateFromProps(e,t){const r=e.favourites,i=t.favourites;return Fr(_t(r,i,Mr))&&Fr(_t(i,r,Mr))?null:(Fr(r)&&e.handleClose(),{favourites:r})}render(){const{isMobile:e}=this.props,{showDeletePlaceModal:t,selectedFavourite:r}=this.state;return f.default.createElement("div",null,e&&f.default.createElement(_.default,{appElement:this.props.appElement,contentLabel:this.translate("edit-modal-on-open"),closeButtonLabel:this.translate("close-modal"),variant:"large",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),this.renderModalContent()),!e&&f.default.createElement(_.default,{appElement:this.props.appElement,contentLabel:this.translate("edit-modal-on-open"),closeButtonLabel:this.translate("close-modal"),variant:"small",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),!t&&this.renderModalContent()))}}b(un,"defaultProps",{lang:"fi",isMobile:!1,color:"#007ac9",hoverColor:"#0062a1",fontWeights:{medium:500}}),"production"!==process.env.NODE_ENV&&(un.propTypes={handleClose:d.default.func.isRequired,updateFavourites:d.default.func.isRequired,deleteFavourite:d.default.func.isRequired,onEditSelected:d.default.func.isRequired,favourites:d.default.arrayOf(d.default.shape({type:d.default.string,address:d.default.string,gtfsId:d.default.string,gid:d.default.string,lat:d.default.number,lon:d.default.number,name:d.default.string,selectedIconId:d.default.string,favouriteId:d.default.string,layer:d.default.string})).isRequired,lang:d.default.string,t:d.default.func.isRequired,appElement:d.default.string.isRequired,isModalOpen:d.default.bool.isRequired,isMobile:d.default.bool,isLoading:d.default.bool.isRequired,color:d.default.string,hoverColor:d.default.string,fontWeights:d.default.shape({medium:d.default.number})});const cn=i.withTranslation()(un);e.default=e=>f.default.createElement(i.I18nextProvider,{i18n:on},f.default.createElement(cn,e)),Object.defineProperty(e,"__esModule",{value:!0})}));
8
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hTi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRGlmZmVyZW5jZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbGFzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VtcHR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVEYXRhVmlldy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVCeVRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVPYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19wYXJlbnQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jdXN0b21PbWl0Q2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jbG9uZURlZXAuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vZGFsQ29udGVudC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9oZWxwZXJzL2kxOG4uanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUlzTmFOID0gcmVxdWlyZSgnLi9fYmFzZUlzTmFOJyksXG4gICAgc3RyaWN0SW5kZXhPZiA9IHJlcXVpcmUoJy4vX3N0cmljdEluZGV4T2YnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW5kZXhPZjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGl0eTtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlT2JqZWN0O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsInZhciBiYXNlRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4vX2Jhc2VEaWZmZXJlbmNlJyksXG4gICAgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0FycmF5TGlrZU9iamVjdCA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2VPYmplY3QnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0Jyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kaWZmZXJlbmNlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBvcmRlciBhbmRcbiAqIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yXG4gKiBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxXaXRoYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAqXG4gKiBfLmRpZmZlcmVuY2VXaXRoKG9iamVjdHMsIFt7ICd4JzogMSwgJ3knOiAyIH1dLCBfLmlzRXF1YWwpO1xuICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfV1cbiAqL1xudmFyIGRpZmZlcmVuY2VXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICB2YXIgY29tcGFyYXRvciA9IGxhc3QodmFsdWVzKTtcbiAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGNvbXBhcmF0b3IpKSB7XG4gICAgY29tcGFyYXRvciA9IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICA6IFtdO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZmVyZW5jZVdpdGg7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVNvbWU7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxCeVRhZztcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwidmFyIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICpcbiAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICogcHJvcGVydGllcy5cbiAqXG4gKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbXB0eShudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkodHJ1ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUuc3BsaWNlID09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5zaXplO1xuICB9XG4gIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFbXB0eTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUVhY2g7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25JbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25JbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9sc0luO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzSW4oc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9sc0luO1xuIiwidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXNJbjtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQXJyYXk7XG4iLCJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAqL1xuZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURhdGFWaWV3O1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgcmVnZXhwLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xuICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVJlZ0V4cDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lU3ltYm9sO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyksXG4gICAgY2xvbmVEYXRhVmlldyA9IHJlcXVpcmUoJy4vX2Nsb25lRGF0YVZpZXcnKSxcbiAgICBjbG9uZVJlZ0V4cCA9IHJlcXVpcmUoJy4vX2Nsb25lUmVnRXhwJyksXG4gICAgY2xvbmVTeW1ib2wgPSByZXF1aXJlKCcuL19jbG9uZVN5bWJvbCcpLFxuICAgIGNsb25lVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Nsb25lVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVCeVRhZztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lT2JqZWN0O1xuIiwidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hcDtcbiIsInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzU2V0O1xuIiwidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbnZhciBjbG9uZWFibGVUYWdzID0ge307XG5jbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG5jbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9XG5jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbmNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbmNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG5jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICogdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBEZWVwIGNsb25lXG4gKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2spIHtcbiAgdmFyIHJlc3VsdCxcbiAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICBpc0ZsYXQgPSBiaXRtYXNrICYgQ0xPTkVfRkxBVF9GTEFHLFxuICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICBpZiAoY3VzdG9taXplcikge1xuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcbiAgfVxuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNBcnIpIHtcbiAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc0RlZXApIHtcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xuICAgIH1cbiAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICByZXN1bHQgPSAoaXNGbGF0IHx8IGlzRnVuYykgPyB7fSA6IGluaXRDbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgPyBjb3B5U3ltYm9sc0luKHZhbHVlLCBiYXNlQXNzaWduSW4ocmVzdWx0LCB2YWx1ZSkpXG4gICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUpO1xuICBpZiAoc3RhY2tlZCkge1xuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG4gIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSkge1xuICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc01hcCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleTtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgfVxuICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gIHN0YXJ0ID4+Pj0gMDtcblxuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2xpY2U7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IHZhbHVlIG9mLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcGFyZW50KG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbnNldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwidmFyIGZsYXR0ZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW4nKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdFJlc3Q7XG4iLCJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpLFxuICAgIGJhc2VVbnNldCA9IHJlcXVpcmUoJy4vX2Jhc2VVbnNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGN1c3RvbU9taXRDbG9uZSA9IHJlcXVpcmUoJy4vX2N1c3RvbU9taXRDbG9uZScpLFxuICAgIGZsYXRSZXN0ID0gcmVxdWlyZSgnLi9fZmxhdFJlc3QnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBwYXRocyBvZiBgb2JqZWN0YCB0aGF0IGFyZSBub3Qgb21pdHRlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBvbWl0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5vbWl0KG9iamVjdCwgWydhJywgJ2MnXSk7XG4gKiAvLyA9PiB7ICdiJzogJzInIH1cbiAqL1xudmFyIG9taXQgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gIHBhdGhzID0gYXJyYXlNYXAocGF0aHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0pO1xuICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXN1bHQgPSBiYXNlQ2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9taXQ7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgIHJlSGFzUmVnRXhwQ2hhciA9IFJlZ0V4cChyZVJlZ0V4cENoYXIuc291cmNlKTtcblxuLyoqXG4gKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gKiBcIj9cIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgYW5kIFwifFwiIGluIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgOiBzdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlUmVnRXhwO1xuIiwidmFyIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gKiBAc2VlIF8uY2xvbmVcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gKlxuICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTtcbiAqIGNvbnNvbGUubG9nKGRlZXBbMF0gPT09IG9iamVjdHNbMF0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlKSB7XG4gIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVEZWVwO1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsYWRtaW4gKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxhZG1pblxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGFkbWluID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VzdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGlmIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyXG4gICAgKTtcbiAgfSk7XG59XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vbW9kYWwtY29udGVudC5zY3NzJztcblxuY29uc3QgTW9kYWxDb250ZW50ID0gKHsgaGVhZGVyVGV4dCwgcmVuZGVyTGlzdCB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbW9kYWwtY29udGVudC1jb250YWluZXInXX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LXRvcCddfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbW9kYWwtY29udGVudC1oZWFkZXInXX0+XG4gICAgICAgICAge2hlYWRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7cmVuZGVyTGlzdCgpfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuTW9kYWxDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgaGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZW5kZXJMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxDb250ZW50O1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnV29sbGVuIFNpZSBkZW4gRmF2b3JpdGVuIGzDtnNjaGVuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnTMO2c2NoZSBGYXZvcml0OiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ0JlYXJiZWl0ZSBGYXZvcml0ZW4nLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdCZWFyYmVpdGUgRmF2b3JpdDoge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnRmF2b3JpdGVuIGJlYXJiZWl0ZW4uJyxcbiAgICAgICdjaG9vc2UtaWNvbic6ICdXw6RobGUgZGFzIFN5bWJvbCBmw7xyIGRpZXNlbiBPcnQnLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1NjaGxpZcOfZSBkZW4gRGlhbG9nJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdXw6RobGVuIFNpZSBlaW5lbiBOYW1lIGbDvHIgZGllc2VuIE9ydCAob3B0aW9uYWwpJyxcbiAgICAgIHNhdmU6ICdTcGVpY2hlcm4nLFxuICAgICAgJ3NhdmUtcGxhY2UnOiAnRmF2b3JpdCBzcGVpY2hlcm4nLFxuICAgIH0sXG4gIH0sXG4gIGVuOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoZSBwbGFjZT8nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ0RlbGV0ZSBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdFZGl0IHBsYWNlcycsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm91cml0ZSBlZGl0aW5nIG1vZGFsLicsXG4gICAgICAnY2hvb3NlLWljb24nOiBcIlNlbGVjdCB0aGUgcGxhY2UncyBpY29uXCIsXG4gICAgICAnY2xvc2UtbW9kYWwnOiAnQ2xvc2UgdGhlIG1vZGFsJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdHaXZlIHRoZSBuYW1lIGEgcGxhY2UgKG9wdGlvbmFsKScsXG4gICAgICBzYXZlOiAnU2F2ZScsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdTYXZlIHBsYWNlJyxcbiAgICAgIHVwOiAnTW92ZSBmYXZvdXJpdGUgdXAnLFxuICAgICAgZG93bjogJ01vdmUgZmF2b3VyaXRlIGRvd24nLFxuICAgIH0sXG4gIH0sXG4gIGZpOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0hhbHVhdGtvIHBvaXN0YWEgcGFpa2FuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnUG9pc3RhIHBhaWtrYToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdNdW9ra2FhIHBhaWtrb2phJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnTXVva2thYSBwYWlra2FhOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdTdW9zaWtraWVuIG11b2trYXVzIG1vZGFhbGkuJyxcbiAgICAgICdjaG9vc2UtaWNvbic6ICdWYWxpdHNlIHBhaWthbiBrdXZha2UnLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1N1bGplIG1vZGFhbGknLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ0FubmEgcGFpa2FsbGUgbmltaSAodmFwYWFlaHRvaW5lbiknLFxuICAgICAgc2F2ZTogJ1RhbGxlbm5hJyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1RhbGxlbm5hIHBhaWtrYScsXG4gICAgICB1cDogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgeWzDtnDDpGluJyxcbiAgICAgIGRvd246ICdTaWlycsOkIHN1b3Npa2tpc2lqYWludGlhIGFsYXNww6RpbicsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQW51bHVqJyxcbiAgICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0N6eSBuYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdG8gbWllanNjZT8nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ1VzdcWEIG1pZWpzY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnRWR5dHVqIG1pZWpzY2EnLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdFZHl0dWogbWllanNjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnTW9kYWwgZWR5Y2ppIHVsdWJpb255Y2guJyxcbiAgICAgICdjaG9vc2UtaWNvbic6ICdXeWJpZXJ6IGlrb27EmSBtaWVqc2NhJyxcbiAgICAgICdjbG9zZS1tb2RhbCc6ICdaYW1rbmlqIG1vZGFsJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdOYWRhaiBuYXp3xJkgbWllanNjdSAob3Bjam9uYWxuZSknLFxuICAgICAgc2F2ZTogJ1phcGlzeicsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdaYXBpc3ogbWllanNjZScsXG4gICAgICB1cDogJ1ByemVuaWXFmyB1bHViaW9uZSB3ecW8ZWonLFxuICAgICAgZG93bjogJ1ByemVuaWXFmyB1bHViaW9uZSBuacW8ZWonLFxuICAgIH0sXG4gIH0sXG4gIHN2OiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ1ZpbGwgZHUgdGEgYm9ydCBwbGF0c2VuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVGEgYm9ydCBwbGF0c2VuOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ1JlZGlnZXJhIHBsYXRzZXInLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdFZGl0IHBsYWNlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdGYXZvdXJpdGUgZWRpdGluZyBtb2RhbC4nLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1bDpGxqIHBsYXRzZW5zIGlrb24nLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1N0w6RuZyBtb2RhbGVuJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdBbmdlIHBsYXRzZW5zIG5hbW4gKGZyaXZpbGxpZ3QpJyxcbiAgICAgIHNhdmU6ICdTcGFyYScsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdTcGFyYSBwbGF0cycsXG4gICAgICB1cDogJ0ZseXR0YSBmYXZvcml0ZW4gdXBww6V0JyxcbiAgICAgIGRvd246ICdGbHl0dGEgZmF2b3JpdGVuIG5lZMOldCcsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiLyogZXNsaW50IHJlYWN0L2ZvcmJpZC1wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciwgd2l0aFRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBSZWFjdFNvcnRhYmxlIH0gZnJvbSAncmVhY3Qtc29ydGFibGVqcyc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgZGlmZmVyZW5jZVdpdGggZnJvbSAnbG9kYXNoL2RpZmZlcmVuY2VXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBvbWl0IGZyb20gJ2xvZGFzaC9vbWl0JztcbmltcG9ydCBDb250YWluZXJTcGlubmVyIGZyb20gJ0Boc2wtZmkvY29udGFpbmVyLXNwaW5uZXInO1xuaW1wb3J0IE1vZGFsIGZyb20gJ0Boc2wtZmkvbW9kYWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCB7IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgTW9kYWxDb250ZW50IGZyb20gJy4vaGVscGVycy9Nb2RhbENvbnRlbnQnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi9oZWxwZXJzL2kxOG4nO1xuXG5jb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuY2xhc3MgRmF2b3VyaXRlRWRpdGluZ01vZGFsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAvKiogUmVxdWlyZWQuIENsb3NlIG1vZGFsLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICBoYW5kbGVDbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAvKiogUmVxdWlyZWQuXG4gICAgICogQHR5cGUge2Z1bmN0aW9ufSAqL1xuICAgIHVwZGF0ZUZhdm91cml0ZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICBkZWxldGVGYXZvdXJpdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLiBGdW5jdGlvbiB0aGF0IHRha2VzIHNlbGVjdGVkIGZhdm91cml0ZSBvYmplY3QgYXMgcGFyYW1ldGVyLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICBvbkVkaXRTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAvKiogUmVxdWlyZWQuXG4gICAgICogQHR5cGUge2FycmF5PG9iamVjdD59XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzc1xuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBndGZzSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZ2lkXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGxhdFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb25cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZWxlY3RlZEljb25JZFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmYXZvdXJpdGVJZFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllclxuICAgICAqL1xuICAgIGZhdm91cml0ZXM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZ3Rmc0lkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBnaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBzZWxlY3RlZEljb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZmF2b3VyaXRlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGxheWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgfSksXG4gICAgKS5pc1JlcXVpcmVkLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgaXNNb2RhbE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKiBPcHRpb25hbC4gKi9cbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKiBEZWZhdWx0IHZhbHVlIGlzIDUwMC4gKi9cbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGxhbmc6ICdmaScsXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGNvbG9yOiAnIzAwN2FjOScsXG4gICAgaG92ZXJDb2xvcjogJyMwMDYyYTEnLFxuICAgIGZvbnRXZWlnaHRzOiB7XG4gICAgICBtZWRpdW06IDUwMCxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBmYXZvdXJpdGVzOiBwcm9wcy5mYXZvdXJpdGVzLFxuICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICBjb25zdCBuZXh0RmF2b3VyaXRlcyA9IG5leHRQcm9wcy5mYXZvdXJpdGVzO1xuICAgIGNvbnN0IHByZXZGYXZvdXJpdGVzID0gcHJldlN0YXRlLmZhdm91cml0ZXM7XG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkoZGlmZmVyZW5jZVdpdGgobmV4dEZhdm91cml0ZXMsIHByZXZGYXZvdXJpdGVzLCBpc0VxdWFsKSkgfHxcbiAgICAgICFpc0VtcHR5KGRpZmZlcmVuY2VXaXRoKHByZXZGYXZvdXJpdGVzLCBuZXh0RmF2b3VyaXRlcywgaXNFcXVhbCkpXG4gICAgKSB7XG4gICAgICBpZiAoaXNFbXB0eShuZXh0RmF2b3VyaXRlcykpIHtcbiAgICAgICAgbmV4dFByb3BzLmhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmYXZvdXJpdGVzOiBuZXh0RmF2b3VyaXRlcyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJhbnNsYXRlID0gKGlkLCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudChpZCwge1xuICAgICAgbG5nOiB0aGlzLnByb3BzLmxhbmcsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9O1xuXG4gIG1vdmVGYXZvdXJpdGUgPSAoaSwgZGlyZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBmYXZvdXJpdGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIC8vIEVkaXQgY29weSBvZiB0aGUgZmF2b3VyaXRlcyB0byBhdm9pZCBjaGFuZ2luZyB0aGUgcHJvcHMuZmF2b3VyaXRlcyB1c2VkIGZvciBzdGF0ZSBpbml0aWFsaXphdGlvblxuICAgIGNvbnN0IGZhdm91cml0ZXNDb3B5ID0gWy4uLmZhdm91cml0ZXNdO1xuXG4gICAgY29uc3QgdG1wID0gZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl07XG4gICAgZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl0gPSBmYXZvdXJpdGVzQ29weVtpXTtcbiAgICBmYXZvdXJpdGVzQ29weVtpXSA9IHRtcDtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBmYXZvdXJpdGVzOiBmYXZvdXJpdGVzQ29weSB9KTtcbiAgfTtcblxuICByZW5kZXJGYXZvdXJpdGVMaXN0SXRlbSA9IChmYXZvdXJpdGUsIGluZGV4KSA9PiB7XG4gICAgbGV0IGljb25JZCA9ICdwbGFjZSc7XG4gICAgaWYgKGZhdm91cml0ZS5zZWxlY3RlZEljb25JZCkge1xuICAgICAgY29uc3QgcHJlZml4UG9zID0gZmF2b3VyaXRlLnNlbGVjdGVkSWNvbklkLmluZGV4T2YoJ2ljb25fJyk7XG4gICAgICBpZiAocHJlZml4UG9zID4gMCkge1xuICAgICAgICBpY29uSWQgPSBmYXZvdXJpdGUuc2VsZWN0ZWRJY29uSWQuc3Vic3RyaW5nKHByZWZpeFBvcyArIDUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBbbmFtZSwgYWRkcmVzc10gPSBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKFxuICAgICAgZmF2b3VyaXRlLm5hbWUsXG4gICAgICBmYXZvdXJpdGUuYWRkcmVzcyxcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsaVxuICAgICAgICBjbGFzc05hbWU9e2N4KHN0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtJ10pfVxuICAgICAgICBrZXk9e2Zhdm91cml0ZS5mYXZvdXJpdGVJZH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWxlZnQnXX0+XG4gICAgICAgICAge2luZGV4ID4gMCAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWFycm93LWhpZGRlbiddfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy50cmFuc2xhdGUoJ3VwJyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVGYXZvdXJpdGUoaW5kZXgsIC0xKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJnVhcnI7XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpbmRleCA8IHRoaXMuc3RhdGUuZmF2b3VyaXRlcy5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtYXJyb3ctaGlkZGVuJ119XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZG93bicpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRmF2b3VyaXRlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJmRhcnI7XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1kcmFnJ119PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWVsbGlwc2lzJ119PlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJlbGxpcHNpc1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgICAgICBzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1pY29uJ10sXG4gICAgICAgICAgICAgIHN0eWxlc1tpY29uSWRdLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2ljb25JZH0gY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tY29udGVudCddfT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLW5hbWUnXX0+e25hbWV9PC9wPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tYWRkcmVzcyddfT5cbiAgICAgICAgICAgIHthZGRyZXNzfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1yaWdodCddfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZWRpdC1wbGFjZS1uYW1lJywge1xuICAgICAgICAgICAgICBmYXZvdXJpdGUsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tZWRpdCddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vbkVkaXRTZWxlY3RlZChmYXZvdXJpdGUpfVxuICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25FZGl0U2VsZWN0ZWQoZmF2b3VyaXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9XCJlZGl0XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZGVsZXRlLXBsYWNlLW5hbWUnLCB7XG4gICAgICAgICAgICAgIGZhdm91cml0ZSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1yZW1vdmUnXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBmYXZvdXJpdGUsXG4gICAgICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IHRydWUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZTogZmF2b3VyaXRlLFxuICAgICAgICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwidHJhc2hcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJGYXZvdXJpdGVMaXN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgaXNMb2FkaW5nIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZmF2b3VyaXRlcyB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1jb250YWluZXInXX0+XG4gICAgICAgIDxDb250YWluZXJTcGlubmVyIHZpc2libGU9e2lzTG9hZGluZ30+XG4gICAgICAgICAgPFJlYWN0U29ydGFibGVcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0J119XG4gICAgICAgICAgICB0YWc9XCJ1bFwiXG4gICAgICAgICAgICBsaXN0PXtmYXZvdXJpdGVzfVxuICAgICAgICAgICAgc2V0TGlzdD17aXRlbXMgPT4gdGhpcy5zZXRTdGF0ZSh7IGZhdm91cml0ZXM6IGl0ZW1zIH0pfVxuICAgICAgICAgICAgYW5pbWF0aW9uPXsyMDB9XG4gICAgICAgICAgICBoYW5kbGU9e2AuJHtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1sZWZ0J119YH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZmF2b3VyaXRlcy5tYXAoKGZhdm91cml0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRmF2b3VyaXRlTGlzdEl0ZW0oZmF2b3VyaXRlLCBpbmRleCk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1JlYWN0U29ydGFibGU+XG4gICAgICAgIDwvQ29udGFpbmVyU3Bpbm5lcj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRGVsZXRlRmF2b3VyaXRlTW9kYWwgPSBmYXZvdXJpdGUgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICBoZWFkZXJUZXh0PXt0aGlzLnRyYW5zbGF0ZSgnZGVsZXRlLXBsYWNlLWhlYWRlcicpfVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgeyBzZWxlY3RlZEZhdm91cml0ZTogbnVsbCwgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlIH0sXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnByb3BzLmhhbmRsZUNsb3NlKCksXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlzTW9kYWxPcGVuPXt0aGlzLnN0YXRlLnNob3dEZWxldGVQbGFjZU1vZGFsfVxuICAgICAgICBkaWFsb2dDb250ZW50PXtcbiAgICAgICAgICBmYXZvdXJpdGUgPyBgJHtmYXZvdXJpdGUubmFtZX06ICR7ZmF2b3VyaXRlLmFkZHJlc3N9YCA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e3RoaXMudHJhbnNsYXRlKCdkZWxldGUnKX1cbiAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLnByb3BzLmRlbGV0ZUZhdm91cml0ZShmYXZvdXJpdGUpO1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH19XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvblRleHQ9e3RoaXMudHJhbnNsYXRlKCdjYW5jZWwnKX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17KCkgPT5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLFxuICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgIGxhbmc9e3RoaXMucHJvcHMubGFuZ31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjbG9zZU1vZGFsID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuaGFuZGxlQ2xvc2UoKTtcbiAgICBjb25zdCBvbWl0dGVkRmF2b3VyaXRlcyA9IHRoaXMuc3RhdGUuZmF2b3VyaXRlcy5tYXAoaXRlbSA9PlxuICAgICAgb21pdChpdGVtLCBbJ2Nob3NlbicsICdzZWxlY3RlZCddKSxcbiAgICApO1xuICAgIGlmICghaXNFcXVhbChvbWl0dGVkRmF2b3VyaXRlcywgdGhpcy5wcm9wcy5mYXZvdXJpdGVzKSkge1xuICAgICAgdGhpcy5wcm9wcy51cGRhdGVGYXZvdXJpdGVzKG9taXR0ZWRGYXZvdXJpdGVzKTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyTW9kYWxDb250ZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29sb3IsIGhvdmVyQ29sb3IsIGZvbnRXZWlnaHRzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1vZGFsUHJvcHMgPSB7XG4gICAgICBoZWFkZXJUZXh0OiB0aGlzLnRyYW5zbGF0ZSgnZWRpdC1wbGFjZXMnKSxcbiAgICAgIHJlbmRlckxpc3Q6ICgpID0+IHRoaXMucmVuZGVyRmF2b3VyaXRlTGlzdCgpLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGAke2NvbG9yfWAsXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHtob3ZlckNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8TW9kYWxDb250ZW50IHsuLi5tb2RhbFByb3BzfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc01vYmlsZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNob3dEZWxldGVQbGFjZU1vZGFsLCBzZWxlY3RlZEZhdm91cml0ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9kYWxcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNvbnRlbnRMYWJlbD17dGhpcy50cmFuc2xhdGUoJ2VkaXQtbW9kYWwtb24tb3BlbicpfVxuICAgICAgICAgICAgY2xvc2VCdXR0b25MYWJlbD17dGhpcy50cmFuc2xhdGUoJ2Nsb3NlLW1vZGFsJyl9XG4gICAgICAgICAgICB2YXJpYW50PVwibGFyZ2VcIlxuICAgICAgICAgICAgaXNPcGVuPXt0aGlzLnByb3BzLmlzTW9kYWxPcGVufVxuICAgICAgICAgICAgb25Dcm9zc0NsaWNrPXt0aGlzLmNsb3NlTW9kYWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyRGVsZXRlRmF2b3VyaXRlTW9kYWwoc2VsZWN0ZWRGYXZvdXJpdGUpfVxuICAgICAgICAgICAge3RoaXMucmVuZGVyTW9kYWxDb250ZW50KCl9XG4gICAgICAgICAgPC9Nb2RhbD5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc01vYmlsZSAmJiAoXG4gICAgICAgICAgPE1vZGFsXG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBjb250ZW50TGFiZWw9e3RoaXMudHJhbnNsYXRlKCdlZGl0LW1vZGFsLW9uLW9wZW4nKX1cbiAgICAgICAgICAgIGNsb3NlQnV0dG9uTGFiZWw9e3RoaXMudHJhbnNsYXRlKCdjbG9zZS1tb2RhbCcpfVxuICAgICAgICAgICAgdmFyaWFudD1cInNtYWxsXCJcbiAgICAgICAgICAgIGlzT3Blbj17dGhpcy5wcm9wcy5pc01vZGFsT3Blbn1cbiAgICAgICAgICAgIG9uQ3Jvc3NDbGljaz17dGhpcy5jbG9zZU1vZGFsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckRlbGV0ZUZhdm91cml0ZU1vZGFsKHNlbGVjdGVkRmF2b3VyaXRlKX1cbiAgICAgICAgICAgIHshc2hvd0RlbGV0ZVBsYWNlTW9kYWwgJiYgdGhpcy5yZW5kZXJNb2RhbENvbnRlbnQoKX1cbiAgICAgICAgICA8L01vZGFsPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBGYXZvdXJpdGVFZGl0aW5nTW9kYWxXaXRoVHJhbnNsYXRpb24gPSB3aXRoVHJhbnNsYXRpb24oKShcbiAgRmF2b3VyaXRlRWRpdGluZ01vZGFsLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgcHJvcHMgPT4gKFxuICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgIDxGYXZvdXJpdGVFZGl0aW5nTW9kYWxXaXRoVHJhbnNsYXRpb24gey4uLnByb3BzfSAvPlxuICA8L0kxOG5leHRQcm92aWRlcj5cbik7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjbGFzc05hbWVzIiwiY2xhc3NlcyIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImFwcGx5IiwidG9TdHJpbmciLCJpbmNsdWRlcyIsImtleSIsIm5ld0NsYXNzIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiLCJ3aW5kb3ciLCJfZnJlZUdsb2JhbCIsImdsb2JhbCIsImZyZWVTZWxmIiwic2VsZiIsIl9yb290IiwiZnJlZUdsb2JhbCIsIkZ1bmN0aW9uIiwiX1N5bWJvbCIsInJvb3QiLCJvYmplY3RQcm90byIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJ0b1N0cmluZ1RhZyIsInVuZGVmaW5lZCIsIl9nZXRSYXdUYWciLCJpc093biIsInRhZyIsInVubWFza2VkIiwicmVzdWx0IiwiX29iamVjdFRvU3RyaW5nIiwiX2Jhc2VHZXRUYWciLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImlzT2JqZWN0XzEiLCJ0eXBlIiwidWlkIiwiaXNGdW5jdGlvbl8xIiwiaXNPYmplY3QiLCJiYXNlR2V0VGFnIiwiX2NvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiZXhlYyIsImNvcmVKc0RhdGEiLCJrZXlzIiwiSUVfUFJPVE8iLCJfaXNNYXNrZWQiLCJmdW5jIiwiZnVuY1RvU3RyaW5nIiwiX3RvU291cmNlIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwicmVJc05hdGl2ZSIsIlJlZ0V4cCIsInJlcGxhY2UiLCJfYmFzZUlzTmF0aXZlIiwiaXNNYXNrZWQiLCJpc0Z1bmN0aW9uIiwidGVzdCIsInRvU291cmNlIiwiX2dldFZhbHVlIiwib2JqZWN0IiwiX2dldE5hdGl2ZSIsImdldFZhbHVlIiwiYmFzZUlzTmF0aXZlIiwiX25hdGl2ZUNyZWF0ZSIsImdldE5hdGl2ZSIsIl9oYXNoQ2xlYXIiLCJ0aGlzIiwiX19kYXRhX18iLCJuYXRpdmVDcmVhdGUiLCJzaXplIiwiX2hhc2hEZWxldGUiLCJoYXMiLCJfaGFzaEdldCIsImRhdGEiLCJfaGFzaEhhcyIsIl9oYXNoU2V0IiwiSGFzaCIsImVudHJpZXMiLCJpbmRleCIsImNsZWFyIiwiZW50cnkiLCJzZXQiLCJoYXNoQ2xlYXIiLCJoYXNoRGVsZXRlIiwiZ2V0IiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiX0hhc2giLCJfbGlzdENhY2hlQ2xlYXIiLCJlcV8xIiwib3RoZXIiLCJfYXNzb2NJbmRleE9mIiwiYXJyYXkiLCJlcSIsInNwbGljZSIsIl9saXN0Q2FjaGVEZWxldGUiLCJhc3NvY0luZGV4T2YiLCJwb3AiLCJfbGlzdENhY2hlR2V0IiwiX2xpc3RDYWNoZUhhcyIsIl9saXN0Q2FjaGVTZXQiLCJwdXNoIiwiTGlzdENhY2hlIiwibGlzdENhY2hlQ2xlYXIiLCJsaXN0Q2FjaGVEZWxldGUiLCJsaXN0Q2FjaGVHZXQiLCJsaXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJfTGlzdENhY2hlIiwiX01hcCIsIl9tYXBDYWNoZUNsZWFyIiwiaGFzaCIsIm1hcCIsIk1hcCIsInN0cmluZyIsIl9pc0tleWFibGUiLCJfZ2V0TWFwRGF0YSIsImlzS2V5YWJsZSIsIl9tYXBDYWNoZURlbGV0ZSIsImdldE1hcERhdGEiLCJfbWFwQ2FjaGVHZXQiLCJfbWFwQ2FjaGVIYXMiLCJfbWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsIm1hcENhY2hlQ2xlYXIiLCJtYXBDYWNoZURlbGV0ZSIsIm1hcENhY2hlR2V0IiwibWFwQ2FjaGVIYXMiLCJtYXBDYWNoZVNldCIsIl9NYXBDYWNoZSIsIl9zZXRDYWNoZUFkZCIsIl9zZXRDYWNoZUhhcyIsIlNldENhY2hlIiwidmFsdWVzIiwiYWRkIiwic2V0Q2FjaGVBZGQiLCJzZXRDYWNoZUhhcyIsIl9TZXRDYWNoZSIsIl9iYXNlRmluZEluZGV4IiwicHJlZGljYXRlIiwiZnJvbUluZGV4IiwiZnJvbVJpZ2h0IiwiX2Jhc2VJc05hTiIsIl9zdHJpY3RJbmRleE9mIiwiX2Jhc2VJbmRleE9mIiwic3RyaWN0SW5kZXhPZiIsImJhc2VGaW5kSW5kZXgiLCJiYXNlSXNOYU4iLCJfYXJyYXlJbmNsdWRlcyIsImJhc2VJbmRleE9mIiwiX2FycmF5SW5jbHVkZXNXaXRoIiwiY29tcGFyYXRvciIsIl9hcnJheU1hcCIsIml0ZXJhdGVlIiwiX2Jhc2VVbmFyeSIsIl9jYWNoZUhhcyIsImNhY2hlIiwiX2Jhc2VEaWZmZXJlbmNlIiwiYXJyYXlJbmNsdWRlcyIsImlzQ29tbW9uIiwidmFsdWVzTGVuZ3RoIiwiYXJyYXlNYXAiLCJiYXNlVW5hcnkiLCJhcnJheUluY2x1ZGVzV2l0aCIsImNhY2hlSGFzIiwib3V0ZXIiLCJjb21wdXRlZCIsInZhbHVlc0luZGV4IiwiX2FycmF5UHVzaCIsIm9mZnNldCIsImlzT2JqZWN0TGlrZV8xIiwiX2Jhc2VJc0FyZ3VtZW50cyIsImlzT2JqZWN0TGlrZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaXNBcmd1bWVudHMiLCJiYXNlSXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50c18xIiwiaXNBcnJheV8xIiwic3ByZWFkYWJsZVN5bWJvbCIsImlzQ29uY2F0U3ByZWFkYWJsZSIsIl9pc0ZsYXR0ZW5hYmxlIiwiX2Jhc2VGbGF0dGVuIiwiYmFzZUZsYXR0ZW4iLCJkZXB0aCIsImlzU3RyaWN0IiwiaXNGbGF0dGVuYWJsZSIsImFycmF5UHVzaCIsImlkZW50aXR5XzEiLCJfYXBwbHkiLCJ0aGlzQXJnIiwiYXJncyIsIm5hdGl2ZU1heCIsIk1hdGgiLCJtYXgiLCJfb3ZlclJlc3QiLCJzdGFydCIsInRyYW5zZm9ybSIsIm90aGVyQXJncyIsImNvbnN0YW50XzEiLCJfYmFzZVNldFRvU3RyaW5nIiwiY29uc3RhbnQiLCJpZGVudGl0eSIsIm5hdGl2ZU5vdyIsIkRhdGUiLCJub3ciLCJfc2hvcnRPdXQiLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsIl9zZXRUb1N0cmluZyIsInNob3J0T3V0IiwiYmFzZVNldFRvU3RyaW5nIiwiaXNMZW5ndGhfMSIsImlzQXJyYXlMaWtlXzEiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlT2JqZWN0XzEiLCJpc0FycmF5TGlrZSIsImxhc3RfMSIsImRpZmZlcmVuY2VXaXRoXzEiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiYmFzZVJlc3QiLCJsYXN0IiwiaXNBcnJheUxpa2VPYmplY3QiLCJiYXNlRGlmZmVyZW5jZSIsIl9zdGFja0NsZWFyIiwiX3N0YWNrRGVsZXRlIiwiX3N0YWNrR2V0IiwiX3N0YWNrSGFzIiwiX3N0YWNrU2V0IiwicGFpcnMiLCJMQVJHRV9BUlJBWV9TSVpFIiwiU3RhY2siLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwic3RhY2tTZXQiLCJfU3RhY2siLCJfYXJyYXlTb21lIiwiX2VxdWFsQXJyYXlzIiwiYml0bWFzayIsImN1c3RvbWl6ZXIiLCJlcXVhbEZ1bmMiLCJzdGFjayIsImlzUGFydGlhbCIsImFyckxlbmd0aCIsIm90aExlbmd0aCIsImFyclN0YWNrZWQiLCJvdGhTdGFja2VkIiwic2VlbiIsImFyclZhbHVlIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsImFycmF5U29tZSIsIm90aEluZGV4IiwiX1VpbnQ4QXJyYXkiLCJVaW50OEFycmF5IiwiX21hcFRvQXJyYXkiLCJmb3JFYWNoIiwiX3NldFRvQXJyYXkiLCJzeW1ib2xQcm90byIsInN5bWJvbFZhbHVlT2YiLCJ2YWx1ZU9mIiwiX2VxdWFsQnlUYWciLCJieXRlTGVuZ3RoIiwiYnl0ZU9mZnNldCIsImJ1ZmZlciIsIm5hbWUiLCJtZXNzYWdlIiwiY29udmVydCIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5Iiwic3RhY2tlZCIsImVxdWFsQXJyYXlzIiwiX2Jhc2VHZXRBbGxLZXlzIiwia2V5c0Z1bmMiLCJzeW1ib2xzRnVuYyIsIl9hcnJheUZpbHRlciIsInJlc0luZGV4Iiwic3R1YkFycmF5XzEiLCJuYXRpdmVHZXRTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiX2dldFN5bWJvbHMiLCJhcnJheUZpbHRlciIsInN5bWJvbCIsInN0dWJBcnJheSIsIl9iYXNlVGltZXMiLCJuIiwic3R1YkZhbHNlXzEiLCJmcmVlRXhwb3J0cyIsIm5vZGVUeXBlIiwiZnJlZU1vZHVsZSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwic3R1YkZhbHNlIiwicmVJc1VpbnQiLCJfaXNJbmRleCIsInR5cGVkQXJyYXlUYWdzIiwiX2Jhc2VJc1R5cGVkQXJyYXkiLCJmcmVlUHJvY2VzcyIsInByb2Nlc3MiLCJub2RlVXRpbCIsInR5cGVzIiwicmVxdWlyZSIsImJpbmRpbmciLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5XzEiLCJiYXNlSXNUeXBlZEFycmF5IiwiX2FycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiX2lzUHJvdG90eXBlIiwiQ3RvciIsIl9vdmVyQXJnIiwiX25hdGl2ZUtleXMiLCJvdmVyQXJnIiwiX2Jhc2VLZXlzIiwiaXNQcm90b3R5cGUiLCJuYXRpdmVLZXlzIiwia2V5c18xIiwiYXJyYXlMaWtlS2V5cyIsImJhc2VLZXlzIiwiX2dldEFsbEtleXMiLCJiYXNlR2V0QWxsS2V5cyIsImdldFN5bWJvbHMiLCJfZXF1YWxPYmplY3RzIiwib2JqUHJvcHMiLCJnZXRBbGxLZXlzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsInNraXBDdG9yIiwib2JqVmFsdWUiLCJvYmpDdG9yIiwib3RoQ3RvciIsIl9EYXRhVmlldyIsIl9Qcm9taXNlIiwiX1NldCIsIl9XZWFrTWFwIiwibWFwVGFnIiwicHJvbWlzZVRhZyIsInNldFRhZyIsIndlYWtNYXBUYWciLCJkYXRhVmlld1RhZyIsImRhdGFWaWV3Q3RvclN0cmluZyIsIkRhdGFWaWV3IiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwiUHJvbWlzZSIsInNldEN0b3JTdHJpbmciLCJTZXQiLCJ3ZWFrTWFwQ3RvclN0cmluZyIsIldlYWtNYXAiLCJnZXRUYWciLCJBcnJheUJ1ZmZlciIsInJlc29sdmUiLCJjdG9yU3RyaW5nIiwiX2dldFRhZyIsImFyZ3NUYWciLCJhcnJheVRhZyIsIm9iamVjdFRhZyIsIl9iYXNlSXNFcXVhbERlZXAiLCJvYmpJc0FyciIsIm90aElzQXJyIiwib2JqVGFnIiwib3RoVGFnIiwib2JqSXNPYmoiLCJvdGhJc09iaiIsImlzU2FtZVRhZyIsImVxdWFsQnlUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJlcXVhbE9iamVjdHMiLCJfYmFzZUlzRXF1YWwiLCJiYXNlSXNFcXVhbCIsImJhc2VJc0VxdWFsRGVlcCIsImlzRXF1YWxfMSIsImlzRW1wdHlfMSIsIl9hcnJheUVhY2giLCJfYmFzZUFzc2lnblZhbHVlIiwiX2Fzc2lnblZhbHVlIiwiYmFzZUFzc2lnblZhbHVlIiwiX2NvcHlPYmplY3QiLCJzb3VyY2UiLCJwcm9wcyIsImlzTmV3IiwibmV3VmFsdWUiLCJhc3NpZ25WYWx1ZSIsIl9iYXNlQXNzaWduIiwiY29weU9iamVjdCIsIl9uYXRpdmVLZXlzSW4iLCJfYmFzZUtleXNJbiIsIm5hdGl2ZUtleXNJbiIsImlzUHJvdG8iLCJrZXlzSW5fMSIsImJhc2VLZXlzSW4iLCJfYmFzZUFzc2lnbkluIiwia2V5c0luIiwiYWxsb2NVbnNhZmUiLCJpc0RlZXAiLCJzbGljZSIsImNvcHkiLCJfY29weUFycmF5IiwiX2NvcHlTeW1ib2xzIiwiX2dldFByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwiX2dldFN5bWJvbHNJbiIsImdldFByb3RvdHlwZSIsIl9jb3B5U3ltYm9sc0luIiwiZ2V0U3ltYm9sc0luIiwiX2dldEFsbEtleXNJbiIsIl9pbml0Q2xvbmVBcnJheSIsImlucHV0IiwiX2Nsb25lQXJyYXlCdWZmZXIiLCJhcnJheUJ1ZmZlciIsIl9jbG9uZURhdGFWaWV3IiwiZGF0YVZpZXciLCJjbG9uZUFycmF5QnVmZmVyIiwicmVGbGFncyIsIl9jbG9uZVJlZ0V4cCIsInJlZ2V4cCIsImxhc3RJbmRleCIsIl9jbG9uZVN5bWJvbCIsIl9jbG9uZVR5cGVkQXJyYXkiLCJ0eXBlZEFycmF5IiwiX2luaXRDbG9uZUJ5VGFnIiwiY2xvbmVEYXRhVmlldyIsImNsb25lVHlwZWRBcnJheSIsImNsb25lUmVnRXhwIiwiY2xvbmVTeW1ib2wiLCJvYmplY3RDcmVhdGUiLCJjcmVhdGUiLCJfYmFzZUNyZWF0ZSIsInByb3RvIiwiX2luaXRDbG9uZU9iamVjdCIsImJhc2VDcmVhdGUiLCJfYmFzZUlzTWFwIiwibm9kZUlzTWFwIiwiaXNNYXAiLCJpc01hcF8xIiwiYmFzZUlzTWFwIiwiX2Jhc2VJc1NldCIsIm5vZGVJc1NldCIsImlzU2V0IiwiaXNTZXRfMSIsImJhc2VJc1NldCIsImZ1bmNUYWciLCJjbG9uZWFibGVUYWdzIiwiX2Jhc2VDbG9uZSIsImJhc2VDbG9uZSIsImlzRmxhdCIsImlzRnVsbCIsImluaXRDbG9uZUFycmF5IiwiY29weUFycmF5IiwiaXNGdW5jIiwiY2xvbmVCdWZmZXIiLCJpbml0Q2xvbmVPYmplY3QiLCJjb3B5U3ltYm9sc0luIiwiYmFzZUFzc2lnbkluIiwiY29weVN5bWJvbHMiLCJiYXNlQXNzaWduIiwiaW5pdENsb25lQnlUYWciLCJzdWJWYWx1ZSIsImdldEFsbEtleXNJbiIsImFycmF5RWFjaCIsImlzU3ltYm9sXzEiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwiX2lzS2V5IiwiaXNTeW1ib2wiLCJtZW1vaXplIiwicmVzb2x2ZXIiLCJtZW1vaXplZCIsIkNhY2hlIiwibWVtb2l6ZV8xIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsIl9zdHJpbmdUb1BhdGgiLCJtZW1vaXplQ2FwcGVkIiwiY2hhckNvZGVBdCIsIm1hdGNoIiwibnVtYmVyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJzeW1ib2xUb1N0cmluZyIsIl9iYXNlVG9TdHJpbmciLCJiYXNlVG9TdHJpbmciLCJ0b1N0cmluZ18xIiwiX2Nhc3RQYXRoIiwiaXNLZXkiLCJzdHJpbmdUb1BhdGgiLCJfdG9LZXkiLCJfYmFzZUdldCIsInBhdGgiLCJjYXN0UGF0aCIsInRvS2V5IiwiX2Jhc2VTbGljZSIsImVuZCIsIl9wYXJlbnQiLCJiYXNlR2V0IiwiYmFzZVNsaWNlIiwiX2Jhc2VVbnNldCIsInBhcmVudCIsIm9iamVjdEN0b3JTdHJpbmciLCJpc1BsYWluT2JqZWN0XzEiLCJfY3VzdG9tT21pdENsb25lIiwiaXNQbGFpbk9iamVjdCIsImZsYXR0ZW5fMSIsIm9taXRfMSIsImZsYXR0ZW4iLCJmbGF0UmVzdCIsInBhdGhzIiwiQ0xPTkVfREVFUF9GTEFHIiwiY3VzdG9tT21pdENsb25lIiwiYmFzZVVuc2V0IiwicmVSZWdFeHBDaGFyIiwicmVIYXNSZWdFeHBDaGFyIiwiZXNjYXBlUmVnRXhwXzEiLCJjbG9uZURlZXBfMSIsImdldExvY2FsYWRtaW4iLCJzdWdnZXN0aW9uIiwibG9jYWxhZG1pbiIsImFkZHJlc3MiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImdldFN0b3BDb2RlIiwiaWQiLCJjb2RlIiwiaW5kZXhPZiIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJzcGxpdCIsImVzY2FwZVJlZ0V4cCIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJwbGFpbiIsImxheWVyIiwibGFiZWxJZCIsInNob3J0TmFtZSIsImd0ZnNJZCIsIm1vZGUiLCJ0b0xvd2VyQ2FzZSIsImxvbmdOYW1lIiwiYWdlbmN5IiwibGFiZWwiLCJpdGVtIiwiY2xvbmVEZWVwIiwiTW9kYWxDb250ZW50IiwiaGVhZGVyVGV4dCIsInJlbmRlckxpc3QiLCJSZWFjdCIsImNsYXNzTmFtZSIsInN0eWxlcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsImkxOG4iLCJjcmVhdGVJbnN0YW5jZSIsImZhbGxiYWNrTG5nIiwicmVzb3VyY2VzIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImNhbmNlbCIsImRlbGV0ZSIsInNhdmUiLCJlbiIsInVwIiwiZG93biIsImZpIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJ3aGljaCIsImtleUNvZGUiLCJjb25jYXQiLCJwcmV2ZW50RGVmYXVsdCIsIkZhdm91cml0ZUVkaXRpbmdNb2RhbCIsIkNvbXBvbmVudCIsInN1cGVyIiwib3B0aW9ucyIsIl9vYmplY3RTcHJlYWQiLCJsbmciLCJsYW5nIiwiZGlyZWN0aW9uIiwiZmF2b3VyaXRlcyIsInN0YXRlIiwiZmF2b3VyaXRlc0NvcHkiLCJ0bXAiLCJzZXRTdGF0ZSIsImZhdm91cml0ZSIsImljb25JZCIsInNlbGVjdGVkSWNvbklkIiwicHJlZml4UG9zIiwiY3giLCJmYXZvdXJpdGVJZCIsInRyYW5zbGF0ZSIsIm9uQ2xpY2siLCJtb3ZlRmF2b3VyaXRlIiwiSWNvbiIsImltZyIsImNvbG9yIiwicm9sZSIsInRhYkluZGV4Iiwib25FZGl0U2VsZWN0ZWQiLCJvbktleURvd24iLCJzZWxlY3RlZEZhdm91cml0ZSIsInNob3dEZWxldGVQbGFjZU1vZGFsIiwiaXNMb2FkaW5nIiwiQ29udGFpbmVyU3Bpbm5lciIsInZpc2libGUiLCJSZWFjdFNvcnRhYmxlIiwibGlzdCIsInNldExpc3QiLCJpdGVtcyIsImFuaW1hdGlvbiIsImhhbmRsZSIsInJlbmRlckZhdm91cml0ZUxpc3RJdGVtIiwiRGlhbG9nTW9kYWwiLCJhcHBFbGVtZW50IiwiaGFuZGxlQ2xvc2UiLCJpc01vZGFsT3BlbiIsImRpYWxvZ0NvbnRlbnQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwiZGVsZXRlRmF2b3VyaXRlIiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJob3ZlckNvbG9yIiwiZm9udFdlaWdodHMiLCJvbWl0dGVkRmF2b3VyaXRlcyIsIm9taXQiLCJpc0VxdWFsIiwidXBkYXRlRmF2b3VyaXRlcyIsIm1vZGFsUHJvcHMiLCJyZW5kZXJGYXZvdXJpdGVMaXN0IiwibWVkaXVtIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwicHJldlN0YXRlIiwibmV4dEZhdm91cml0ZXMiLCJwcmV2RmF2b3VyaXRlcyIsImlzRW1wdHkiLCJkaWZmZXJlbmNlV2l0aCIsInJlbmRlciIsImlzTW9iaWxlIiwiTW9kYWwiLCJjb250ZW50TGFiZWwiLCJjbG9zZUJ1dHRvbkxhYmVsIiwidmFyaWFudCIsImlzT3BlbiIsIm9uQ3Jvc3NDbGljayIsImNsb3NlTW9kYWwiLCJyZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbCIsInJlbmRlck1vZGFsQ29udGVudCIsImFycmF5T2YiLCJzaGFwZSIsImdpZCIsImxhdCIsImxvbiIsImJvb2wiLCJGYXZvdXJpdGVFZGl0aW5nTW9kYWxXaXRoVHJhbnNsYXRpb24iLCJ3aXRoVHJhbnNsYXRpb24iLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiJtakNBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0EsR0FBSyxtQkFBcUJDLFFBQVVELEVBQUVHLGNBQWdCRixRQUFVRCxJQUFNQyxPQUFPRyxVQUFZLGdCQUFrQkosQ0FDdEgsRUFBS0QsRUFBUUMsRUFDYixDQ05BLFNBQVNLLEVBQWNDLEdBQ3JCLElBQUlDLEVDRk4sU0FBcUJELEVBQUdFLEdBQ3RCLEdBQUksVUFBWVQsRUFBUU8sS0FBT0EsRUFBRyxPQUFPQSxFQUN6QyxJQUFJRyxFQUFJ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
6
+ */var x,S,O,M,E,F,N,P,I,A,V,k,D,z,C,Z,T,R,H,L,J,q,B,U,Q,$,G,W,K,Y,X,tt,et,rt,nt,it,ot,at,ut,st,lt,ct,ft,dt,vt,_t,pt,yt,ht,mt,bt,gt,jt,wt,xt,St,Ot,Mt,Et,Ft,Nt,Pt,It,At,Vt,kt,Dt,zt,Ct,Zt,Tt,Rt,Ht,Lt,Jt,qt,Bt,Ut,Qt,$t,Gt,Wt,Kt,Yt,Xt,te,ee,re,ne,ie,oe,ae,ue,se,le,ce,fe,de,ve,_e,pe,ye,he,me,be,ge,je,we,xe,Se,Oe,Me,Ee,Fe,Ne,Pe,Ie,Ae,Ve,ke,De,ze,Ce,Ze,Te,Re,He,Le,Je,qe,Be,Ue,Qe,$e,Ge,We,Ke,Ye,Xe,tr,er,rr,nr,ir,or=(j||(j=1,function(t){!function(){var e={}.hasOwnProperty;function r(){for(var t="",e=0;e<arguments.length;e++){var r=arguments[e];r&&(t=i(t,n(r)))}return t}function n(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return r.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var n="";for(var o in t)e.call(t,o)&&t[o]&&(n=i(n,o));return n}function i(t,e){return e?t?t+" "+e:t+e:t}t.exports?(r.default=r,t.exports=r):window.classNames=r}()}(w)),w.exports),ar=g(or);function ur(){if(S)return x;S=1;var t="object"==typeof global&&global&&global.Object===Object&&global;return x=t}function sr(){if(M)return O;M=1;var t=ur(),e="object"==typeof self&&self&&self.Object===Object&&self,r=t||e||Function("return this")();return O=r}function lr(){if(F)return E;F=1;var t=sr().Symbol;return E=t}function cr(){if(k)return V;k=1;var t=lr(),e=function(){if(P)return N;P=1;var t=lr(),e=Object.prototype,r=e.hasOwnProperty,n=e.toString,i=t?t.toStringTag:void 0;return N=function(t){var e=r.call(t,i),o=t[i];try{t[i]=void 0;var a=!0}catch(t){}var u=n.call(t);return a&&(e?t[i]=o:delete t[i]),u}}(),r=function(){if(A)return I;A=1;var t=Object.prototype.toString;return I=function(e){return t.call(e)}}(),n=t?t.toStringTag:void 0;return V=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":n&&n in Object(t)?e(t):r(t)}}function fr(){if(z)return D;return z=1,D=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}}function dr(){if(Z)return C;Z=1;var t=cr(),e=fr();return C=function(r){if(!e(r))return!1;var n=t(r);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n}}function vr(){if(L)return H;L=1;var t,e=function(){if(R)return T;R=1;var t=sr()["__core-js_shared__"];return T=t}(),r=(t=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||""))?"Symbol(src)_1."+t:"";return H=function(t){return!!r&&r in t}}function _r(){if(q)return J;q=1;var t=Function.prototype.toString;return J=function(e){if(null!=e){try{return t.call(e)}catch(t){}try{return e+""}catch(t){}}return""}}function pr(){if(W)return G;W=1;var t=function(){if(U)return B;U=1;var t=dr(),e=vr(),r=fr(),n=_r(),i=/^\[object .+?Constructor\]$/,o=Function.prototype,a=Object.prototype,u=o.toString,s=a.hasOwnProperty,l=RegExp("^"+u.call(s).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");return B=function(o){return!(!r(o)||e(o))&&(t(o)?l:i).test(n(o))}}(),e=$?Q:($=1,Q=function(t,e){return null==t?void 0:t[e]});return G=function(r,n){var i=e(r,n);return t(i)?i:void 0}}function yr(){if(Y)return K;Y=1;var t=pr()(Object,"create");return K=t}function hr(){if(ct)return lt;ct=1;var t=function(){if(tt)return X;tt=1;var t=yr();return X=function(){this.__data__=t?t(null):{},this.size=0}}(),e=rt?et:(rt=1,et=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}),r=function(){if(it)return nt;it=1;var t=yr(),e=Object.prototype.hasOwnProperty;return nt=function(r){var n=this.__data__;if(t){var i=n[r];return"__lodash_hash_undefined__"===i?void 0:i}return e.call(n,r)?n[r]:void 0}}(),n=function(){if(at)return ot;at=1;var t=yr(),e=Object.prototype.hasOwnProperty;return ot=function(r){var n=this.__data__;return t?void 0!==n[r]:e.call(n,r)}}(),i=function(){if(st)return ut;st=1;var t=yr();return ut=function(e,r){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=t&&void 0===r?"__lodash_hash_undefined__":r,this}}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,lt=o}function mr(){if(_t)return vt;return _t=1,vt=function(t,e){return t===e||t!=t&&e!=e}}function br(){if(yt)return pt;yt=1;var t=mr();return pt=function(e,r){for(var n=e.length;n--;)if(t(e[n][0],r))return n;return-1}}function gr(){if(Mt)return Ot;Mt=1;var t=dt?ft:(dt=1,ft=function(){this.__data__=[],this.size=0}),e=function(){if(mt)return ht;mt=1;var t=br(),e=Array.prototype.splice;return ht=function(r){var n=this.__data__,i=t(n,r);return!(i<0||(i==n.length-1?n.pop():e.call(n,i,1),--this.size,0))},ht}(),r=function(){if(gt)return bt;gt=1;var t=br();return bt=function(e){var r=this.__data__,n=t(r,e);return n<0?void 0:r[n][1]},bt}(),n=function(){if(wt)return jt;wt=1;var t=br();return jt=function(e){return t(this.__data__,e)>-1}}(),i=function(){if(St)return xt;St=1;var t=br();return xt=function(e,r){var n=this.__data__,i=t(n,e);return i<0?(++this.size,n.push([e,r])):n[i][1]=r,this},xt}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,Ot=o}function jr(){if(Ft)return Et;Ft=1;var t=pr()(sr(),"Map");return Et=t}function wr(){if(kt)return Vt;kt=1;var t=At?It:(At=1,It=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t});return Vt=function(e,r){var n=e.__data__;return t(r)?n["string"==typeof r?"string":"hash"]:n.map}}function xr(){if(qt)return Jt;qt=1;var t=function(){if(Pt)return Nt;Pt=1;var t=hr(),e=gr(),r=jr();return Nt=function(){this.size=0,this.__data__={hash:new t,map:new(r||e),string:new t}}}(),e=function(){if(zt)return Dt;zt=1;var t=wr();return Dt=function(e){var r=t(this,e).delete(e);return this.size-=r?1:0,r}}(),r=function(){if(Zt)return Ct;Zt=1;var t=wr();return Ct=function(e){return t(this,e).get(e)}}(),n=function(){if(Rt)return Tt;Rt=1;var t=wr();return Tt=function(e){return t(this,e).has(e)}}(),i=function(){if(Lt)return Ht;Lt=1;var t=wr();return Ht=function(e,r){var n=t(this,e),i=n.size;return n.set(e,r),this.size+=n.size==i?0:1,this}}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,Jt=o}function Sr(){if(Wt)return Gt;Wt=1;var t=xr(),e=Ut?Bt:(Ut=1,Bt=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}),r=$t?Qt:($t=1,Qt=function(t){return this.__data__.has(t)});function n(e){var r=-1,n=null==e?0:e.length;for(this.__data__=new t;++r<n;)this.add(e[r])}return n.prototype.add=n.prototype.push=e,n.prototype.has=r,Gt=n}function Or(){if(ie)return ne;ie=1;var t=(Yt||(Yt=1,Kt=function(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o<i;)if(e(t[o],o,t))return o;return-1}),Kt),e=te?Xt:(te=1,Xt=function(t){return t!=t}),r=(re||(re=1,ee=function(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}),ee);return ne=function(n,i,o){return i==i?r(n,i,o):t(n,e,o)}}function Mr(){if(ae)return oe;ae=1;var t=Or();return oe=function(e,r){return!!(null==e?0:e.length)&&t(e,r,0)>-1}}function Er(){if(se)return ue;return se=1,ue=function(t,e,r){for(var n=-1,i=null==t?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1},ue}function Fr(){if(ce)return le;return ce=1,le=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i},le}function Nr(){if(de)return fe;return de=1,fe=function(t){return function(e){return t(e)}}}function Pr(){if(_e)return ve;return _e=1,ve=function(t,e){return t.has(e)}}function Ir(){if(me)return he;return me=1,he=function(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t},he}function Ar(){if(ge)return be;return ge=1,be=function(t){return null!=t&&"object"==typeof t}}function Vr(){if(Se)return xe;Se=1;var t=function(){if(we)return je;we=1;var t=cr(),e=Ar();return je=function(r){return e(r)&&"[object Arguments]"==t(r)}}(),e=Ar(),r=Object.prototype,n=r.hasOwnProperty,i=r.propertyIsEnumerable,o=t(function(){return arguments}())?t:function(t){return e(t)&&n.call(t,"callee")&&!i.call(t,"callee")};return xe=o}function kr(){if(Me)return Oe;Me=1;var t=Array.isArray;return Oe=t}function Dr(){if(Pe)return Ne;Pe=1;var t=Ir(),e=function(){if(Fe)return Ee;Fe=1;var t=lr(),e=Vr(),r=kr(),n=t?t.isConcatSpreadable:void 0;return Ee=function(t){return r(t)||e(t)||!!(n&&t&&t[n])}}();return Ne=function r(n,i,o,a,u){var s=-1,l=n.length;for(o||(o=e),u||(u=[]);++s<l;){var c=n[s];i>0&&o(c)?i>1?r(c,i-1,o,a,u):t(u,c):a||(u[u.length]=c)}return u},Ne}function zr(){if(Ae)return Ie;return Ae=1,Ie=function(t){return t}}function Cr(){if(ze)return De;ze=1;var t=ke?Ve:(ke=1,Ve=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}),e=Math.max;return De=function(r,n,i){return n=e(void 0===n?r.length-1:n,0),function(){for(var o=arguments,a=-1,u=e(o.length-n,0),s=Array(u);++a<u;)s[a]=o[n+a];a=-1;for(var l=Array(n+1);++a<n;)l[a]=o[a];return l[n]=i(s),t(r,this,l)}},De}function Zr(){if(Re)return Te;Re=1;var t=pr(),e=function(){try{var e=t(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();return Te=e}function Tr(){if(Le)return He;Le=1;var t=Ze?Ce:(Ze=1,Ce=function(t){return function(){return t}}),e=Zr(),r=zr();return He=e?function(r,n){return e(r,"toString",{configurable:!0,enumerable:!1,value:t(n),writable:!0})}:r}function Rr(){if(Ue)return Be;Ue=1;var t=Tr(),e=function(){if(qe)return Je;qe=1;var t=Date.now;return Je=function(e){var r=0,n=0;return function(){var i=t(),o=16-(i-n);if(n=i,o>0){if(++r>=800)return arguments[0]}else r=0;return e.apply(void 0,arguments)}},Je}(),r=e(t);return Be=r}function Hr(){if(We)return Ge;We=1;return Ge=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}}function Lr(){if(Ye)return Ke;Ye=1;var t=dr(),e=Hr();return Ke=function(r){return null!=r&&e(r.length)&&!t(r)}}function Jr(){if(rr)return er;return rr=1,er=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}}var qr,Br,Ur,Qr,$r,Gr,Wr,Kr,Yr,Xr,tn,en,rn,nn,on,an,un,sn,ln,cn,fn,dn,vn,_n,pn,yn,hn,mn,bn,gn,jn,wn,xn,Sn,On=function(){if(ir)return nr;ir=1;var t=function(){if(ye)return pe;ye=1;var t=Sr(),e=Mr(),r=Er(),n=Fr(),i=Nr(),o=Pr();return pe=function(a,u,s,l){var c=-1,f=e,d=!0,v=a.length,_=[],p=u.length;if(!v)return _;s&&(u=n(u,i(s))),l?(f=r,d=!1):u.length>=200&&(f=o,d=!1,u=new t(u));t:for(;++c<v;){var y=a[c],h=null==s?y:s(y);if(y=l||0!==y?y:0,d&&h==h){for(var m=p;m--;)if(u[m]===h)continue t;_.push(y)}else f(u,h,l)||_.push(y)}return _},pe}(),e=Dr(),r=function(){if($e)return Qe;$e=1;var t=zr(),e=Cr(),r=Rr();return Qe=function(n,i){return r(e(n,i,t),n+"")}}(),n=function(){if(tr)return Xe;tr=1;var t=Lr(),e=Ar();return Xe=function(r){return e(r)&&t(r)}}(),i=Jr(),o=r((function(r,o){var a=i(o);return n(a)&&(a=void 0),n(r)?t(r,e(o,1,n,!0),void 0,a):[]}));return nr=o}(),Mn=g(On);function En(){if(en)return tn;en=1;var t=gr(),e=function(){if(Br)return qr;Br=1;var t=gr();return qr=function(){this.__data__=new t,this.size=0}}(),r=Qr?Ur:(Qr=1,Ur=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}),n=Gr?$r:(Gr=1,$r=function(t){return this.__data__.get(t)}),i=Kr?Wr:(Kr=1,Wr=function(t){return this.__data__.has(t)}),o=function(){if(Xr)return Yr;Xr=1;var t=gr(),e=jr(),r=xr();return Yr=function(n,i){var o=this.__data__;if(o instanceof t){var a=o.__data__;if(!e||a.length<199)return a.push([n,i]),this.size=++o.size,this;o=this.__data__=new r(a)}return o.set(n,i),this.size=o.size,this}}();function a(e){var r=this.__data__=new t(e);this.size=r.size}return a.prototype.clear=e,a.prototype.delete=r,a.prototype.get=n,a.prototype.has=i,a.prototype.set=o,tn=a}function Fn(){if(an)return on;an=1;var t=Sr(),e=(nn||(nn=1,rn=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}),rn),r=Pr();return on=function(n,i,o,a,u,s){var l=1&o,c=n.length,f=i.length;if(c!=f&&!(l&&f>c))return!1;var d=s.get(n),v=s.get(i);if(d&&v)return d==i&&v==n;var _=-1,p=!0,y=2&o?new t:void 0;for(s.set(n,i),s.set(i,n);++_<c;){var h=n[_],m=i[_];if(a)var b=l?a(m,h,_,i,n,s):a(h,m,_,n,i,s);if(void 0!==b){if(b)continue;p=!1;break}if(y){if(!e(i,(function(t,e){if(!r(y,e)&&(h===t||u(h,t,o,a,s)))return y.push(e)}))){p=!1;break}}else if(h!==m&&!u(h,m,o,a,s)){p=!1;break}}return s.delete(n),s.delete(i),p},on}function Nn(){if(sn)return un;sn=1;var t=sr().Uint8Array;return un=t}function Pn(){if(dn)return fn;return dn=1,fn=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t){r[++e]=t})),r},fn}function In(){if(_n)return vn;_n=1;var t=lr(),e=Nn(),r=mr(),n=Fn(),i=(cn||(cn=1,ln=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t,n){r[++e]=[n,t]})),r}),ln),o=Pn(),a=t?t.prototype:void 0,u=a?a.valueOf:void 0;return vn=function(t,a,s,l,c,f,d){switch(s){case"[object DataView]":if(t.byteLength!=a.byteLength||t.byteOffset!=a.byteOffset)return!1;t=t.buffer,a=a.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=a.byteLength||!f(new e(t),new e(a)));case"[object Boolean]":case"[object Date]":case"[object Number]":return r(+t,+a);case"[object Error]":return t.name==a.name&&t.message==a.message;case"[object RegExp]":case"[object String]":return t==a+"";case"[object Map]":var v=i;case"[object Set]":var _=1&l;if(v||(v=o),t.size!=a.size&&!_)return!1;var p=d.get(t);if(p)return p==a;l|=2,d.set(t,a);var y=n(v(t),v(a),l,c,f,d);return d.delete(t),y;case"[object Symbol]":if(u)return u.call(t)==u.call(a)}return!1}}function An(){if(yn)return pn;yn=1;var t=Ir(),e=kr();return pn=function(r,n,i){var o=n(r);return e(r)?o:t(o,i(r))}}function Vn(){if(gn)return bn;return gn=1,bn=function(){return[]}}function kn(){if(wn)return jn;wn=1;var t=(mn||(mn=1,hn=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}),hn),e=Vn(),r=Object.prototype.propertyIsEnumerable,n=Object.getOwnPropertySymbols;return jn=n?function(e){return null==e?[]:(e=Object(e),t(n(e),(function(t){return r.call(e,t)})))}:e}var Dn,zn,Cn,Zn,Tn,Rn,Hn,Ln={exports:{}};function Jn(){return Cn||(Cn=1,function(t,e){var r=sr(),n=zn?Dn:(zn=1,Dn=function(){return!1}),i=e&&!e.nodeType&&e,o=i&&t&&!t.nodeType&&t,a=o&&o.exports===i?r.Buffer:void 0,u=(a?a.isBuffer:void 0)||n;t.exports=u}(Ln,Ln.exports)),Ln.exports}var qn,Bn,Un,Qn,$n,Gn,Wn,Kn,Yn,Xn,ti,ei,ri,ni,ii,oi,ai,ui,si,li,ci,fi,di,vi,_i,pi,yi,hi,mi,bi,gi,ji,wi,xi,Si,Oi={exports:{}};function Mi(){return qn||(qn=1,function(t,e){var r=ur(),n=e&&!e.nodeType&&e,i=n&&t&&!t.nodeType&&t,o=i&&i.exports===n&&r.process,a=function(){try{var t=i&&i.require&&i.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=a}(Oi,Oi.exports)),Oi.exports}function Ei(){if(Un)return Bn;Un=1;var t=function(){if(Hn)return Rn;Hn=1;var t=cr(),e=Hr(),r=Ar(),n={};return n["[object Float32Array]"]=n["[object Float64Array]"]=n["[object Int8Array]"]=n["[object Int16Array]"]=n["[object Int32Array]"]=n["[object Uint8Array]"]=n["[object Uint8ClampedArray]"]=n["[object Uint16Array]"]=n["[object Uint32Array]"]=!0,n["[object Arguments]"]=n["[object Array]"]=n["[object ArrayBuffer]"]=n["[object Boolean]"]=n["[object DataView]"]=n["[object Date]"]=n["[object Error]"]=n["[object Function]"]=n["[object Map]"]=n["[object Number]"]=n["[object Object]"]=n["[object RegExp]"]=n["[object Set]"]=n["[object String]"]=n["[object WeakMap]"]=!1,Rn=function(i){return r(i)&&e(i.length)&&!!n[t(i)]}}(),e=Nr(),r=Mi(),n=r&&r.isTypedArray,i=n?e(n):t;return Bn=i}function Fi(){if($n)return Qn;$n=1;var t=(Sn||(Sn=1,xn=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}),xn),e=Vr(),r=kr(),n=Jn(),i=function(){if(Tn)return Zn;Tn=1;var t=/^(?:0|[1-9]\d*)$/;return Zn=function(e,r){var n=typeof e;return!!(r=null==r?9007199254740991:r)&&("number"==n||"symbol"!=n&&t.test(e))&&e>-1&&e%1==0&&e<r}}(),o=Ei(),a=Object.prototype.hasOwnProperty;return Qn=function(u,s){var l=r(u),c=!l&&e(u),f=!l&&!c&&n(u),d=!l&&!c&&!f&&o(u),v=l||c||f||d,_=v?t(u.length,String):[],p=_.length;for(var y in u)!s&&!a.call(u,y)||v&&("length"==y||f&&("offset"==y||"parent"==y)||d&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||i(y,p))||_.push(y);return _}}function Ni(){if(Wn)return Gn;Wn=1;var t=Object.prototype;return Gn=function(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||t)}}function Pi(){if(Yn)return Kn;return Yn=1,Kn=function(t,e){return function(r){return t(e(r))}}}function Ii(){if(ri)return ei;ri=1;var t=Ni(),e=function(){if(ti)return Xn;ti=1;var t=Pi()(Object.keys,Object);return Xn=t}(),r=Object.prototype.hasOwnProperty;return ei=function(n){if(!t(n))return e(n);var i=[];for(var o in Object(n))r.call(n,o)&&"constructor"!=o&&i.push(o);return i}}function Ai(){if(ii)return ni;ii=1;var t=Fi(),e=Ii(),r=Lr();return ni=function(n){return r(n)?t(n):e(n)}}function Vi(){if(ai)return oi;ai=1;var t=An(),e=kn(),r=Ai();return oi=function(n){return t(n,r,e)}}function ki(){if(_i)return vi;_i=1;var t=pr()(sr(),"Set");return vi=t}function Di(){if(mi)return hi;mi=1;var t=function(){if(ci)return li;ci=1;var t=pr()(sr(),"DataView");return li=t}(),e=jr(),r=function(){if(di)return fi;di=1;var t=pr()(sr(),"Promise");return fi=t}(),n=ki(),i=function(){if(yi)return pi;yi=1;var t=pr()(sr(),"WeakMap");return pi=t}(),o=cr(),a=_r(),u="[object Map]",s="[object Promise]",l="[object Set]",c="[object WeakMap]",f="[object DataView]",d=a(t),v=a(e),_=a(r),p=a(n),y=a(i),h=o;return(t&&h(new t(new ArrayBuffer(1)))!=f||e&&h(new e)!=u||r&&h(r.resolve())!=s||n&&h(new n)!=l||i&&h(new i)!=c)&&(h=function(t){var e=o(t),r="[object Object]"==e?t.constructor:void 0,n=r?a(r):"";if(n)switch(n){case d:return f;case v:return u;case _:return s;case p:return l;case y:return c}return e}),hi=h}function zi(){if(gi)return bi;gi=1;var t=En(),e=Fn(),r=In(),n=function(){if(si)return ui;si=1;var t=Vi(),e=Object.prototype.hasOwnProperty;return ui=function(r,n,i,o,a,u){var s=1&i,l=t(r),c=l.length;if(c!=t(n).length&&!s)return!1;for(var f=c;f--;){var d=l[f];if(!(s?d in n:e.call(n,d)))return!1}var v=u.get(r),_=u.get(n);if(v&&_)return v==n&&_==r;var p=!0;u.set(r,n),u.set(n,r);for(var y=s;++f<c;){var h=r[d=l[f]],m=n[d];if(o)var b=s?o(m,h,d,n,r,u):o(h,m,d,r,n,u);if(!(void 0===b?h===m||a(h,m,i,o,u):b)){p=!1;break}y||(y="constructor"==d)}if(p&&!y){var g=r.constructor,j=n.constructor;g==j||!("constructor"in r)||!("constructor"in n)||"function"==typeof g&&g instanceof g&&"function"==typeof j&&j instanceof j||(p=!1)}return u.delete(r),u.delete(n),p},ui}(),i=Di(),o=kr(),a=Jn(),u=Ei(),s="[object Arguments]",l="[object Array]",c="[object Object]",f=Object.prototype.hasOwnProperty;return bi=function(d,v,_,p,y,h){var m=o(d),b=o(v),g=m?l:i(d),j=b?l:i(v),w=(g=g==s?c:g)==c,x=(j=j==s?c:j)==c,S=g==j;if(S&&a(d)){if(!a(v))return!1;m=!0,w=!1}if(S&&!w)return h||(h=new t),m||u(d)?e(d,v,_,p,y,h):r(d,v,g,_,p,y,h);if(!(1&_)){var O=w&&f.call(d,"__wrapped__"),M=x&&f.call(v,"__wrapped__");if(O||M){var E=O?d.value():d,F=M?v.value():v;return h||(h=new t),y(E,F,_,p,h)}}return!!S&&(h||(h=new t),n(d,v,_,p,y,h))}}var Ci,Zi,Ti=g(function(){if(Si)return xi;Si=1;var t=function(){if(wi)return ji;wi=1;var t=zi(),e=Ar();return ji=function r(n,i,o,a,u){return n===i||(null==n||null==i||!e(n)&&!e(i)?n!=n&&i!=i:t(n,i,o,a,r,u))},ji}();return xi=function(e,r){return t(e,r)}}());var Ri,Hi,Li,Ji,qi,Bi,Ui,Qi,$i,Gi,Wi,Ki,Yi,Xi,to,eo,ro,no,io=function(){if(Zi)return Ci;Zi=1;var t=Ii(),e=Di(),r=Vr(),n=kr(),i=Lr(),o=Jn(),a=Ni(),u=Ei(),s=Object.prototype.hasOwnProperty;return Ci=function(l){if(null==l)return!0;if(i(l)&&(n(l)||"string"==typeof l||"function"==typeof l.splice||o(l)||u(l)||r(l)))return!l.length;var c=e(l);if("[object Map]"==c||"[object Set]"==c)return!l.size;if(a(l))return!t(l).length;for(var f in l)if(s.call(l,f))return!1;return!0}}(),oo=g(io);function ao(){if(Ji)return Li;Ji=1;var t=Zr();return Li=function(e,r,n){"__proto__"==r&&t?t(e,r,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[r]=n}}function uo(){if(Bi)return qi;Bi=1;var t=ao(),e=mr(),r=Object.prototype.hasOwnProperty;return qi=function(n,i,o){var a=n[i];r.call(n,i)&&e(a,o)&&(void 0!==o||i in n)||t(n,i,o)}}function so(){if(Qi)return Ui;Qi=1;var t=uo(),e=ao();return Ui=function(r,n,i,o){var a=!i;i||(i={});for(var u=-1,s=n.length;++u<s;){var l=n[u],c=o?o(i[l],r[l],l,i,r):void 0;void 0===c&&(c=r[l]),a?e(i,l,c):t(i,l,c)}return i},Ui}function lo(){if(Xi)return Yi;Xi=1;var t=fr(),e=Ni(),r=Ki?Wi:(Ki=1,Wi=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}),n=Object.prototype.hasOwnProperty;return Yi=function(i){if(!t(i))return r(i);var o=e(i),a=[];for(var u in i)("constructor"!=u||!o&&n.call(i,u))&&a.push(u);return a}}function co(){if(eo)return to;eo=1;var t=Fi(),e=lo(),r=Lr();return to=function(n){return r(n)?t(n,!0):e(n)}}var fo,vo,_o,po,yo,ho,mo,bo,go,jo,wo,xo,So,Oo,Mo,Eo,Fo,No,Po,Io,Ao,Vo,ko,Do,zo,Co,Zo,To,Ro,Ho,Lo,Jo,qo,Bo,Uo,Qo,$o,Go,Wo,Ko,Yo,Xo,ta,ea,ra,na,ia,oa,aa,ua,sa,la,ca,fa,da,va,_a,pa,ya,ha,ma,ba,ga,ja,wa,xa,Sa,Oa,Ma,Ea,Fa,Na,Pa,Ia,Aa,Va,ka,Da={exports:{}};function za(){if(mo)return ho;mo=1;var t=Pi()(Object.getPrototypeOf,Object);return ho=t}function Ca(){if(go)return bo;go=1;var t=Ir(),e=za(),r=kn(),n=Vn(),i=Object.getOwnPropertySymbols;return bo=i?function(n){for(var i=[];n;)t(i,r(n)),n=e(n);return i}:n}function Za(){if(So)return xo;So=1;var t=An(),e=Ca(),r=co();return xo=function(n){return t(n,r,e)}}function Ta(){if(Fo)return Eo;Fo=1;var t=Nn();return Eo=function(e){var r=new e.constructor(e.byteLength);return new t(r).set(new t(e)),r}}function Ra(){if(Zo)return Co;Zo=1;var t=Ta(),e=function(){if(Po)return No;Po=1;var t=Ta();return No=function(e,r){var n=r?t(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}}(),r=function(){if(Ao)return Io;Ao=1;var t=/\w*$/;return Io=function(e){var r=new e.constructor(e.source,t.exec(e));return r.lastIndex=e.lastIndex,r}}(),n=function(){if(ko)return Vo;ko=1;var t=lr(),e=t?t.prototype:void 0,r=e?e.valueOf:void 0;return Vo=function(t){return r?Object(r.call(t)):{}}}(),i=function(){if(zo)return Do;zo=1;var t=Ta();return Do=function(e,r){var n=r?t(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}}();return Co=function(o,a,u){var s=o.constructor;switch(a){case"[object ArrayBuffer]":return t(o);case"[object Boolean]":case"[object Date]":return new s(+o);case"[object DataView]":return e(o,u);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return i(o,u);case"[object Map]":case"[object Set]":return new s;case"[object Number]":case"[object String]":return new s(o);case"[object RegExp]":return r(o);case"[object Symbol]":return n(o)}}}function Ha(){if(Lo)return Ho;Lo=1;var t=function(){if(Ro)return To;Ro=1;var t=fr(),e=Object.create,r=function(){function r(){}return function(n){if(!t(n))return{};if(e)return e(n);r.prototype=n;var i=new r;return r.prototype=void 0,i}}();return To=r}(),e=za(),r=Ni();return Ho=function(n){return"function"!=typeof n.constructor||r(n)?{}:t(e(n))}}function La(){if(Uo)return Bo;Uo=1;var t=function(){if(qo)return Jo;qo=1;var t=Di(),e=Ar();return Jo=function(r){return e(r)&&"[object Map]"==t(r)}}(),e=Nr(),r=Mi(),n=r&&r.isMap,i=n?e(n):t;return Bo=i}function Ja(){if(Wo)return Go;Wo=1;var t=function(){if($o)return Qo;$o=1;var t=Di(),e=Ar();return Qo=function(r){return e(r)&&"[object Set]"==t(r)}}(),e=Nr(),r=Mi(),n=r&&r.isSet,i=n?e(n):t;return Go=i}function qa(){if(Yo)return Ko;Yo=1;var t=En(),e=(Hi||(Hi=1,Ri=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}),Ri),r=uo(),n=function(){if(Gi)return $i;Gi=1;var t=so(),e=Ai();return $i=function(r,n){return r&&t(n,e(n),r)}}(),i=function(){if(no)return ro;no=1;var t=so(),e=co();return ro=function(r,n){return r&&t(n,e(n),r)}}(),o=(fo||(fo=1,function(t,e){var r=sr(),n=e&&!e.nodeType&&e,i=n&&t&&!t.nodeType&&t,o=i&&i.exports===n?r.Buffer:void 0,a=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=a?a(r):new t.constructor(r);return t.copy(n),n}}(Da,Da.exports)),Da.exports),a=(_o||(_o=1,vo=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}),vo),u=function(){if(yo)return po;yo=1;var t=so(),e=kn();return po=function(r,n){return t(r,e(r),n)}}(),s=function(){if(wo)return jo;wo=1;var t=so(),e=Ca();return jo=function(r,n){return t(r,e(r),n)}}(),l=Vi(),c=Za(),f=Di(),d=function(){if(Mo)return Oo;Mo=1;var t=Object.prototype.hasOwnProperty;return Oo=function(e){var r=e.length,n=new e.constructor(r);return r&&"string"==typeof e[0]&&t.call(e,"index")&&(n.index=e.index,n.input=e.input),n}}(),v=Ra(),_=Ha(),p=kr(),y=Jn(),h=La(),m=fr(),b=Ja(),g=Ai(),j=co(),w="[object Arguments]",x="[object Function]",S="[object Object]",O={};return O[w]=O["[object Array]"]=O["[object ArrayBuffer]"]=O["[object DataView]"]=O["[object Boolean]"]=O["[object Date]"]=O["[object Float32Array]"]=O["[object Float64Array]"]=O["[object Int8Array]"]=O["[object Int16Array]"]=O["[object Int32Array]"]=O["[object Map]"]=O["[object Number]"]=O[S]=O["[object RegExp]"]=O["[object Set]"]=O["[object String]"]=O["[object Symbol]"]=O["[object Uint8Array]"]=O["[object Uint8ClampedArray]"]=O["[object Uint16Array]"]=O["[object Uint32Array]"]=!0,O["[object Error]"]=O[x]=O["[object WeakMap]"]=!1,Ko=function M(E,F,N,P,I,A){var V,k=1&F,D=2&F,z=4&F;if(N&&(V=I?N(E,P,I,A):N(E)),void 0!==V)return V;if(!m(E))return E;var C=p(E);if(C){if(V=d(E),!k)return a(E,V)}else{var Z=f(E),T=Z==x||"[object GeneratorFunction]"==Z;if(y(E))return o(E,k);if(Z==S||Z==w||T&&!I){if(V=D||T?{}:_(E),!k)return D?s(E,i(V,E)):u(E,n(V,E))}else{if(!O[Z])return I?E:{};V=v(E,Z,k)}}A||(A=new t);var R=A.get(E);if(R)return R;A.set(E,V),b(E)?E.forEach((function(t){V.add(M(t,F,N,t,E,A))})):h(E)&&E.forEach((function(t,e){V.set(e,M(t,F,N,e,E,A))}));var H=C?void 0:(z?D?c:l:D?j:g)(E);return e(H||E,(function(t,e){H&&(t=E[e=t]),r(V,e,M(t,F,N,e,E,A))})),V},Ko}function Ba(){if(ta)return Xo;ta=1;var t=cr(),e=Ar();return Xo=function(r){return"symbol"==typeof r||e(r)&&"[object Symbol]"==t(r)}}function Ua(){if(ia)return na;ia=1;var t=xr();function e(r,n){if("function"!=typeof r||null!=n&&"function"!=typeof n)throw new TypeError("Expected a function");var i=function(){var t=arguments,e=n?n.apply(this,t):t[0],o=i.cache;if(o.has(e))return o.get(e);var a=r.apply(this,t);return i.cache=o.set(e,a)||o,a};return i.cache=new(e.Cache||t),i}return e.Cache=t,na=e}function Qa(){if(sa)return ua;sa=1;var t=function(){if(aa)return oa;aa=1;var t=Ua();return oa=function(e){var r=t(e,(function(t){return 500===n.size&&n.clear(),t})),n=r.cache;return r}}(),e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,n=t((function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(""),t.replace(e,(function(t,e,i,o){n.push(i?o.replace(r,"$1"):e||t)})),n}));return ua=n}function $a(){if(da)return fa;da=1;var t=function(){if(ca)return la;ca=1;var t=lr(),e=Fr(),r=kr(),n=Ba(),i=t?t.prototype:void 0,o=i?i.toString:void 0;return la=function t(i){if("string"==typeof i)return i;if(r(i))return e(i,t)+"";if(n(i))return o?o.call(i):"";var a=i+"";return"0"==a&&1/i==-1/0?"-0":a},la}();return fa=function(e){return null==e?"":t(e)}}function Ga(){if(_a)return va;_a=1;var t=kr(),e=function(){if(ra)return ea;ra=1;var t=kr(),e=Ba(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;return ea=function(i,o){if(t(i))return!1;var a=typeof i;return!("number"!=a&&"symbol"!=a&&"boolean"!=a&&null!=i&&!e(i))||n.test(i)||!r.test(i)||null!=o&&i in Object(o)}}(),r=Qa(),n=$a();return va=function(i,o){return t(i)?i:e(i,o)?[i]:r(n(i))}}function Wa(){if(ya)return pa;ya=1;var t=Ba();return pa=function(e){if("string"==typeof e||t(e))return e;var r=e+"";return"0"==r&&1/e==-1/0?"-0":r}}function Ka(){if(wa)return ja;wa=1;var t=function(){if(ma)return ha;ma=1;var t=Ga(),e=Wa();return ha=function(r,n){for(var i=0,o=(n=t(n,r)).length;null!=r&&i<o;)r=r[e(n[i++])];return i&&i==o?r:void 0},ha}(),e=(ga||(ga=1,ba=function(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(i);++n<i;)o[n]=t[n+e];return o}),ba);return ja=function(r,n){return n.length<2?r:t(r,e(n,0,-1))}}function Ya(){if(Fa)return Ea;Fa=1;var t=function(){if(Ma)return Oa;Ma=1;var t=cr(),e=za(),r=Ar(),n=Function.prototype,i=Object.prototype,o=n.toString,a=i.hasOwnProperty,u=o.call(Object);return Oa=function(n){if(!r(n)||"[object Object]"!=t(n))return!1;var i=e(n);if(null===i)return!0;var s=a.call(i,"constructor")&&i.constructor;return"function"==typeof s&&s instanceof s&&o.call(s)==u}}();return Ea=function(e){return t(e)?void 0:e}}function Xa(){if(Aa)return Ia;Aa=1;var t=function(){if(Pa)return Na;Pa=1;var t=Dr();return Na=function(e){return null!=e&&e.length?t(e,1):[]}}(),e=Cr(),r=Rr();return Ia=function(n){return r(e(n,void 0,t),n+"")}}var tu,eu,ru,nu,iu,ou,au,uu,su=function(){if(ka)return Va;ka=1;var t=Fr(),e=qa(),r=function(){if(Sa)return xa;Sa=1;var t=Ga(),e=Jr(),r=Ka(),n=Wa();return xa=function(i,o){return o=t(o,i),null==(i=r(i,o))||delete i[n(e(o))]}}(),n=Ga(),i=so(),o=Ya(),a=Xa(),u=Za(),s=a((function(a,s){var l={};if(null==a)return l;var c=!1;s=t(s,(function(t){return t=n(t,a),c||(c=t.length>1),t})),i(a,u(a),l),c&&(l=e(l,7,o));for(var f=s.length;f--;)r(l,s[f]);return l}));return Va=s}(),lu=g(su);function cu(){if(nu)return ru;nu=1;var t=ki(),e=eu?tu:(eu=1,tu=function(){}),r=Pn(),n=t&&1/r(new t([,-0]))[1]==1/0?function(e){return new t(e)}:e;return ru=n}!function(){if(uu)return au;uu=1;var t=function(){if(ou)return iu;ou=1;var t=Sr(),e=Mr(),r=Er(),n=Pr(),i=cu(),o=Pn();return iu=function(a,u,s){var l=-1,c=e,f=a.length,d=!0,v=[],_=v;if(s)d=!1,c=r;else if(f>=200){var p=u?null:i(a);if(p)return o(p);d=!1,c=n,_=new t}else _=u?[]:v;t:for(;++l<f;){var y=a[l],h=u?u(y):y;if(y=s||0!==y?y:0,d&&h==h){for(var m=_.length;m--;)if(_[m]===h)continue t;u&&_.push(h),v.push(y)}else c(_,h,s)||(_!==v&&_.push(h),v.push(y))}return v},iu}();au=function(e,r){return r="function"==typeof r?r:void 0,e&&e.length?t(e,void 0,r):[]}}();var fu,du,vu=g(Ua());var _u,pu,yu=g(function(){if(du)return fu;du=1;var t=$a(),e=/[\\^$.*+?()[\]{}|]/g,r=RegExp(e.source);return fu=function(n){return(n=t(n))&&r.test(n)?n.replace(e,"\\$&"):n}}());var hu=g(function(){if(pu)return _u;pu=1;var t=qa();return _u=function(e){return t(e,5)}}());const mu=t=>t.localadmin||t.localadmin||t.address&&t.address.lastIndexOf(",")<t.address.length-2&&t.address.substring(t.address.lastIndexOf(",")+2)||"",bu=({id:t,code:e})=>e||(void 0!==t&&void 0!==t.indexOf&&-1!==t.indexOf("#")?t.substring(t.indexOf("#")+1):void 0),gu=(t,e)=>[t||e&&e.split(",")[0],"string"==typeof e?e.replace(new RegExp(`${yu(t)}([ ,]|$)+`),""):""];function ju(t,e){void 0===e&&(e={});var r=e.insertAt;if(t&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===r&&n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i),i.styleSheet?i.styleSheet.cssText=t:i.appendChild(document.createTextNode(t))}}vu(((t,e=!1)=>{switch(t.layer){case"currentPosition":return[t.labelId,t.address];case"selectFromMap":case"ownLocations":case"back":return[t.labelId];case"favouritePlace":return gu(t.name,t.address);case"favouriteVehicleRentalStation":case"bikestation":return[t.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!e&&t.shortName?[t.gtfsId,t.mode.toLowerCase(),t.longName]:[t.shortName,t.longName,t.agency?t.agency.name:void 0];case"venue":case"address":case"street":return[t.name,t.label.replace(new RegExp(`${yu(t.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return e?[t.name||t.label||t.address&&t.address.split(",")[0],mu(t)]:[t.name,t.id,bu(t),mu(t)];default:return[t.name||t.label||t.address&&t.address.split(",")[0],mu(t)]}}),((t,e)=>{const r=hu(t);return r.plain=e,r}));var wu="modal-content_favourite-edit-modal-content-container__dGK6D",xu="modal-content_favourite-edit-modal-content-top__Luuv-",Su="modal-content_favourite-edit-modal-content-header__2oSv9";ju(".modal-content_favourite-edit-modal-content-container__dGK6D {\n display: flex;\n flex-direction: column; }\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid #ddd;\n margin-bottom: 31px; }\n @media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n border-bottom: none;\n margin-bottom: 0; } }\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: inherit;\n font-size: 18px;\n font-weight: var(--font-weight-medium);\n line-height: normal;\n letter-spacing: -0.6px;\n color: #333;\n margin-bottom: 34px; }\n @media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n justify-content: start;\n align-items: center;\n margin-bottom: 26px;\n line-height: 1.33; } }\n");const Ou=({headerText:t,renderList:e})=>d.default.createElement("div",{className:wu},d.default.createElement("div",{className:xu},d.default.createElement("div",{className:Su},t)),e());"production"!==process.env.NODE_ENV&&(Ou.propTypes={headerText:f.default.string.isRequired,renderList:f.default.func.isRequired});var Mu={"favourite-edit-list-container":"styles_favourite-edit-list-container__SM5ZN","favourite-edit-list":"styles_favourite-edit-list__VJIsM","favourite-edit-list-item":"styles_favourite-edit-list-item__VHc3F","favourite-edit-list-item-left":"styles_favourite-edit-list-item-left__iPstx","favourite-edit-list-arrow-hidden":"styles_favourite-edit-list-arrow-hidden__Of1nE","favourite-edit-list-item-drag":"styles_favourite-edit-list-item-drag__puT4i","favourite-edit-list-item-ellipsis":"styles_favourite-edit-list-item-ellipsis__ChHu0","favourite-edit-list-item-icon":"styles_favourite-edit-list-item-icon__QN7uQ",place:"styles_place__bY4jg",home:"styles_home__P1rvA",school:"styles_school__exJZw",sport:"styles_sport__rEyiE",shopping:"styles_shopping__hGZRe",work:"styles_work__PM6aB","favourite-edit-list-item-content":"styles_favourite-edit-list-item-content__qcbys","favourite-edit-list-item-name":"styles_favourite-edit-list-item-name__8HtQs","favourite-edit-list-item-address":"styles_favourite-edit-list-item-address__VxW9P","favourite-edit-list-item-right":"styles_favourite-edit-list-item-right__5dGkh","favourite-edit-list-item-edit":"styles_favourite-edit-list-item-edit__D-KxF","favourite-edit-list-item-remove":"styles_favourite-edit-list-item-remove__Ifpcz"};ju(".styles_favourite-edit-list-container__SM5ZN {\n display: flex;\n position: relative;\n width: 100%; }\n @media screen and (min-width: 768px) {\n .styles_favourite-edit-list-container__SM5ZN {\n min-height: 286px; } }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0;\n padding: 0;\n box-sizing: border-box; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F:not(:first-child) {\n margin-top: 9px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F {\n display: flex;\n flex-direction: row;\n align-items: center;\n background: white;\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 50px;\n border-radius: 5px;\n border: solid 1px #d9d9d9;\n list-style: none;\n box-sizing: border-box; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx {\n display: flex;\n min-width: 69px;\n height: 100%;\n align-items: center; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE {\n z-index: -999;\n opacity: 0;\n width: 0;\n padding: 0;\n border: 0; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE:focus {\n font-weight: bold;\n z-index: 10;\n opacity: 1; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 37px;\n height: 100%;\n cursor: move; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 {\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 svg {\n fill: #888;\n height: 20px;\n transform: rotate(90deg); }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 24px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ svg {\n position: relative;\n left: -3px;\n top: -1px;\n fill: var(--color);\n width: 22px;\n height: 22px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_place__bY4jg svg {\n fill: var(--color);\n width: 24px;\n height: 24px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_home__P1rvA svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_school__exJZw svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_sport__rEyiE svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_shopping__hGZRe svg {\n fill: var(--color);\n width: 18px;\n height: 18px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_work__PM6aB svg {\n fill: var(--color);\n width: 20px;\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys {\n display: flex;\n flex-direction: column;\n width: calc(100% - 69px - 86px); }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-name__8HtQs {\n margin: 0;\n font-weight: var(--font-weight-medium);\n color: #333;\n font-size: 15px;\n line-height: 1;\n letter-spacing: -0.6px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P {\n margin: 3px 0 0;\n color: #666;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: -0.48px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P:empty {\n margin-top: 0; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh {\n display: flex;\n min-width: 86px;\n align-items: center;\n justify-content: space-evenly; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 22px;\n height: 48px;\n cursor: pointer; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF svg {\n fill: #888;\n width: 22px;\n height: 22px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: 18px;\n height: 48px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz svg {\n fill: #888;\n width: 18px;\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN > div {\n width: 100%; }\n");const Eu=l.createInstance({fallbackLng:"fi",resources:{de:{translation:{cancel:"Abbrechen",delete:"Löschen","delete-place-header":"Wollen Sie den Favoriten löschen?","delete-place-name":"Lösche Favorit: {{favourite.name}}","edit-places":"Bearbeite Favoriten","edit-place-name":"Bearbeite Favorit: {{favourite.name}}","edit-modal-on-open":"Favoriten bearbeiten.","choose-icon":"Wähle das Symbol für diesen Ort","close-modal":"Schließe den Dialog","input-placeholder":"Wählen Sie einen Name für diesen Ort (optional)",save:"Speichern","save-place":"Favorit speichern"}},en:{translation:{cancel:"Cancel",delete:"Delete","delete-place-header":"Do you want to delete the place?","delete-place-name":"Delete place: {{favourite.name}}","edit-places":"Edit places","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Select the place's icon","close-modal":"Close the modal","input-placeholder":"Give the name a place (optional)",save:"Save","save-place":"Save place",up:"Move favourite up",down:"Move favourite down"}},fi:{translation:{cancel:"Peruuta",delete:"Poista","delete-place-header":"Haluatko poistaa paikan?","delete-place-name":"Poista paikka: {{favourite.name}}","edit-places":"Muokkaa paikkoja","edit-place-name":"Muokkaa paikkaa: {{favourite.name}}","edit-modal-on-open":"Suosikkien muokkaus modaali.","choose-icon":"Valitse paikan kuvake","close-modal":"Sulje modaali","input-placeholder":"Anna paikalle nimi (vapaaehtoinen)",save:"Tallenna","save-place":"Tallenna paikka",up:"Siirrä suosikkisijaintia ylöpäin",down:"Siirrä suosikkisijaintia alaspäin"}},pl:{translation:{cancel:"Anuluj",delete:"Usuń","delete-place-header":"Czy na pewno chcesz usunąć to miejsce?","delete-place-name":"Usuń miejsce: {{favourite.name}}","edit-places":"Edytuj miejsca","edit-place-name":"Edytuj miejsce: {{favourite.name}}","edit-modal-on-open":"Modal edycji ulubionych.","choose-icon":"Wybierz ikonę miejsca","close-modal":"Zamknij modal","input-placeholder":"Nadaj nazwę miejscu (opcjonalne)",save:"Zapisz","save-place":"Zapisz miejsce",up:"Przenieś ulubione wyżej",down:"Przenieś ulubione niżej"}},sv:{translation:{cancel:"Avbryt",delete:"Ta bort","delete-place-header":"Vill du ta bort platsen?","delete-place-name":"Ta bort platsen: {{favourite.name}}","edit-places":"Redigera platser","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Välj platsens ikon","close-modal":"Stäng modalen","input-placeholder":"Ange platsens namn (frivilligt)",save:"Spara","save-place":"Spara plats",up:"Flytta favoriten uppåt",down:"Flytta favoriten nedåt"}}},defaultNS:"translation",react:{useSuspense:!0}});function Fu(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}Eu.init();const Nu=t=>{const e=t&&(t.key||t.which||t.keyCode)||"";return!(!e||![13," ","Spacebar"].concat([32,"Enter"]).includes(e))&&(t.preventDefault(),!0)};class Pu extends d.default.Component{constructor(t){super(t),b(this,"translate",((t,e)=>this.props.t(t,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Fu(Object(r),!0).forEach((function(e){b(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Fu(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({lng:this.props.lang},e)))),b(this,"moveFavourite",((t,e)=>{const{favourites:r}=this.state,n=[...r],i=n[t+e];n[t+e]=n[t],n[t]=i,this.setState({favourites:n})})),b(this,"renderFavouriteListItem",((t,e)=>{let r="place";if(t.selectedIconId){const e=t.selectedIconId.indexOf("icon_");e>0&&(r=t.selectedIconId.substring(e+5))}const[n,i]=gu(t.name,t.address);return d.default.createElement("li",{className:ar(Mu["favourite-edit-list-item"]),key:t.favouriteId},d.default.createElement("div",{className:Mu["favourite-edit-list-item-left"]},e>0&&d.default.createElement("button",{className:Mu["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("up"),onClick:()=>{this.moveFavourite(e,-1)}},"↑"),e<this.state.favourites.length-1&&d.default.createElement("button",{className:Mu["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("down"),onClick:()=>{this.moveFavourite(e,1)}},"↓"),d.default.createElement("div",{className:Mu["favourite-edit-list-item-drag"]},d.default.createElement("div",{className:Mu["favourite-edit-list-item-ellipsis"]},d.default.createElement(p.default,{img:"ellipsis"}))),d.default.createElement("div",{className:ar(Mu["favourite-edit-list-item-icon"],Mu[r])},d.default.createElement(p.default,{img:r,color:this.props.colors.primary}))),d.default.createElement("div",{className:Mu["favourite-edit-list-item-content"]},d.default.createElement("p",{className:Mu["favourite-edit-list-item-name"]},n),d.default.createElement("p",{className:Mu["favourite-edit-list-item-address"]},i)),d.default.createElement("div",{className:Mu["favourite-edit-list-item-right"]},d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("edit-place-name",{favourite:t}),className:Mu["favourite-edit-list-item-edit"],onClick:()=>this.props.onEditSelected(t),onKeyDown:e=>{Nu(e)&&this.props.onEditSelected(t)}},d.default.createElement(p.default,{img:"edit"})),d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("delete-place-name",{favourite:t}),className:Mu["favourite-edit-list-item-remove"],onClick:()=>this.setState({selectedFavourite:t,showDeletePlaceModal:!0}),onKeyDown:e=>{Nu(e)&&this.setState({selectedFavourite:t,showDeletePlaceModal:!0})}},d.default.createElement(p.default,{img:"trash"}))))})),b(this,"renderFavouriteList",(()=>{const{isLoading:t}=this.props,{favourites:e}=this.state;return d.default.createElement("div",{className:Mu["favourite-edit-list-container"]},d.default.createElement(v.default,{visible:t},d.default.createElement(i.ReactSortable,{className:Mu["favourite-edit-list"],tag:"ul",list:e,setList:t=>this.setState({favourites:t}),animation:200,handle:`.${Mu["favourite-edit-list-item-left"]}`},e.map(((t,e)=>this.renderFavouriteListItem(t,e))))))})),b(this,"renderDeleteFavouriteModal",(t=>d.default.createElement(y.default,{appElement:this.props.appElement,headerText:this.translate("delete-place-header"),handleClose:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1},(()=>this.props.handleClose())),isModalOpen:this.state.showDeletePlaceModal,dialogContent:t?`${t.name}: ${t.address}`:"",primaryButtonText:this.translate("delete"),primaryButtonOnClick:()=>{this.props.deleteFavourite(t),this.setState({selectedFavourite:null,showDeletePlaceModal:!1})},secondaryButtonText:this.translate("cancel"),secondaryButtonOnClick:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1}),colors:this.props.colors,fontWeights:this.props.fontWeights,lang:this.props.lang}))),b(this,"closeModal",(()=>{this.props.handleClose();const t=this.state.favourites.map((t=>lu(t,["chosen","selected"])));Ti(t,this.props.favourites)||this.props.updateFavourites(t)})),b(this,"renderModalContent",(()=>{const{fontWeights:t}=this.props,{primary:e,hover:r}=this.props.colors,n={headerText:this.translate("edit-places"),renderList:this.renderFavouriteList},i={"--color":e,"--hover-color":r,"--font-weight-medium":t.medium};return d.default.createElement("div",{style:i},d.default.createElement(Ou,n))})),this.state={favourites:t.favourites,showDeletePlaceModal:!1,selectedFavourite:null}}static getDerivedStateFromProps(t,e){const r=t.favourites,n=e.favourites;return oo(Mn(r,n,Ti))&&oo(Mn(n,r,Ti))?null:(oo(r)&&t.handleClose(),{favourites:r})}render(){const{isMobile:t}=this.props,{showDeletePlaceModal:e,selectedFavourite:r}=this.state;return d.default.createElement(_.default,{appElement:this.props.appElement,contentLabel:this.translate("edit-modal-on-open"),closeButtonLabel:this.translate("close-modal"),variant:t?"large":"small",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),!e&&this.renderModalContent())}}b(Pu,"defaultProps",{lang:"fi",isMobile:!1,colors:u.defaultColors,fontWeights:{medium:500}}),"production"!==process.env.NODE_ENV&&(Pu.propTypes={handleClose:f.default.func.isRequired,updateFavourites:f.default.func.isRequired,deleteFavourite:f.default.func.isRequired,onEditSelected:f.default.func.isRequired,favourites:f.default.arrayOf(f.default.shape({type:f.default.string,address:f.default.string,gtfsId:f.default.string,gid:f.default.string,lat:f.default.number,lon:f.default.number,name:f.default.string,selectedIconId:f.default.string,favouriteId:f.default.string,layer:f.default.string})).isRequired,lang:f.default.string,t:f.default.func.isRequired,appElement:f.default.string.isRequired,isModalOpen:f.default.bool.isRequired,isMobile:f.default.bool,isLoading:f.default.bool.isRequired,colors:f.default.objectOf(f.default.string),fontWeights:f.default.shape({medium:f.default.number})});const Iu=n.withTranslation()(Pu);t.default=t=>d.default.createElement(n.I18nextProvider,{i18n:Eu},d.default.createElement(Iu,t)),Object.defineProperty(t,"__esModule",{value:!0})}));
7
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmluZEluZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbGFzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRGlmZmVyZW5jZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNFcXVhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VtcHR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9sc0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVEYXRhVmlldy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVPYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnbkluLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVCdWZmZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9scy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jdXN0b21PbWl0Q2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbnNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbm9vcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdW5pcVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5pcS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jbG9uZURlZXAuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vZGFsQ29udGVudC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9oZWxwZXJzL2kxOG4uanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5YWJsZTtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJc05hTiA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hTicpLFxuICAgIHN0cmljdEluZGV4T2YgPSByZXF1aXJlKCcuL19zdHJpY3RJbmRleE9mJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUluZGV4T2Y7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaWN0SW5kZXhPZjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0ZsYXR0ZW5hYmxlID0gcmVxdWlyZSgnLi9faXNGbGF0dGVuYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGggc3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3MuXG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzU3RyaWN0KSB7XG4gICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmxhdHRlbjtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxhc3Q7XG4iLCJ2YXIgYmFzZURpZmZlcmVuY2UgPSByZXF1aXJlKCcuL19iYXNlRGlmZmVyZW5jZScpLFxuICAgIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmBcbiAqIHdoaWNoIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgIHRvIGB2YWx1ZXNgLiBUaGUgb3JkZXIgYW5kXG4gKiByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvclxuICogaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsV2l0aGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gKlxuICogXy5kaWZmZXJlbmNlV2l0aChvYmplY3RzLCBbeyAneCc6IDEsICd5JzogMiB9XSwgXy5pc0VxdWFsKTtcbiAqIC8vID0+IFt7ICd4JzogMiwgJ3knOiAxIH1dXG4gKi9cbnZhciBkaWZmZXJlbmNlV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KHZhbHVlcyk7XG4gIGlmIChpc0FycmF5TGlrZU9iamVjdChjb21wYXJhdG9yKSkge1xuICAgIGNvbXBhcmF0b3IgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgOiBbXTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZlcmVuY2VXaXRoO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEFycmF5cztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxCeVRhZztcbiIsIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldDtcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwidmFyIGJhc2VJc0VxdWFsRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsRGVlcCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsO1xuIiwidmFyIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICpcbiAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICogcHJvcGVydGllcy5cbiAqXG4gKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbXB0eShudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkodHJ1ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUuc3BsaWNlID09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5zaXplO1xuICB9XG4gIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFbXB0eTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzSW4gPSByZXF1aXJlKCcuL19iYXNlS2V5c0luJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNJbjtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG4iLCJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKSxcbiAgICBjbG9uZURhdGFWaWV3ID0gcmVxdWlyZSgnLi9fY2xvbmVEYXRhVmlldycpLFxuICAgIGNsb25lUmVnRXhwID0gcmVxdWlyZSgnLi9fY2xvbmVSZWdFeHAnKSxcbiAgICBjbG9uZVN5bWJvbCA9IHJlcXVpcmUoJy4vX2Nsb25lU3ltYm9sJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUJ5VGFnO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVEYXRhVmlldztcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVSZWdFeHA7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgYHN5bWJvbGAgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3ltYm9sIFRoZSBzeW1ib2wgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkge1xuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVN5bWJvbDtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIGJhc2VJc01hcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc01hcDtcbiIsInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNNYXA7XG4iLCJ2YXIgYmFzZUlzU2V0ID0gcmVxdWlyZSgnLi9fYmFzZUlzU2V0JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1NldChuZXcgU2V0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU2V0O1xuIiwidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1NldDtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbnZhciBjbG9uZWFibGVUYWdzID0ge307XG5jbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG5jbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9XG5jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbmNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbmNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG5jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICogdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBEZWVwIGNsb25lXG4gKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2spIHtcbiAgdmFyIHJlc3VsdCxcbiAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICBpc0ZsYXQgPSBiaXRtYXNrICYgQ0xPTkVfRkxBVF9GTEFHLFxuICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICBpZiAoY3VzdG9taXplcikge1xuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcbiAgfVxuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNBcnIpIHtcbiAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc0RlZXApIHtcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xuICAgIH1cbiAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICByZXN1bHQgPSAoaXNGbGF0IHx8IGlzRnVuYykgPyB7fSA6IGluaXRDbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgPyBjb3B5U3ltYm9sc0luKHZhbHVlLCBiYXNlQXNzaWduSW4ocmVzdWx0LCB2YWx1ZSkpXG4gICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUpO1xuICBpZiAoc3RhY2tlZCkge1xuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG4gIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSkge1xuICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc01hcCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUVhY2g7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25JbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25JbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzSW4oc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9sc0luO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwidmFyIG1lbW9pemVDYXBwZWQgPSByZXF1aXJlKCcuL19tZW1vaXplQ2FwcGVkJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG52YXIgc3RyaW5nVG9QYXRoID0gbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb1BhdGg7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0JyksXG4gICAgYmFzZVNsaWNlID0gcmVxdWlyZSgnLi9fYmFzZVNsaWNlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcGFyZW50IHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIHBhcmVudCB2YWx1ZSBvZi5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwYXJlbnQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHBhcmVudChvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgubGVuZ3RoIDwgMiA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsInZhciBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0Jyk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5vbWl0YCB0byBjdXN0b21pemUgaXRzIGBfLmNsb25lRGVlcGAgdXNlIHRvIG9ubHkgY2xvbmUgcGxhaW5cbiAqIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdW5jbG9uZWQgdmFsdWUgb3IgYHVuZGVmaW5lZGAgdG8gZGVmZXIgY2xvbmluZyB0byBgXy5jbG9uZURlZXBgLlxuICovXG5mdW5jdGlvbiBjdXN0b21PbWl0Q2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3VzdG9tT21pdENsb25lO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLCJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpLFxuICAgIGJhc2VVbnNldCA9IHJlcXVpcmUoJy4vX2Jhc2VVbnNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGN1c3RvbU9taXRDbG9uZSA9IHJlcXVpcmUoJy4vX2N1c3RvbU9taXRDbG9uZScpLFxuICAgIGZsYXRSZXN0ID0gcmVxdWlyZSgnLi9fZmxhdFJlc3QnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBwYXRocyBvZiBgb2JqZWN0YCB0aGF0IGFyZSBub3Qgb21pdHRlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBvbWl0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5vbWl0KG9iamVjdCwgWydhJywgJ2MnXSk7XG4gKiAvLyA9PiB7ICdiJzogJzInIH1cbiAqL1xudmFyIG9taXQgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gIHBhdGhzID0gYXJyYXlNYXAocGF0aHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0pO1xuICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXN1bHQgPSBiYXNlQ2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9taXQ7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIGJhc2VVbmlxID0gcmVxdWlyZSgnLi9fYmFzZVVuaXEnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LlRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gKlxuICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpO1xuICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XVxuICovXG5mdW5jdGlvbiB1bmlxV2l0aChhcnJheSwgY29tcGFyYXRvcikge1xuICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdW5pcVdpdGg7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKSxcbiAgICBjcmVhdGVTZXQgPSByZXF1aXJlKCcuL19jcmVhdGVTZXQnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gIH1cbiAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgIH1cbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgfVxuICBlbHNlIHtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmlxO1xuIiwidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgIHJlSGFzUmVnRXhwQ2hhciA9IFJlZ0V4cChyZVJlZ0V4cENoYXIuc291cmNlKTtcblxuLyoqXG4gKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gKiBcIj9cIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgYW5kIFwifFwiIGluIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgOiBzdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlUmVnRXhwO1xuIiwidmFyIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gKiBAc2VlIF8uY2xvbmVcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gKlxuICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTtcbiAqIGNvbnNvbGUubG9nKGRlZXBbMF0gPT09IG9iamVjdHNbMF0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlKSB7XG4gIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVEZWVwO1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsYWRtaW4gKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxhZG1pblxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGFkbWluID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VzdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGlmIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyXG4gICAgKTtcbiAgfSk7XG59XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vbW9kYWwtY29udGVudC5zY3NzJztcblxuY29uc3QgTW9kYWxDb250ZW50ID0gKHsgaGVhZGVyVGV4dCwgcmVuZGVyTGlzdCB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbW9kYWwtY29udGVudC1jb250YWluZXInXX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LXRvcCddfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbW9kYWwtY29udGVudC1oZWFkZXInXX0+XG4gICAgICAgICAge2hlYWRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7cmVuZGVyTGlzdCgpfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuTW9kYWxDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgaGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZW5kZXJMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxDb250ZW50O1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnV29sbGVuIFNpZSBkZW4gRmF2b3JpdGVuIGzDtnNjaGVuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnTMO2c2NoZSBGYXZvcml0OiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ0JlYXJiZWl0ZSBGYXZvcml0ZW4nLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdCZWFyYmVpdGUgRmF2b3JpdDoge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnRmF2b3JpdGVuIGJlYXJiZWl0ZW4uJyxcbiAgICAgICdjaG9vc2UtaWNvbic6ICdXw6RobGUgZGFzIFN5bWJvbCBmw7xyIGRpZXNlbiBPcnQnLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1NjaGxpZcOfZSBkZW4gRGlhbG9nJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdXw6RobGVuIFNpZSBlaW5lbiBOYW1lIGbDvHIgZGllc2VuIE9ydCAob3B0aW9uYWwpJyxcbiAgICAgIHNhdmU6ICdTcGVpY2hlcm4nLFxuICAgICAgJ3NhdmUtcGxhY2UnOiAnRmF2b3JpdCBzcGVpY2hlcm4nLFxuICAgIH0sXG4gIH0sXG4gIGVuOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoZSBwbGFjZT8nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ0RlbGV0ZSBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdFZGl0IHBsYWNlcycsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm91cml0ZSBlZGl0aW5nIG1vZGFsLicsXG4gICAgICAnY2hvb3NlLWljb24nOiBcIlNlbGVjdCB0aGUgcGxhY2UncyBpY29uXCIsXG4gICAgICAnY2xvc2UtbW9kYWwnOiAnQ2xvc2UgdGhlIG1vZGFsJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdHaXZlIHRoZSBuYW1lIGEgcGxhY2UgKG9wdGlvbmFsKScsXG4gICAgICBzYXZlOiAnU2F2ZScsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdTYXZlIHBsYWNlJyxcbiAgICAgIHVwOiAnTW92ZSBmYXZvdXJpdGUgdXAnLFxuICAgICAgZG93bjogJ01vdmUgZmF2b3VyaXRlIGRvd24nLFxuICAgIH0sXG4gIH0sXG4gIGZpOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0hhbHVhdGtvIHBvaXN0YWEgcGFpa2FuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnUG9pc3RhIHBhaWtrYToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdNdW9ra2FhIHBhaWtrb2phJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnTXVva2thYSBwYWlra2FhOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdTdW9zaWtraWVuIG11b2trYXVzIG1vZGFhbGkuJyxcbiAgICAgICdjaG9vc2UtaWNvbic6ICdWYWxpdHNlIHBhaWthbiBrdXZha2UnLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1N1bGplIG1vZGFhbGknLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ0FubmEgcGFpa2FsbGUgbmltaSAodmFwYWFlaHRvaW5lbiknLFxuICAgICAgc2F2ZTogJ1RhbGxlbm5hJyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1RhbGxlbm5hIHBhaWtrYScsXG4gICAgICB1cDogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgeWzDtnDDpGluJyxcbiAgICAgIGRvd246ICdTaWlycsOkIHN1b3Npa2tpc2lqYWludGlhIGFsYXNww6RpbicsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQW51bHVqJyxcbiAgICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0N6eSBuYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdG8gbWllanNjZT8nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ1VzdcWEIG1pZWpzY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnRWR5dHVqIG1pZWpzY2EnLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdFZHl0dWogbWllanNjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnTW9kYWwgZWR5Y2ppIHVsdWJpb255Y2guJyxcbiAgICAgICdjaG9vc2UtaWNvbic6ICdXeWJpZXJ6IGlrb27EmSBtaWVqc2NhJyxcbiAgICAgICdjbG9zZS1tb2RhbCc6ICdaYW1rbmlqIG1vZGFsJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdOYWRhaiBuYXp3xJkgbWllanNjdSAob3Bjam9uYWxuZSknLFxuICAgICAgc2F2ZTogJ1phcGlzeicsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdaYXBpc3ogbWllanNjZScsXG4gICAgICB1cDogJ1ByemVuaWXFmyB1bHViaW9uZSB3ecW8ZWonLFxuICAgICAgZG93bjogJ1ByemVuaWXFmyB1bHViaW9uZSBuacW8ZWonLFxuICAgIH0sXG4gIH0sXG4gIHN2OiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ1ZpbGwgZHUgdGEgYm9ydCBwbGF0c2VuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVGEgYm9ydCBwbGF0c2VuOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ1JlZGlnZXJhIHBsYXRzZXInLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdFZGl0IHBsYWNlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdGYXZvdXJpdGUgZWRpdGluZyBtb2RhbC4nLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1bDpGxqIHBsYXRzZW5zIGlrb24nLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1N0w6RuZyBtb2RhbGVuJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdBbmdlIHBsYXRzZW5zIG5hbW4gKGZyaXZpbGxpZ3QpJyxcbiAgICAgIHNhdmU6ICdTcGFyYScsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdTcGFyYSBwbGF0cycsXG4gICAgICB1cDogJ0ZseXR0YSBmYXZvcml0ZW4gdXBww6V0JyxcbiAgICAgIGRvd246ICdGbHl0dGEgZmF2b3JpdGVuIG5lZMOldCcsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiLyogZXNsaW50IHJlYWN0L2ZvcmJpZC1wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciwgd2l0aFRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBSZWFjdFNvcnRhYmxlIH0gZnJvbSAncmVhY3Qtc29ydGFibGVqcyc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgZGlmZmVyZW5jZVdpdGggZnJvbSAnbG9kYXNoL2RpZmZlcmVuY2VXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBvbWl0IGZyb20gJ2xvZGFzaC9vbWl0JztcbmltcG9ydCBDb250YWluZXJTcGlubmVyIGZyb20gJ0Boc2wtZmkvY29udGFpbmVyLXNwaW5uZXInO1xuaW1wb3J0IE1vZGFsIGZyb20gJ0Boc2wtZmkvbW9kYWwnO1xuaW1wb3J0IEljb24sIHtcbiAgZGVmYXVsdENvbG9ycyxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCB7IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgTW9kYWxDb250ZW50IGZyb20gJy4vaGVscGVycy9Nb2RhbENvbnRlbnQnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi9oZWxwZXJzL2kxOG4nO1xuXG5jb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuY2xhc3MgRmF2b3VyaXRlRWRpdGluZ01vZGFsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAvKiogUmVxdWlyZWQuIENsb3NlIG1vZGFsLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICBoYW5kbGVDbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAvKiogUmVxdWlyZWQuXG4gICAgICogQHR5cGUge2Z1bmN0aW9ufSAqL1xuICAgIHVwZGF0ZUZhdm91cml0ZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICBkZWxldGVGYXZvdXJpdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLiBGdW5jdGlvbiB0aGF0IHRha2VzIHNlbGVjdGVkIGZhdm91cml0ZSBvYmplY3QgYXMgcGFyYW1ldGVyLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICBvbkVkaXRTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAvKiogUmVxdWlyZWQuXG4gICAgICogQHR5cGUge2FycmF5PG9iamVjdD59XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzc1xuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBndGZzSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZ2lkXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGxhdFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb25cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZWxlY3RlZEljb25JZFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmYXZvdXJpdGVJZFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllclxuICAgICAqL1xuICAgIGZhdm91cml0ZXM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZ3Rmc0lkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBnaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBzZWxlY3RlZEljb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZmF2b3VyaXRlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGxheWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgfSksXG4gICAgKS5pc1JlcXVpcmVkLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgaXNNb2RhbE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICAvKiogT3B0aW9uYWwuICovXG4gICAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAvKiogRGVmYXVsdCB2YWx1ZSBpcyA1MDAuICovXG4gICAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBsYW5nOiAnZmknLFxuICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICBjb2xvcnM6IGRlZmF1bHRDb2xvcnMsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGZhdm91cml0ZXM6IHByb3BzLmZhdm91cml0ZXMsXG4gICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UsXG4gICAgICBzZWxlY3RlZEZhdm91cml0ZTogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGNvbnN0IG5leHRGYXZvdXJpdGVzID0gbmV4dFByb3BzLmZhdm91cml0ZXM7XG4gICAgY29uc3QgcHJldkZhdm91cml0ZXMgPSBwcmV2U3RhdGUuZmF2b3VyaXRlcztcbiAgICBpZiAoXG4gICAgICAhaXNFbXB0eShkaWZmZXJlbmNlV2l0aChuZXh0RmF2b3VyaXRlcywgcHJldkZhdm91cml0ZXMsIGlzRXF1YWwpKSB8fFxuICAgICAgIWlzRW1wdHkoZGlmZmVyZW5jZVdpdGgocHJldkZhdm91cml0ZXMsIG5leHRGYXZvdXJpdGVzLCBpc0VxdWFsKSlcbiAgICApIHtcbiAgICAgIGlmIChpc0VtcHR5KG5leHRGYXZvdXJpdGVzKSkge1xuICAgICAgICBuZXh0UHJvcHMuaGFuZGxlQ2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZhdm91cml0ZXM6IG5leHRGYXZvdXJpdGVzLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cmFuc2xhdGUgPSAoaWQsIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50KGlkLCB7XG4gICAgICBsbmc6IHRoaXMucHJvcHMubGFuZyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH07XG5cbiAgbW92ZUZhdm91cml0ZSA9IChpLCBkaXJlY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGZhdm91cml0ZXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgLy8gRWRpdCBjb3B5IG9mIHRoZSBmYXZvdXJpdGVzIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBwcm9wcy5mYXZvdXJpdGVzIHVzZWQgZm9yIHN0YXRlIGluaXRpYWxpemF0aW9uXG4gICAgY29uc3QgZmF2b3VyaXRlc0NvcHkgPSBbLi4uZmF2b3VyaXRlc107XG5cbiAgICBjb25zdCB0bXAgPSBmYXZvdXJpdGVzQ29weVtpICsgZGlyZWN0aW9uXTtcbiAgICBmYXZvdXJpdGVzQ29weVtpICsgZGlyZWN0aW9uXSA9IGZhdm91cml0ZXNDb3B5W2ldO1xuICAgIGZhdm91cml0ZXNDb3B5W2ldID0gdG1wO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGZhdm91cml0ZXM6IGZhdm91cml0ZXNDb3B5IH0pO1xuICB9O1xuXG4gIHJlbmRlckZhdm91cml0ZUxpc3RJdGVtID0gKGZhdm91cml0ZSwgaW5kZXgpID0+IHtcbiAgICBsZXQgaWNvbklkID0gJ3BsYWNlJztcbiAgICBpZiAoZmF2b3VyaXRlLnNlbGVjdGVkSWNvbklkKSB7XG4gICAgICBjb25zdCBwcmVmaXhQb3MgPSBmYXZvdXJpdGUuc2VsZWN0ZWRJY29uSWQuaW5kZXhPZignaWNvbl8nKTtcbiAgICAgIGlmIChwcmVmaXhQb3MgPiAwKSB7XG4gICAgICAgIGljb25JZCA9IGZhdm91cml0ZS5zZWxlY3RlZEljb25JZC5zdWJzdHJpbmcocHJlZml4UG9zICsgNSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFtuYW1lLCBhZGRyZXNzXSA9IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoXG4gICAgICBmYXZvdXJpdGUubmFtZSxcbiAgICAgIGZhdm91cml0ZS5hZGRyZXNzLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxpXG4gICAgICAgIGNsYXNzTmFtZT17Y3goc3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0nXSl9XG4gICAgICAgIGtleT17ZmF2b3VyaXRlLmZhdm91cml0ZUlkfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tbGVmdCddfT5cbiAgICAgICAgICB7aW5kZXggPiAwICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtYXJyb3ctaGlkZGVuJ119XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgndXAnKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUZhdm91cml0ZShpbmRleCwgLTEpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAmdWFycjtcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2luZGV4IDwgdGhpcy5zdGF0ZS5mYXZvdXJpdGVzLmxlbmd0aCAtIDEgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1hcnJvdy1oaWRkZW4nXX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMudHJhbnNsYXRlKCdkb3duJyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVGYXZvdXJpdGUoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAmZGFycjtcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWRyYWcnXX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tZWxsaXBzaXMnXX0+XG4gICAgICAgICAgICAgIDxJY29uIGltZz1cImVsbGlwc2lzXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIHN0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWljb24nXSxcbiAgICAgICAgICAgICAgc3R5bGVzW2ljb25JZF0sXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz17aWNvbklkfSBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcnMucHJpbWFyeX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1jb250ZW50J119PlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tbmFtZSddfT57bmFtZX08L3A+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1hZGRyZXNzJ119PlxuICAgICAgICAgICAge2FkZHJlc3N9XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLXJpZ2h0J119PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMudHJhbnNsYXRlKCdlZGl0LXBsYWNlLW5hbWUnLCB7XG4gICAgICAgICAgICAgIGZhdm91cml0ZSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1lZGl0J119XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9uRWRpdFNlbGVjdGVkKGZhdm91cml0ZSl9XG4gICAgICAgICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkVkaXRTZWxlY3RlZChmYXZvdXJpdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz1cImVkaXRcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMudHJhbnNsYXRlKCdkZWxldGUtcGxhY2UtbmFtZScsIHtcbiAgICAgICAgICAgICAgZmF2b3VyaXRlLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLXJlbW92ZSddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IGZhdm91cml0ZSxcbiAgICAgICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBmYXZvdXJpdGUsXG4gICAgICAgICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9XCJ0cmFzaFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlckZhdm91cml0ZUxpc3QgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBpc0xvYWRpbmcgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBmYXZvdXJpdGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWNvbnRhaW5lciddfT5cbiAgICAgICAgPENvbnRhaW5lclNwaW5uZXIgdmlzaWJsZT17aXNMb2FkaW5nfT5cbiAgICAgICAgICA8UmVhY3RTb3J0YWJsZVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QnXX1cbiAgICAgICAgICAgIHRhZz1cInVsXCJcbiAgICAgICAgICAgIGxpc3Q9e2Zhdm91cml0ZXN9XG4gICAgICAgICAgICBzZXRMaXN0PXtpdGVtcyA9PiB0aGlzLnNldFN0YXRlKHsgZmF2b3VyaXRlczogaXRlbXMgfSl9XG4gICAgICAgICAgICBhbmltYXRpb249ezIwMH1cbiAgICAgICAgICAgIGhhbmRsZT17YC4ke3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWxlZnQnXX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmYXZvdXJpdGVzLm1hcCgoZmF2b3VyaXRlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGYXZvdXJpdGVMaXN0SXRlbShmYXZvdXJpdGUsIGluZGV4KTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvUmVhY3RTb3J0YWJsZT5cbiAgICAgICAgPC9Db250YWluZXJTcGlubmVyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbCA9IGZhdm91cml0ZSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgIGhlYWRlclRleHQ9e3RoaXMudHJhbnNsYXRlKCdkZWxldGUtcGxhY2UtaGVhZGVyJyl9XG4gICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7IHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLCBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UgfSxcbiAgICAgICAgICAgICgpID0+IHRoaXMucHJvcHMuaGFuZGxlQ2xvc2UoKSxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaXNNb2RhbE9wZW49e3RoaXMuc3RhdGUuc2hvd0RlbGV0ZVBsYWNlTW9kYWx9XG4gICAgICAgIGRpYWxvZ0NvbnRlbnQ9e1xuICAgICAgICAgIGZhdm91cml0ZSA/IGAke2Zhdm91cml0ZS5uYW1lfTogJHtmYXZvdXJpdGUuYWRkcmVzc31gIDogJydcbiAgICAgICAgfVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17dGhpcy50cmFuc2xhdGUoJ2RlbGV0ZScpfVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvcHMuZGVsZXRlRmF2b3VyaXRlKGZhdm91cml0ZSk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZTogbnVsbCxcbiAgICAgICAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17dGhpcy50cmFuc2xhdGUoJ2NhbmNlbCcpfVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBjb2xvcnM9e3RoaXMucHJvcHMuY29sb3JzfVxuICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNsb3NlTW9kYWwgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVDbG9zZSgpO1xuICAgIGNvbnN0IG9taXR0ZWRGYXZvdXJpdGVzID0gdGhpcy5zdGF0ZS5mYXZvdXJpdGVzLm1hcChpdGVtID0+XG4gICAgICBvbWl0KGl0ZW0sIFsnY2hvc2VuJywgJ3NlbGVjdGVkJ10pLFxuICAgICk7XG4gICAgaWYgKCFpc0VxdWFsKG9taXR0ZWRGYXZvdXJpdGVzLCB0aGlzLnByb3BzLmZhdm91cml0ZXMpKSB7XG4gICAgICB0aGlzLnByb3BzLnVwZGF0ZUZhdm91cml0ZXMob21pdHRlZEZhdm91cml0ZXMpO1xuICAgIH1cbiAgfTtcblxuICByZW5kZXJNb2RhbENvbnRlbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmb250V2VpZ2h0cyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHByaW1hcnksIGhvdmVyIH0gPSB0aGlzLnByb3BzLmNvbG9ycztcbiAgICBjb25zdCBtb2RhbFByb3BzID0ge1xuICAgICAgaGVhZGVyVGV4dDogdGhpcy50cmFuc2xhdGUoJ2VkaXQtcGxhY2VzJyksXG4gICAgICByZW5kZXJMaXN0OiB0aGlzLnJlbmRlckZhdm91cml0ZUxpc3QsXG4gICAgfTtcbiAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICctLWNvbG9yJzogcHJpbWFyeSxcbiAgICAgICctLWhvdmVyLWNvbG9yJzogaG92ZXIsXG4gICAgICAnLS1mb250LXdlaWdodC1tZWRpdW0nOiBmb250V2VpZ2h0cy5tZWRpdW0sXG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3R5bGV9PlxuICAgICAgICA8TW9kYWxDb250ZW50IHsuLi5tb2RhbFByb3BzfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc01vYmlsZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNob3dEZWxldGVQbGFjZU1vZGFsLCBzZWxlY3RlZEZhdm91cml0ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsXG4gICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgY29udGVudExhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZWRpdC1tb2RhbC1vbi1vcGVuJyl9XG4gICAgICAgIGNsb3NlQnV0dG9uTGFiZWw9e3RoaXMudHJhbnNsYXRlKCdjbG9zZS1tb2RhbCcpfVxuICAgICAgICB2YXJpYW50PXtpc01vYmlsZSA/ICdsYXJnZScgOiAnc21hbGwnfVxuICAgICAgICBpc09wZW49e3RoaXMucHJvcHMuaXNNb2RhbE9wZW59XG4gICAgICAgIG9uQ3Jvc3NDbGljaz17dGhpcy5jbG9zZU1vZGFsfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbChzZWxlY3RlZEZhdm91cml0ZSl9XG4gICAgICAgIHshc2hvd0RlbGV0ZVBsYWNlTW9kYWwgJiYgdGhpcy5yZW5kZXJNb2RhbENvbnRlbnQoKX1cbiAgICAgIDwvTW9kYWw+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBGYXZvdXJpdGVFZGl0aW5nTW9kYWxXaXRoVHJhbnNsYXRpb24gPSB3aXRoVHJhbnNsYXRpb24oKShcbiAgRmF2b3VyaXRlRWRpdGluZ01vZGFsLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgcHJvcHMgPT4gKFxuICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgIDxGYXZvdXJpdGVFZGl0aW5nTW9kYWxXaXRoVHJhbnNsYXRpb24gey4uLnByb3BzfSAvPlxuICA8L0kxOG5leHRQcm92aWRlcj5cbik7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjbGFzc05hbWVzIiwiY2xhc3NlcyIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImFwcGx5IiwidG9TdHJpbmciLCJpbmNsdWRlcyIsImtleSIsIm5ld0NsYXNzIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiLCJ3aW5kb3ciLCJmcmVlR2xvYmFsIiwiZ2xvYmFsIiwiX2ZyZWVHbG9iYWwiLCJyZXF1aXJlJCQwIiwiZnJlZVNlbGYiLCJzZWxmIiwicm9vdCIsIkZ1bmN0aW9uIiwiX3Jvb3QiLCJfU3ltYm9sIiwiZ2V0UmF3VGFnIiwib2JqZWN0UHJvdG8iLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJ1bmRlZmluZWQiLCJfZ2V0UmF3VGFnIiwiaXNPd24iLCJ0YWciLCJ1bm1hc2tlZCIsInJlc3VsdCIsInJlcXVpcmUkJDEiLCJvYmplY3RUb1N0cmluZyIsIl9vYmplY3RUb1N0cmluZyIsInJlcXVpcmUkJDIiLCJfYmFzZUdldFRhZyIsImlzT2JqZWN0XzEiLCJ0eXBlIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0IiwiaXNGdW5jdGlvbl8xIiwidWlkIiwiY29yZUpzRGF0YSIsIl9jb3JlSnNEYXRhIiwibWFza1NyY0tleSIsImV4ZWMiLCJrZXlzIiwiSUVfUFJPVE8iLCJfaXNNYXNrZWQiLCJmdW5jIiwiZnVuY1RvU3RyaW5nIiwiX3RvU291cmNlIiwiYmFzZUlzTmF0aXZlIiwiaXNGdW5jdGlvbiIsImlzTWFza2VkIiwidG9Tb3VyY2UiLCJyZXF1aXJlJCQzIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwicmVJc05hdGl2ZSIsIlJlZ0V4cCIsInJlcGxhY2UiLCJfYmFzZUlzTmF0aXZlIiwidGVzdCIsImdldFZhbHVlIiwiX2dldFZhbHVlIiwib2JqZWN0IiwiX2dldE5hdGl2ZSIsIm5hdGl2ZUNyZWF0ZSIsImdldE5hdGl2ZSIsIl9uYXRpdmVDcmVhdGUiLCJoYXNoQ2xlYXIiLCJfaGFzaENsZWFyIiwidGhpcyIsIl9fZGF0YV9fIiwic2l6ZSIsImhhc2hEZWxldGUiLCJfaGFzaERlbGV0ZSIsImhhcyIsImhhc2hHZXQiLCJfaGFzaEdldCIsImRhdGEiLCJoYXNoSGFzIiwiX2hhc2hIYXMiLCJoYXNoU2V0IiwiX2hhc2hTZXQiLCJyZXF1aXJlJCQ0IiwiSGFzaCIsImVudHJpZXMiLCJpbmRleCIsImNsZWFyIiwiZW50cnkiLCJzZXQiLCJnZXQiLCJfSGFzaCIsImVxXzEiLCJvdGhlciIsImVxIiwiX2Fzc29jSW5kZXhPZiIsImFycmF5IiwibGlzdENhY2hlQ2xlYXIiLCJfbGlzdENhY2hlQ2xlYXIiLCJsaXN0Q2FjaGVEZWxldGUiLCJhc3NvY0luZGV4T2YiLCJzcGxpY2UiLCJfbGlzdENhY2hlRGVsZXRlIiwicG9wIiwibGlzdENhY2hlR2V0IiwiX2xpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsIl9saXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJfbGlzdENhY2hlU2V0IiwicHVzaCIsIkxpc3RDYWNoZSIsIl9MaXN0Q2FjaGUiLCJNYXAiLCJfTWFwIiwiaXNLZXlhYmxlIiwiX2lzS2V5YWJsZSIsIl9nZXRNYXBEYXRhIiwibWFwIiwibWFwQ2FjaGVDbGVhciIsIl9tYXBDYWNoZUNsZWFyIiwiaGFzaCIsInN0cmluZyIsIm1hcENhY2hlRGVsZXRlIiwiZ2V0TWFwRGF0YSIsIl9tYXBDYWNoZURlbGV0ZSIsIm1hcENhY2hlR2V0IiwiX21hcENhY2hlR2V0IiwibWFwQ2FjaGVIYXMiLCJfbWFwQ2FjaGVIYXMiLCJtYXBDYWNoZVNldCIsIl9tYXBDYWNoZVNldCIsIk1hcENhY2hlIiwiX01hcENhY2hlIiwic2V0Q2FjaGVBZGQiLCJfc2V0Q2FjaGVBZGQiLCJzZXRDYWNoZUhhcyIsIl9zZXRDYWNoZUhhcyIsIlNldENhY2hlIiwidmFsdWVzIiwiYWRkIiwiX1NldENhY2hlIiwiYmFzZUZpbmRJbmRleCIsIl9iYXNlRmluZEluZGV4IiwicHJlZGljYXRlIiwiZnJvbUluZGV4IiwiZnJvbVJpZ2h0IiwiYmFzZUlzTmFOIiwiX2Jhc2VJc05hTiIsInN0cmljdEluZGV4T2YiLCJfc3RyaWN0SW5kZXhPZiIsIl9iYXNlSW5kZXhPZiIsImJhc2VJbmRleE9mIiwiX2FycmF5SW5jbHVkZXMiLCJfYXJyYXlJbmNsdWRlc1dpdGgiLCJjb21wYXJhdG9yIiwiX2FycmF5TWFwIiwiaXRlcmF0ZWUiLCJfYmFzZVVuYXJ5IiwiX2NhY2hlSGFzIiwiY2FjaGUiLCJfYXJyYXlQdXNoIiwib2Zmc2V0IiwiaXNPYmplY3RMaWtlXzEiLCJiYXNlSXNBcmd1bWVudHMiLCJpc09iamVjdExpa2UiLCJfYmFzZUlzQXJndW1lbnRzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpc0FyZ3VtZW50cyIsImlzQXJndW1lbnRzXzEiLCJpc0FycmF5XzEiLCJhcnJheVB1c2giLCJpc0ZsYXR0ZW5hYmxlIiwic3ByZWFkYWJsZVN5bWJvbCIsImlzQ29uY2F0U3ByZWFkYWJsZSIsIl9pc0ZsYXR0ZW5hYmxlIiwiX2Jhc2VGbGF0dGVuIiwiYmFzZUZsYXR0ZW4iLCJkZXB0aCIsImlzU3RyaWN0IiwiaWRlbnRpdHlfMSIsIl9hcHBseSIsInRoaXNBcmciLCJhcmdzIiwibmF0aXZlTWF4IiwiTWF0aCIsIm1heCIsIl9vdmVyUmVzdCIsInN0YXJ0IiwidHJhbnNmb3JtIiwib3RoZXJBcmdzIiwiY29uc3RhbnQiLCJjb25zdGFudF8xIiwiaWRlbnRpdHkiLCJfYmFzZVNldFRvU3RyaW5nIiwiYmFzZVNldFRvU3RyaW5nIiwic2hvcnRPdXQiLCJuYXRpdmVOb3ciLCJEYXRlIiwibm93IiwiX3Nob3J0T3V0IiwiY291bnQiLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCJyZW1haW5pbmciLCJzZXRUb1N0cmluZyIsIl9zZXRUb1N0cmluZyIsImlzTGVuZ3RoXzEiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlXzEiLCJsYXN0XzEiLCJiYXNlRGlmZmVyZW5jZSIsImFycmF5SW5jbHVkZXMiLCJhcnJheUluY2x1ZGVzV2l0aCIsImFycmF5TWFwIiwiYmFzZVVuYXJ5IiwiY2FjaGVIYXMiLCJyZXF1aXJlJCQ1IiwiX2Jhc2VEaWZmZXJlbmNlIiwiaXNDb21tb24iLCJ2YWx1ZXNMZW5ndGgiLCJvdXRlciIsImNvbXB1dGVkIiwidmFsdWVzSW5kZXgiLCJiYXNlUmVzdCIsIm92ZXJSZXN0IiwiX2Jhc2VSZXN0IiwiaXNBcnJheUxpa2VPYmplY3QiLCJpc0FycmF5TGlrZSIsImlzQXJyYXlMaWtlT2JqZWN0XzEiLCJsYXN0IiwiZGlmZmVyZW5jZVdpdGgiLCJkaWZmZXJlbmNlV2l0aF8xIiwic3RhY2tDbGVhciIsIl9zdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJfc3RhY2tEZWxldGUiLCJzdGFja0dldCIsIl9zdGFja0dldCIsInN0YWNrSGFzIiwiX3N0YWNrSGFzIiwic3RhY2tTZXQiLCJfc3RhY2tTZXQiLCJwYWlycyIsIkxBUkdFX0FSUkFZX1NJWkUiLCJTdGFjayIsIl9TdGFjayIsImFycmF5U29tZSIsIl9hcnJheVNvbWUiLCJfZXF1YWxBcnJheXMiLCJiaXRtYXNrIiwiY3VzdG9taXplciIsImVxdWFsRnVuYyIsInN0YWNrIiwiaXNQYXJ0aWFsIiwiYXJyTGVuZ3RoIiwib3RoTGVuZ3RoIiwiYXJyU3RhY2tlZCIsIm90aFN0YWNrZWQiLCJzZWVuIiwiYXJyVmFsdWUiLCJvdGhWYWx1ZSIsImNvbXBhcmVkIiwib3RoSW5kZXgiLCJVaW50OEFycmF5IiwiX1VpbnQ4QXJyYXkiLCJfc2V0VG9BcnJheSIsImZvckVhY2giLCJlcXVhbEFycmF5cyIsIm1hcFRvQXJyYXkiLCJfbWFwVG9BcnJheSIsInNldFRvQXJyYXkiLCJzeW1ib2xQcm90byIsInN5bWJvbFZhbHVlT2YiLCJ2YWx1ZU9mIiwiX2VxdWFsQnlUYWciLCJieXRlTGVuZ3RoIiwiYnl0ZU9mZnNldCIsImJ1ZmZlciIsIm5hbWUiLCJtZXNzYWdlIiwiY29udmVydCIsInN0YWNrZWQiLCJfYmFzZUdldEFsbEtleXMiLCJrZXlzRnVuYyIsInN5bWJvbHNGdW5jIiwic3R1YkFycmF5XzEiLCJhcnJheUZpbHRlciIsIl9hcnJheUZpbHRlciIsInJlc0luZGV4Iiwic3R1YkFycmF5IiwibmF0aXZlR2V0U3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIl9nZXRTeW1ib2xzIiwic3ltYm9sIiwic3R1YkZhbHNlIiwic3R1YkZhbHNlXzEiLCJmcmVlRXhwb3J0cyIsIm5vZGVUeXBlIiwiZnJlZU1vZHVsZSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiZnJlZVByb2Nlc3MiLCJwcm9jZXNzIiwibm9kZVV0aWwiLCJ0eXBlcyIsInJlcXVpcmUiLCJiaW5kaW5nIiwiYmFzZUlzVHlwZWRBcnJheSIsInR5cGVkQXJyYXlUYWdzIiwiX2Jhc2VJc1R5cGVkQXJyYXkiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5XzEiLCJiYXNlVGltZXMiLCJfYmFzZVRpbWVzIiwibiIsImlzSW5kZXgiLCJyZUlzVWludCIsIl9pc0luZGV4IiwiX2FycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJfaXNQcm90b3R5cGUiLCJDdG9yIiwiX292ZXJBcmciLCJpc1Byb3RvdHlwZSIsIm5hdGl2ZUtleXMiLCJvdmVyQXJnIiwiX25hdGl2ZUtleXMiLCJfYmFzZUtleXMiLCJhcnJheUxpa2VLZXlzIiwiYmFzZUtleXMiLCJrZXlzXzEiLCJiYXNlR2V0QWxsS2V5cyIsImdldFN5bWJvbHMiLCJfZ2V0QWxsS2V5cyIsIlNldCIsIl9TZXQiLCJEYXRhVmlldyIsIl9EYXRhVmlldyIsIlByb21pc2UiLCJfUHJvbWlzZSIsIldlYWtNYXAiLCJfV2Vha01hcCIsInJlcXVpcmUkJDYiLCJtYXBUYWciLCJwcm9taXNlVGFnIiwic2V0VGFnIiwid2Vha01hcFRhZyIsImRhdGFWaWV3VGFnIiwiZGF0YVZpZXdDdG9yU3RyaW5nIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwiZ2V0VGFnIiwiQXJyYXlCdWZmZXIiLCJyZXNvbHZlIiwiY3RvclN0cmluZyIsIl9nZXRUYWciLCJlcXVhbEJ5VGFnIiwiZXF1YWxPYmplY3RzIiwiZ2V0QWxsS2V5cyIsIl9lcXVhbE9iamVjdHMiLCJvYmpQcm9wcyIsIm9iakxlbmd0aCIsIm9ialN0YWNrZWQiLCJza2lwQ3RvciIsIm9ialZhbHVlIiwib2JqQ3RvciIsIm90aEN0b3IiLCJyZXF1aXJlJCQ3IiwiYXJnc1RhZyIsImFycmF5VGFnIiwib2JqZWN0VGFnIiwiX2Jhc2VJc0VxdWFsRGVlcCIsIm9iaklzQXJyIiwib3RoSXNBcnIiLCJvYmpUYWciLCJvdGhUYWciLCJvYmpJc09iaiIsIm90aElzT2JqIiwiaXNTYW1lVGFnIiwib2JqSXNXcmFwcGVkIiwib3RoSXNXcmFwcGVkIiwib2JqVW53cmFwcGVkIiwib3RoVW53cmFwcGVkIiwiYmFzZUlzRXF1YWwiLCJiYXNlSXNFcXVhbERlZXAiLCJfYmFzZUlzRXF1YWwiLCJpc0VxdWFsXzEiLCJpc0VtcHR5XzEiLCJfYmFzZUFzc2lnblZhbHVlIiwiYmFzZUFzc2lnblZhbHVlIiwiX2Fzc2lnblZhbHVlIiwiYXNzaWduVmFsdWUiLCJfY29weU9iamVjdCIsInNvdXJjZSIsInByb3BzIiwiaXNOZXciLCJuZXdWYWx1ZSIsIm5hdGl2ZUtleXNJbiIsIl9uYXRpdmVLZXlzSW4iLCJfYmFzZUtleXNJbiIsImlzUHJvdG8iLCJiYXNlS2V5c0luIiwia2V5c0luXzEiLCJnZXRQcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsIl9nZXRQcm90b3R5cGUiLCJfZ2V0U3ltYm9sc0luIiwiZ2V0U3ltYm9sc0luIiwia2V5c0luIiwiX2dldEFsbEtleXNJbiIsIl9jbG9uZUFycmF5QnVmZmVyIiwiYXJyYXlCdWZmZXIiLCJjbG9uZUFycmF5QnVmZmVyIiwiY2xvbmVEYXRhVmlldyIsIl9jbG9uZURhdGFWaWV3IiwiZGF0YVZpZXciLCJpc0RlZXAiLCJjbG9uZVJlZ0V4cCIsInJlRmxhZ3MiLCJfY2xvbmVSZWdFeHAiLCJyZWdleHAiLCJsYXN0SW5kZXgiLCJjbG9uZVN5bWJvbCIsIl9jbG9uZVN5bWJvbCIsImNsb25lVHlwZWRBcnJheSIsIl9jbG9uZVR5cGVkQXJyYXkiLCJ0eXBlZEFycmF5IiwiX2luaXRDbG9uZUJ5VGFnIiwiYmFzZUNyZWF0ZSIsIm9iamVjdENyZWF0ZSIsImNyZWF0ZSIsInByb3RvIiwiX2Jhc2VDcmVhdGUiLCJfaW5pdENsb25lT2JqZWN0IiwiYmFzZUlzTWFwIiwiX2Jhc2VJc01hcCIsIm5vZGVJc01hcCIsImlzTWFwIiwiaXNNYXBfMSIsImJhc2VJc1NldCIsIl9iYXNlSXNTZXQiLCJub2RlSXNTZXQiLCJpc1NldCIsImlzU2V0XzEiLCJhcnJheUVhY2giLCJfYXJyYXlFYWNoIiwiYmFzZUFzc2lnbiIsImNvcHlPYmplY3QiLCJfYmFzZUFzc2lnbiIsImJhc2VBc3NpZ25JbiIsIl9iYXNlQXNzaWduSW4iLCJjbG9uZUJ1ZmZlciIsImFsbG9jVW5zYWZlIiwic2xpY2UiLCJjb3B5IiwiY29weUFycmF5IiwiX2NvcHlBcnJheSIsImNvcHlTeW1ib2xzIiwiX2NvcHlTeW1ib2xzIiwiY29weVN5bWJvbHNJbiIsIl9jb3B5U3ltYm9sc0luIiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJnZXRBbGxLZXlzSW4iLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwiaW5pdENsb25lQXJyYXkiLCJfaW5pdENsb25lQXJyYXkiLCJpbnB1dCIsInJlcXVpcmUkJDEyIiwiaW5pdENsb25lQnlUYWciLCJyZXF1aXJlJCQxMyIsImluaXRDbG9uZU9iamVjdCIsInJlcXVpcmUkJDE0IiwicmVxdWlyZSQkMTUiLCJyZXF1aXJlJCQxNiIsInJlcXVpcmUkJDE3IiwicmVxdWlyZSQkMTgiLCJyZXF1aXJlJCQxOSIsInJlcXVpcmUkJDIwIiwicmVxdWlyZSQkMjEiLCJmdW5jVGFnIiwiY2xvbmVhYmxlVGFncyIsIl9iYXNlQ2xvbmUiLCJiYXNlQ2xvbmUiLCJpc0ZsYXQiLCJpc0Z1bGwiLCJpc0Z1bmMiLCJzdWJWYWx1ZSIsImlzU3ltYm9sXzEiLCJtZW1vaXplIiwicmVzb2x2ZXIiLCJtZW1vaXplZCIsIkNhY2hlIiwibWVtb2l6ZV8xIiwibWVtb2l6ZUNhcHBlZCIsIl9tZW1vaXplQ2FwcGVkIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsInN0cmluZ1RvUGF0aCIsImNoYXJDb2RlQXQiLCJtYXRjaCIsIm51bWJlciIsInF1b3RlIiwic3ViU3RyaW5nIiwiX3N0cmluZ1RvUGF0aCIsImJhc2VUb1N0cmluZyIsImlzU3ltYm9sIiwic3ltYm9sVG9TdHJpbmciLCJfYmFzZVRvU3RyaW5nIiwidG9TdHJpbmdfMSIsImlzS2V5IiwicmVJc0RlZXBQcm9wIiwicmVJc1BsYWluUHJvcCIsIl9pc0tleSIsIl9jYXN0UGF0aCIsIl90b0tleSIsImJhc2VHZXQiLCJjYXN0UGF0aCIsInRvS2V5IiwiX2Jhc2VHZXQiLCJwYXRoIiwiYmFzZVNsaWNlIiwiX2Jhc2VTbGljZSIsImVuZCIsIl9wYXJlbnQiLCJpc1BsYWluT2JqZWN0Iiwib2JqZWN0Q3RvclN0cmluZyIsImlzUGxhaW5PYmplY3RfMSIsIl9jdXN0b21PbWl0Q2xvbmUiLCJmbGF0dGVuIiwiZmxhdHRlbl8xIiwiX2ZsYXRSZXN0IiwiYmFzZVVuc2V0IiwicGFyZW50IiwiX2Jhc2VVbnNldCIsImN1c3RvbU9taXRDbG9uZSIsImZsYXRSZXN0Iiwib21pdCIsInBhdGhzIiwiQ0xPTkVfREVFUF9GTEFHIiwib21pdF8xIiwibm9vcCIsIm5vb3BfMSIsImNyZWF0ZVNldCIsIl9jcmVhdGVTZXQiLCJiYXNlVW5pcSIsIl9iYXNlVW5pcSIsInNlZW5JbmRleCIsInVuaXFXaXRoXzEiLCJyZVJlZ0V4cENoYXIiLCJyZUhhc1JlZ0V4cENoYXIiLCJlc2NhcGVSZWdFeHBfMSIsImNsb25lRGVlcF8xIiwiZ2V0TG9jYWxhZG1pbiIsInN1Z2dlc3Rpb24iLCJsb2NhbGFkbWluIiwiYWRkcmVzcyIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiZ2V0U3RvcENvZGUiLCJpZCIsImNvZGUiLCJpbmRleE9mIiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsInNwbGl0IiwiZXNjYXBlUmVnRXhwIiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImRvY3VtZW50IiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsInBsYWluIiwibGF5ZXIiLCJsYWJlbElkIiwic2hvcnROYW1lIiwiZ3Rmc0lkIiwibW9kZSIsInRvTG93ZXJDYXNlIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJsYWJlbCIsIml0ZW0iLCJjbG9uZURlZXAiLCJNb2RhbENvbnRlbnQiLCJoZWFkZXJUZXh0IiwicmVuZGVyTGlzdCIsIlJlYWN0IiwiY2xhc3NOYW1lIiwic3R5bGVzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiaTE4biIsImNyZWF0ZUluc3RhbmNlIiwiZmFsbGJhY2tMbmciLCJyZXNvdXJjZXMiLCJkZSIsInRyYW5zbGF0aW9uIiwiY2FuY2VsIiwiZGVsZXRlIiwic2F2ZSIsImVuIiwidXAiLCJkb3duIiwiZmkiLCJwbCIsInN2IiwiZGVmYXVsdE5TIiwicmVhY3QiLCJ1c2VTdXNwZW5zZSIsImluaXQiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsIndoaWNoIiwia2V5Q29kZSIsImNvbmNhdCIsInByZXZlbnREZWZhdWx0IiwiRmF2b3VyaXRlRWRpdGluZ01vZGFsIiwiQ29tcG9uZW50Iiwic3VwZXIiLCJvcHRpb25zIiwiX29iamVjdFNwcmVhZCIsImxuZyIsImxhbmciLCJkaXJlY3Rpb24iLCJmYXZvdXJpdGVzIiwic3RhdGUiLCJmYXZvdXJpdGVzQ29weSIsInRtcCIsInNldFN0YXRlIiwiZmF2b3VyaXRlIiwiaWNvbklkIiwic2VsZWN0ZWRJY29uSWQiLCJwcmVmaXhQb3MiLCJjeCIsImZhdm91cml0ZUlkIiwidHJhbnNsYXRlIiwib25DbGljayIsIm1vdmVGYXZvdXJpdGUiLCJJY29uIiwiaW1nIiwiY29sb3IiLCJjb2xvcnMiLCJwcmltYXJ5Iiwicm9sZSIsInRhYkluZGV4Iiwib25FZGl0U2VsZWN0ZWQiLCJvbktleURvd24iLCJzZWxlY3RlZEZhdm91cml0ZSIsInNob3dEZWxldGVQbGFjZU1vZGFsIiwiaXNMb2FkaW5nIiwiQ29udGFpbmVyU3Bpbm5lciIsInZpc2libGUiLCJSZWFjdFNvcnRhYmxlIiwibGlzdCIsInNldExpc3QiLCJpdGVtcyIsImFuaW1hdGlvbiIsImhhbmRsZSIsInJlbmRlckZhdm91cml0ZUxpc3RJdGVtIiwiRGlhbG9nTW9kYWwiLCJhcHBFbGVtZW50IiwiaGFuZGxlQ2xvc2UiLCJpc01vZGFsT3BlbiIsImRpYWxvZ0NvbnRlbnQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwiZGVsZXRlRmF2b3VyaXRlIiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJmb250V2VpZ2h0cyIsIm9taXR0ZWRGYXZvdXJpdGVzIiwiaXNFcXVhbCIsInVwZGF0ZUZhdm91cml0ZXMiLCJob3ZlciIsIm1vZGFsUHJvcHMiLCJyZW5kZXJGYXZvdXJpdGVMaXN0IiwibWVkaXVtIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwicHJldlN0YXRlIiwibmV4dEZhdm91cml0ZXMiLCJwcmV2RmF2b3VyaXRlcyIsImlzRW1wdHkiLCJyZW5kZXIiLCJpc01vYmlsZSIsIk1vZGFsIiwiY29udGVudExhYmVsIiwiY2xvc2VCdXR0b25MYWJlbCIsInZhcmlhbnQiLCJpc09wZW4iLCJvbkNyb3NzQ2xpY2siLCJjbG9zZU1vZGFsIiwicmVuZGVyRGVsZXRlRmF2b3VyaXRlTW9kYWwiLCJyZW5kZXJNb2RhbENvbnRlbnQiLCJkZWZhdWx0Q29sb3JzIiwiYXJyYXlPZiIsInNoYXBlIiwiZ2lkIiwibGF0IiwibG9uIiwiYm9vbCIsIm9iamVjdE9mIiwiRmF2b3VyaXRlRWRpdGluZ01vZGFsV2l0aFRyYW5zbGF0aW9uIiwid2l0aFRyYW5zbGF0aW9uIiwiSTE4bmV4dFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoibWpDQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2YsRUFBRyxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3RILEVBQUtELEVBQVFDLEVBQ2IsQ0NOQSxTQUFTSyxFQUFjQyxHQUNyQixJQUFJQyxFQ0ZOLFNBQXFCRCxFQUFHRSxHQUN0QixHQUFJLFVBQVlULEVBQVFPLEtBQU9BLEVBQUcsT0FBT0EsRUFDekMsSUFBSUcsRUFBSUgsRUFBRUwsT0FBT1MsYUFDakIsUUFBSSxJQUFXRCxFQUFHLENBQ2hCLElBQUlGLEVBQUlFLEVBQUVFLEtBQUtMLEVBQUdFLEdBQUssV0FDdkIsR0FBSSxVQUFZVCxFQUFRUSxHQUFJLE9BQU9BLEVBQ25DLE1BQU0sSUFBSUssVUFBVSwrQ0FDckIsQ0FDRCxPQUFRLFdBQWFKLEVBQUlLLE9BQVNDLFFBQVFSLEVBQzVDLENEUFVJLENBQVlKLEVBQUcsVUFDdkIsTUFBTyxVQUFZUCxFQUFRUSxHQUFLQSxFQUFJQSxFQUFJLEVBQzFDLENFSkEsU0FBU1EsRUFBZ0JOLEVBQUdELEVBQUdGLEdBQzdCLE9BQVFFLEVBQUlILEVBQWNHLE1BQU9DLEVBQUlPLE9BQU9DLGVBQWVSLEVBQUdELEVBQUcsQ0FDL0RVLE1BQU9aLEVBQ1BhLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxVQUFVLElBQ1BaLEVBQUVELEdBQUtGLEVBQUdHLENBQ2pCOzs7OztrYkNEQyxXQUdBLElBQUlhLEVB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