UNPKG

worker-echarts

Version:
1 lines 1.1 MB
!function(l,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):((l="undefined"!=typeof globalThis?globalThis:l||self).index=l.index||{},l.index.umd=l.index.umd||{},l.index.umd.js=b())}(this,(function(){"use strict";function l(l,b,Z,d,G,X,m){try{var W=l[X](m),p=W.value}catch(l){return void Z(l)}W.done?b(p):Promise.resolve(p).then(d,G)}function b(b){return function(){var Z=this,d=arguments;return new Promise((function(G,X){var m=b.apply(Z,d);function W(b){l(m,G,X,W,p,"next",b)}function p(b){l(m,G,X,W,p,"throw",b)}W(void 0)}))}}function Z(l,b){(null==b||b>l.length)&&(b=l.length);for(var Z=0,d=new Array(b);Z<b;Z++)d[Z]=l[Z];return d}function d(l,b){if(l){if("string"==typeof l)return Z(l,b);var d=Object.prototype.toString.call(l).slice(8,-1);return"Object"===d&&l.constructor&&(d=l.constructor.name),"Map"===d||"Set"===d?Array.from(l):"Arguments"===d||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(d)?Z(l,b):void 0}}function G(l){return function(l){if(Array.isArray(l))return Z(l)}(l)||function(l){if("undefined"!=typeof Symbol&&null!=l[Symbol.iterator]||null!=l["@@iterator"])return Array.from(l)}(l)||d(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function X(l,b){return function(l){if(Array.isArray(l))return l}(l)||function(l,b){var Z=null==l?null:"undefined"!=typeof Symbol&&l[Symbol.iterator]||l["@@iterator"];if(null!=Z){var d,G,X=[],m=!0,W=!1;try{for(Z=Z.call(l);!(m=(d=Z.next()).done)&&(X.push(d.value),!b||X.length!==b);m=!0);}catch(l){W=!0,G=l}finally{try{m||null==Z.return||Z.return()}finally{if(W)throw G}}return X}}(l,b)||d(l,b)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(l,b){if(!(l instanceof b))throw new TypeError("Cannot call a class as a function")}function W(l,b){for(var Z=0;Z<b.length;Z++){var d=b[Z];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(l,d.key,d)}}var p={exports:{}};!function(l){var b=function(l){var b,Z=Object.prototype,d=Z.hasOwnProperty,G="function"==typeof Symbol?Symbol:{},X=G.iterator||"@@iterator",m=G.asyncIterator||"@@asyncIterator",W=G.toStringTag||"@@toStringTag";function p(l,b,Z){return Object.defineProperty(l,b,{value:Z,enumerable:!0,configurable:!0,writable:!0}),l[b]}try{p({},"")}catch(l){p=function(l,b,Z){return l[b]=Z}}function c(l,b,Z,d){var G=b&&b.prototype instanceof a?b:a,X=Object.create(G.prototype),m=new k(d||[]);return X._invoke=function(l,b,Z){var d=V;return function(G,X){if(d===L)throw new Error("Generator is already running");if(d===u){if("throw"===G)throw X;return J()}for(Z.method=G,Z.arg=X;;){var m=Z.delegate;if(m){var W=C(m,Z);if(W){if(W===i)continue;return W}}if("next"===Z.method)Z.sent=Z._sent=Z.arg;else if("throw"===Z.method){if(d===V)throw d=u,Z.arg;Z.dispatchException(Z.arg)}else"return"===Z.method&&Z.abrupt("return",Z.arg);d=L;var p=h(l,b,Z);if("normal"===p.type){if(d=Z.done?u:s,p.arg===i)continue;return{value:p.arg,done:Z.done}}"throw"===p.type&&(d=u,Z.method="throw",Z.arg=p.arg)}}}(l,Z,m),X}function h(l,b,Z){try{return{type:"normal",arg:l.call(b,Z)}}catch(l){return{type:"throw",arg:l}}}l.wrap=c;var V="suspendedStart",s="suspendedYield",L="executing",u="completed",i={};function a(){}function R(){}function Y(){}var K={};p(K,X,(function(){return this}));var S=Object.getPrototypeOf,y=S&&S(S(n([])));y&&y!==Z&&d.call(y,X)&&(K=y);var x=Y.prototype=a.prototype=Object.create(K);function I(l){["next","throw","return"].forEach((function(b){p(l,b,(function(l){return this._invoke(b,l)}))}))}function o(l,b){function Z(G,X,m,W){var p=h(l[G],l,X);if("throw"!==p.type){var c=p.arg,V=c.value;return V&&"object"==typeof V&&d.call(V,"__await")?b.resolve(V.__await).then((function(l){Z("next",l,m,W)}),(function(l){Z("throw",l,m,W)})):b.resolve(V).then((function(l){c.value=l,m(c)}),(function(l){return Z("throw",l,m,W)}))}W(p.arg)}var G;this._invoke=function(l,d){function X(){return new b((function(b,G){Z(l,d,b,G)}))}return G=G?G.then(X,X):X()}}function C(l,Z){var d=l.iterator[Z.method];if(d===b){if(Z.delegate=null,"throw"===Z.method){if(l.iterator.return&&(Z.method="return",Z.arg=b,C(l,Z),"throw"===Z.method))return i;Z.method="throw",Z.arg=new TypeError("The iterator does not provide a 'throw' method")}return i}var G=h(d,l.iterator,Z.arg);if("throw"===G.type)return Z.method="throw",Z.arg=G.arg,Z.delegate=null,i;var X=G.arg;return X?X.done?(Z[l.resultName]=X.value,Z.next=l.nextLoc,"return"!==Z.method&&(Z.method="next",Z.arg=b),Z.delegate=null,i):X:(Z.method="throw",Z.arg=new TypeError("iterator result is not an object"),Z.delegate=null,i)}function F(l){var b={tryLoc:l[0]};1 in l&&(b.catchLoc=l[1]),2 in l&&(b.finallyLoc=l[2],b.afterLoc=l[3]),this.tryEntries.push(b)}function H(l){var b=l.completion||{};b.type="normal",delete b.arg,l.completion=b}function k(l){this.tryEntries=[{tryLoc:"root"}],l.forEach(F,this),this.reset(!0)}function n(l){if(l){var Z=l[X];if(Z)return Z.call(l);if("function"==typeof l.next)return l;if(!isNaN(l.length)){var G=-1,m=function Z(){for(;++G<l.length;)if(d.call(l,G))return Z.value=l[G],Z.done=!1,Z;return Z.value=b,Z.done=!0,Z};return m.next=m}}return{next:J}}function J(){return{value:b,done:!0}}return R.prototype=Y,p(x,"constructor",Y),p(Y,"constructor",R),R.displayName=p(Y,W,"GeneratorFunction"),l.isGeneratorFunction=function(l){var b="function"==typeof l&&l.constructor;return!!b&&(b===R||"GeneratorFunction"===(b.displayName||b.name))},l.mark=function(l){return Object.setPrototypeOf?Object.setPrototypeOf(l,Y):(l.__proto__=Y,p(l,W,"GeneratorFunction")),l.prototype=Object.create(x),l},l.awrap=function(l){return{__await:l}},I(o.prototype),p(o.prototype,m,(function(){return this})),l.AsyncIterator=o,l.async=function(b,Z,d,G,X){void 0===X&&(X=Promise);var m=new o(c(b,Z,d,G),X);return l.isGeneratorFunction(Z)?m:m.next().then((function(l){return l.done?l.value:m.next()}))},I(x),p(x,W,"Generator"),p(x,X,(function(){return this})),p(x,"toString",(function(){return"[object Generator]"})),l.keys=function(l){var b=[];for(var Z in l)b.push(Z);return b.reverse(),function Z(){for(;b.length;){var d=b.pop();if(d in l)return Z.value=d,Z.done=!1,Z}return Z.done=!0,Z}},l.values=n,k.prototype={constructor:k,reset:function(l){if(this.prev=0,this.next=0,this.sent=this._sent=b,this.done=!1,this.delegate=null,this.method="next",this.arg=b,this.tryEntries.forEach(H),!l)for(var Z in this)"t"===Z.charAt(0)&&d.call(this,Z)&&!isNaN(+Z.slice(1))&&(this[Z]=b)},stop:function(){this.done=!0;var l=this.tryEntries[0].completion;if("throw"===l.type)throw l.arg;return this.rval},dispatchException:function(l){if(this.done)throw l;var Z=this;function G(d,G){return W.type="throw",W.arg=l,Z.next=d,G&&(Z.method="next",Z.arg=b),!!G}for(var X=this.tryEntries.length-1;X>=0;--X){var m=this.tryEntries[X],W=m.completion;if("root"===m.tryLoc)return G("end");if(m.tryLoc<=this.prev){var p=d.call(m,"catchLoc"),c=d.call(m,"finallyLoc");if(p&&c){if(this.prev<m.catchLoc)return G(m.catchLoc,!0);if(this.prev<m.finallyLoc)return G(m.finallyLoc)}else if(p){if(this.prev<m.catchLoc)return G(m.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<m.finallyLoc)return G(m.finallyLoc)}}}},abrupt:function(l,b){for(var Z=this.tryEntries.length-1;Z>=0;--Z){var G=this.tryEntries[Z];if(G.tryLoc<=this.prev&&d.call(G,"finallyLoc")&&this.prev<G.finallyLoc){var X=G;break}}X&&("break"===l||"continue"===l)&&X.tryLoc<=b&&b<=X.finallyLoc&&(X=null);var m=X?X.completion:{};return m.type=l,m.arg=b,X?(this.method="next",this.next=X.finallyLoc,i):this.complete(m)},complete:function(l,b){if("throw"===l.type)throw l.arg;return"break"===l.type||"continue"===l.type?this.next=l.arg:"return"===l.type?(this.rval=this.arg=l.arg,this.method="return",this.next="end"):"normal"===l.type&&b&&(this.next=b),i},finish:function(l){for(var b=this.tryEntries.length-1;b>=0;--b){var Z=this.tryEntries[b];if(Z.finallyLoc===l)return this.complete(Z.completion,Z.afterLoc),H(Z),i}},catch:function(l){for(var b=this.tryEntries.length-1;b>=0;--b){var Z=this.tryEntries[b];if(Z.tryLoc===l){var d=Z.completion;if("throw"===d.type){var G=d.arg;H(Z)}return G}}throw new Error("illegal catch attempt")},delegateYield:function(l,Z,d){return this.delegate={iterator:n(l),resultName:Z,nextLoc:d},"next"===this.method&&(this.arg=b),i}},l}(l.exports);try{regeneratorRuntime=b}catch(l){"object"==typeof globalThis?globalThis.regeneratorRuntime=b:Function("r","regeneratorRuntime = r")(b)}}(p);var c=p.exports;function h(l){return(h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(l){return typeof l}:function(l){return l&&"function"==typeof Symbol&&l.constructor===Symbol&&l!==Symbol.prototype?"symbol":typeof l})(l)}var V=function l(b){m(this,l),this.value=b};function s(l,b){var Z=Date.prototype.toJSON;Date.prototype.toJSON=function(){return{"\0dt":new V(+this)}};var d=JSON.stringify(l,(function(l,Z){if(!Z)return Z;if(l.startsWith("\0"))return Z instanceof V?Z.value:void 0;if(null==b||!b.test(l)){if("number"==typeof Z)return Number.isNaN(Z)||!Number.isFinite(Z)?{"\0num":new V(Z+"")}:Z;if("object"===h(Z)){var d=Object.prototype.toString.call(Z).slice(8,-1);switch(d){case"Error":return{"\0err":new V([Z.name,Z.message,Z.stack])};case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"Map":case"Set":return{"\0arr":new V([d,Array.from(Z)])}}}return"function"==typeof Z?{"\0fn":new V(Z+"")}:Z}}));return Date.prototype.toJSON=Z,d}function L(l,b,Z){var d=void 0===b?null:b,G=function(l,b){var Z=atob(l);if(b){for(var d=new Uint8Array(Z.length),G=0,X=Z.length;G<X;++G)d[G]=Z.charCodeAt(G);return String.fromCharCode.apply(null,new Uint16Array(d.buffer))}return Z}(l,void 0!==Z&&Z),X=G.indexOf("\n",10)+1,m=G.substring(X)+(d?"//# sourceMappingURL="+d:""),W=new Blob([m],{type:"application/javascript"});return URL.createObjectURL(W)}var u,i,a,R,Y=(u="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgaT0wLG49bmV3IEFycmF5KGUpO2k8ZTtpKyspbltpXT10W2ldO3JldHVybiBufWZ1bmN0aW9uIGUoZSxpKXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHQoZSxpKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT90KGUsaSk6dm9pZCAwfX1mdW5jdGlvbiBpKGkpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiB0KGUpfShpKXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfShpKXx8ZShpKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBuKHQsaSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciBpPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9aSl7dmFyIG4sbyxyPVtdLGE9ITAscz0hMTt0cnl7Zm9yKGk9aS5jYWxsKHQpOyEoYT0obj1pLm5leHQoKSkuZG9uZSkmJihyLnB1c2gobi52YWx1ZSksIWV8fHIubGVuZ3RoIT09ZSk7YT0hMCk7fWNhdGNoKHQpe3M9ITAsbz10fWZpbmFsbHl7dHJ5e2F8fG51bGw9PWkucmV0dXJufHxpLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBvfX1yZXR1cm4gcn19KHQsaSl8fGUodCxpKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8odCl7cmV0dXJuKG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbj1lW2ldO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fWZ1bmN0aW9uIHModCxlLGkpe3JldHVybiBlJiZhKHQucHJvdG90eXBlLGUpLGkmJmEodCxpKSx0fXZhciBsPXtleHBvcnRzOnt9fTshZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUsaT1PYmplY3QucHJvdG90eXBlLG49aS5oYXNPd25Qcm9wZXJ0eSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LHI9by5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLGE9by5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPW8udG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKHQsZSxpKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6aSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e2woe30sIiIpfWNhdGNoKHQpe2w9ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0W2VdPWl9fWZ1bmN0aW9uIHUodCxlLGksbil7dmFyIG89ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBtP2U6bSxyPU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLGE9bmV3IEQobnx8W10pO3JldHVybiByLl9pbnZva2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBuPWM7cmV0dXJuIGZ1bmN0aW9uKG8scil7aWYobj09PWYpdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYobj09PXApe2lmKCJ0aHJvdyI9PT1vKXRocm93IHI7cmV0dXJuIEwoKX1mb3IoaS5tZXRob2Q9byxpLmFyZz1yOzspe3ZhciBhPWkuZGVsZWdhdGU7aWYoYSl7dmFyIHM9SShhLGkpO2lmKHMpe2lmKHM9PT1nKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1pLm1ldGhvZClpLnNlbnQ9aS5fc2VudD1pLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1pLm1ldGhvZCl7aWYobj09PWMpdGhyb3cgbj1wLGkuYXJnO2kuZGlzcGF0Y2hFeGNlcHRpb24oaS5hcmcpfWVsc2UicmV0dXJuIj09PWkubWV0aG9kJiZpLmFicnVwdCgicmV0dXJuIixpLmFyZyk7bj1mO3ZhciBsPWgodCxlLGkpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPWkuZG9uZT9wOmQsbC5hcmc9PT1nKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpsLmFyZyxkb25lOmkuZG9uZX19InRocm93Ij09PWwudHlwZSYmKG49cCxpLm1ldGhvZD0idGhyb3ciLGkuYXJnPWwuYXJnKX19fSh0LGksYSkscn1mdW5jdGlvbiBoKHQsZSxpKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLGkpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPXU7dmFyIGM9InN1c3BlbmRlZFN0YXJ0IixkPSJzdXNwZW5kZWRZaWVsZCIsZj0iZXhlY3V0aW5nIixwPSJjb21wbGV0ZWQiLGc9e307ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIHg9e307bCh4LHIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIF89T2JqZWN0LmdldFByb3RvdHlwZU9mLHc9XyYmXyhfKEMoW10pKSk7dyYmdyE9PWkmJm4uY2FsbCh3LHIpJiYoeD13KTt2YXIgYj15LnByb3RvdHlwZT1tLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHgpO2Z1bmN0aW9uIFModCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtsKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIE0odCxlKXtmdW5jdGlvbiBpKG8scixhLHMpe3ZhciBsPWgodFtvXSx0LHIpO2lmKCJ0aHJvdyIhPT1sLnR5cGUpe3ZhciB1PWwuYXJnLGM9dS52YWx1ZTtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiZuLmNhbGwoYywiX19hd2FpdCIpP2UucmVzb2x2ZShjLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe2koIm5leHQiLHQsYSxzKX0pLChmdW5jdGlvbih0KXtpKCJ0aHJvdyIsdCxhLHMpfSkpOmUucmVzb2x2ZShjKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsYSh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gaSgidGhyb3ciLHQsYSxzKX0pKX1zKGwuYXJnKX12YXIgbzt0aGlzLl9pbnZva2U9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG8pe2kodCxuLGUsbyl9KSl9cmV0dXJuIG89bz9vLnRoZW4ocixyKTpyKCl9fWZ1bmN0aW9uIEkodCxpKXt2YXIgbj10Lml0ZXJhdG9yW2kubWV0aG9kXTtpZihuPT09ZSl7aWYoaS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1pLm1ldGhvZCl7aWYodC5pdGVyYXRvci5yZXR1cm4mJihpLm1ldGhvZD0icmV0dXJuIixpLmFyZz1lLEkodCxpKSwidGhyb3ciPT09aS5tZXRob2QpKXJldHVybiBnO2kubWV0aG9kPSJ0aHJvdyIsaS5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBnfXZhciBvPWgobix0Lml0ZXJhdG9yLGkuYXJnKTtpZigidGhyb3ciPT09by50eXBlKXJldHVybiBpLm1ldGhvZD0idGhyb3ciLGkuYXJnPW8uYXJnLGkuZGVsZWdhdGU9bnVsbCxnO3ZhciByPW8uYXJnO3JldHVybiByP3IuZG9uZT8oaVt0LnJlc3VsdE5hbWVdPXIudmFsdWUsaS5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PWkubWV0aG9kJiYoaS5tZXRob2Q9Im5leHQiLGkuYXJnPWUpLGkuZGVsZWdhdGU9bnVsbCxnKTpyOihpLm1ldGhvZD0idGhyb3ciLGkuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksaS5kZWxlZ2F0ZT1udWxsLGcpfWZ1bmN0aW9uIFQodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gRCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKFQsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gQyh0KXtpZih0KXt2YXIgaT10W3JdO2lmKGkpcmV0dXJuIGkuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBvPS0xLGE9ZnVuY3Rpb24gaSgpe2Zvcig7KytvPHQubGVuZ3RoOylpZihuLmNhbGwodCxvKSlyZXR1cm4gaS52YWx1ZT10W29dLGkuZG9uZT0hMSxpO3JldHVybiBpLnZhbHVlPWUsaS5kb25lPSEwLGl9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6TH19ZnVuY3Rpb24gTCgpe3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fXJldHVybiB2LnByb3RvdHlwZT15LGwoYiwiY29uc3RydWN0b3IiLHkpLGwoeSwiY29uc3RydWN0b3IiLHYpLHYuZGlzcGxheU5hbWU9bCh5LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT12fHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCx5KToodC5fX3Byb3RvX189eSxsKHQscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxTKE0ucHJvdG90eXBlKSxsKE0ucHJvdG90eXBlLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPU0sdC5hc3luYz1mdW5jdGlvbihlLGksbixvLHIpe3ZvaWQgMD09PXImJihyPVByb21pc2UpO3ZhciBhPW5ldyBNKHUoZSxpLG4sbykscik7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihpKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0sUyhiKSxsKGIscywiR2VuZXJhdG9yIiksbChiLHIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbChiLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgaSBpbiB0KWUucHVzaChpKTtyZXR1cm4gZS5yZXZlcnNlKCksZnVuY3Rpb24gaSgpe2Zvcig7ZS5sZW5ndGg7KXt2YXIgbj1lLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gaS52YWx1ZT1uLGkuZG9uZT0hMSxpfXJldHVybiBpLmRvbmU9ITAsaX19LHQudmFsdWVzPUMsRC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkQscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9ZSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz1lLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEEpLCF0KWZvcih2YXIgaSBpbiB0aGlzKSJ0Ij09PWkuY2hhckF0KDApJiZuLmNhbGwodGhpcyxpKSYmIWlzTmFOKCtpLnNsaWNlKDEpKSYmKHRoaXNbaV09ZSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgaT10aGlzO2Z1bmN0aW9uIG8obixvKXtyZXR1cm4gcy50eXBlPSJ0aHJvdyIscy5hcmc9dCxpLm5leHQ9bixvJiYoaS5tZXRob2Q9Im5leHQiLGkuYXJnPWUpLCEhb31mb3IodmFyIHI9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbcl0scz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG8oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBsPW4uY2FsbChhLCJjYXRjaExvYyIpLHU9bi5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihsJiZ1KXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9ZWxzZSBpZihsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCF1KXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPXRoaXMudHJ5RW50cmllc1tpXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZuLmNhbGwobywiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8by5maW5hbGx5TG9jKXt2YXIgcj1vO2JyZWFrfX1yJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmci50cnlMb2M8PWUmJmU8PXIuZmluYWxseUxvYyYmKHI9bnVsbCk7dmFyIGE9cj9yLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT10LGEuYXJnPWUscj8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1yLmZpbmFsbHlMb2MsZyk6dGhpcy5jb21wbGV0ZShhKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxnfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2VdO2lmKGkuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoaS5jb21wbGV0aW9uLGkuYWZ0ZXJMb2MpLEEoaSksZ319LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBpPXRoaXMudHJ5RW50cmllc1tlXTtpZihpLnRyeUxvYz09PXQpe3ZhciBuPWkuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgbz1uLmFyZztBKGkpfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsaSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6Qyh0KSxyZXN1bHROYW1lOmksbmV4dExvYzpufSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPWUpLGd9fSx0fSh0LmV4cG9ydHMpO3RyeXtyZWdlbmVyYXRvclJ1bnRpbWU9ZX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWU9ZTpGdW5jdGlvbigiciIsInJlZ2VuZXJhdG9yUnVudGltZSA9IHIiKShlKX19KGwpO3ZhciB1PWwuZXhwb3J0cztmdW5jdGlvbiBoKHQsZSl7dmFyIGk9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFpKXtpZihBcnJheS5pc0FycmF5KHQpfHwoaT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybjtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGModCxlKTt2YXIgaT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1pJiZ0LmNvbnN0cnVjdG9yJiYoaT10LmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09aXx8IlNldCI9PT1pKXJldHVybiBBcnJheS5mcm9tKHQpO2lmKCJBcmd1bWVudHMiPT09aXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoaSkpcmV0dXJuIGModCxlKX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtpJiYodD1pKTt2YXIgbj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgcixhPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtpPWkuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PWkubmV4dCgpO3JldHVybiBhPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAscj10fSxmOmZ1bmN0aW9uKCl7dHJ5e2F8fG51bGw9PWkucmV0dXJufHxpLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyByfX19fWZ1bmN0aW9uIGModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIGk9MCxuPW5ldyBBcnJheShlKTtpPGU7aSsrKW5baV09dFtpXTtyZXR1cm4gbn12YXIgZD11Lm1hcmsocCksZj1mdW5jdGlvbiB0KGUpe3IodGhpcyx0KSx0aGlzLnZhbHVlPWV9O2Z1bmN0aW9uIHAodCl7dmFyIGU7cmV0dXJuIHUud3JhcCgoZnVuY3Rpb24oaSl7Zm9yKDs7KXN3aXRjaChpLnByZXY9aS5uZXh0KXtjYXNlIDA6aS50MD11LmtleXModCk7Y2FzZSAxOmlmKChpLnQxPWkudDAoKSkuZG9uZSl7aS5uZXh0PTg7YnJlYWt9aWYoZT1pLnQxLnZhbHVlLCF0Lmhhc093blByb3BlcnR5KGUpKXtpLm5leHQ9NjticmVha31yZXR1cm4gaS5uZXh0PTYsW2UsdFtlXV07Y2FzZSA2OmkubmV4dD0xO2JyZWFrO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGkuc3RvcCgpfX0pLGQpfWZ1bmN0aW9uIGcodCxlKXt2YXIgaT1EYXRlLnByb3RvdHlwZS50b0pTT047RGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJueyJcMGR0IjpuZXcgZigrdGhpcyl9fTt2YXIgbj1KU09OLnN0cmluZ2lmeSh0LChmdW5jdGlvbih0LGkpe2lmKCFpKXJldHVybiBpO2lmKHQuc3RhcnRzV2l0aCgiXDAiKSlyZXR1cm4gaSBpbnN0YW5jZW9mIGY/aS52YWx1ZTp2b2lkIDA7aWYobnVsbD09ZXx8IWUudGVzdCh0KSl7aWYoIm51bWJlciI9PXR5cGVvZiBpKXJldHVybiBOdW1iZXIuaXNOYU4oaSl8fCFOdW1iZXIuaXNGaW5pdGUoaSk/eyJcMG51bSI6bmV3IGYoaSsiIil9Omk7aWYoIm9iamVjdCI9PT1vKGkpKXt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSkuc2xpY2UoOCwtMSk7c3dpdGNoKG4pe2Nhc2UiRXJyb3IiOnJldHVybnsiXDBlcnIiOm5ldyBmKFtpLm5hbWUsaS5tZXNzYWdlLGkuc3RhY2tdKX07Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJNYXAiOmNhc2UiU2V0IjpyZXR1cm57IlwwYXJyIjpuZXcgZihbbixBcnJheS5mcm9tKGkpXSl9fX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT97IlwwZm4iOm5ldyBmKGkrIiIpfTppfX0pKTtyZXR1cm4gRGF0ZS5wcm90b3R5cGUudG9KU09OPWksbn1mdW5jdGlvbiBtKHQpe3JldHVybiBKU09OLnBhcnNlKHQsKGZ1bmN0aW9uKHQsZSl7aWYoZSYmIm9iamVjdCI9PT1vKGUpJiYhQXJyYXkuaXNBcnJheShlKSl7dmFyIGkscj1oKHAoZSkpO3RyeXtmb3Ioci5zKCk7IShpPXIubigpKS5kb25lOyl7dmFyIGE9bihpLnZhbHVlLDIpLHM9YVswXSxsPWFbMV07aWYoMD09PXMuY2hhckNvZGVBdCgwKSlzd2l0Y2gocy5zbGljZSgxKSl7Y2FzZSJkdCI6cmV0dXJuIG5ldyBEYXRlKGwpO2Nhc2UiZm4iOnZhciB1PWwsYz0vXmZ1bmN0aW9uIChcdyspXChcKSB7IFxbbmF0aXZlIGNvZGVcXSB9JC8uZXhlYyh1KTtyZXR1cm4gYz9zZWxmW2NbMV1dOm5ldyBGdW5jdGlvbignInVzZSBzdHJpY3QiXG5yZXR1cm4gKCcuY29uY2F0KHUsIikiKSkoKTtjYXNlIm51bSI6cmV0dXJuK2w7Y2FzZSJlcnIiOnZhciBkPW4obCwzKSxmPWRbMF0sZz1kWzFdLG09ZFsyXSx2PW5ldyBzZWxmW2ZdKGcpO3JldHVybiB2LnN0YWNrPW0sdjtjYXNlImFyciI6cmV0dXJuIG5ldyBzZWxmW2xbMF1dKGxbMV0pfXJldHVybiBlfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19cmV0dXJuIGV9KSl9dmFyIHYseT17fTtzZWxmLndpbmRvd3x8KHNlbGYud2luZG93PXNlbGYpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3Y9d2luZG93Ll9fREVWX186InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJih2PWdsb2JhbC5fX0RFVl9fKSx2b2lkIDA9PT12JiYodj0hMCk7dmFyIHg9dixfPTIzMTEsdz1mdW5jdGlvbigpe3JldHVybiBfKyt9LGI9Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiB3eD8idW5kZWZpbmVkIjpvKHd4KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB3eC5nZXRTeXN0ZW1JbmZvU3luYz97YnJvd3Nlcjp7fSxvczp7fSxub2RlOiExLHd4YTohMCxjYW52YXNTdXBwb3J0ZWQ6ITAsc3ZnU3VwcG9ydGVkOiExLHRvdWNoRXZlbnRzU3VwcG9ydGVkOiEwLGRvbVN1cHBvcnRlZDohMX06InVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3ticm93c2VyOnt9LG9zOnt9LG5vZGU6ITEsd29ya2VyOiEwLGNhbnZhc1N1cHBvcnRlZDohMCxkb21TdXBwb3J0ZWQ6ITF9OiJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yP3ticm93c2VyOnt9LG9zOnt9LG5vZGU6ITAsd29ya2VyOiExLGNhbnZhc1N1cHBvcnRlZDohMCxzdmdTdXBwb3J0ZWQ6ITAsZG9tU3VwcG9ydGVkOiExfTpmdW5jdGlvbih0KXt2YXIgZT17fSxpPXt9LG49dC5tYXRjaCgvRmlyZWZveFwvKFtcZC5dKykvKSxvPXQubWF0Y2goL01TSUVccyhbXGQuXSspLyl8fHQubWF0Y2goL1RyaWRlbnRcLy4rP3J2OigoW1xkLl0rKSkvKSxyPXQubWF0Y2goL0VkZ2VcLyhbXGQuXSspLyksYT0vbWljcm9tZXNzZW5nZXIvaS50ZXN0KHQpO24mJihpLmZpcmVmb3g9ITAsaS52ZXJzaW9uPW5bMV0pO28mJihpLmllPSEwLGkudmVyc2lvbj1vWzFdKTtyJiYoaS5lZGdlPSEwLGkudmVyc2lvbj1yWzFdKTthJiYoaS53ZUNoYXQ9ITApO3JldHVybnticm93c2VyOmksb3M6ZSxub2RlOiExLGNhbnZhc1N1cHBvcnRlZDohIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQsc3ZnU3VwcG9ydGVkOiJ1bmRlZmluZWQiIT10eXBlb2YgU1ZHUmVjdCx0b3VjaEV2ZW50c1N1cHBvcnRlZDoib250b3VjaHN0YXJ0ImluIHdpbmRvdyYmIWkuaWUmJiFpLmVkZ2UscG9pbnRlckV2ZW50c1N1cHBvcnRlZDoib25wb2ludGVyZG93biJpbiB3aW5kb3cmJihpLmVkZ2V8fGkuaWUmJmkudmVyc2lvbj49MTEpLGRvbVN1cHBvcnRlZDoidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50fX0obmF2aWdhdG9yLnVzZXJBZ2VudCk7dmFyIFM9eyJbb2JqZWN0IEZ1bmN0aW9uXSI6MSwiW29iamVjdCBSZWdFeHBdIjoxLCJbb2JqZWN0IERhdGVdIjoxLCJbb2JqZWN0IEVycm9yXSI6MSwiW29iamVjdCBDYW52YXNHcmFkaWVudF0iOjEsIltvYmplY3QgQ2FudmFzUGF0dGVybl0iOjEsIltvYmplY3QgSW1hZ2VdIjoxLCJbb2JqZWN0IENhbnZhc10iOjF9LE09eyJbb2JqZWN0IEludDhBcnJheV0iOjEsIltvYmplY3QgVWludDhBcnJheV0iOjEsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjoxLCJbb2JqZWN0IEludDE2QXJyYXldIjoxLCJbb2JqZWN0IFVpbnQxNkFycmF5XSI6MSwiW29iamVjdCBJbnQzMkFycmF5XSI6MSwiW29iamVjdCBVaW50MzJBcnJheV0iOjEsIltvYmplY3QgRmxvYXQzMkFycmF5XSI6MSwiW29iamVjdCBGbG9hdDY0QXJyYXldIjoxfSxJPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsVD1BcnJheS5wcm90b3R5cGUsQT1ULmZvckVhY2gsRD1ULmZpbHRlcixDPVQuc2xpY2UsTD1ULm1hcCxrPVQucmVkdWNlLFA9e307ZnVuY3Rpb24gTih0LGUpeyJjcmVhdGVDYW52YXMiPT09dCYmKFY9bnVsbCksUFt0XT1lfWZ1bmN0aW9uIE8odCl7aWYobnVsbD09dHx8Im9iamVjdCIhPT1vKHQpKXJldHVybiB0O3ZhciBlPXQsaT1JLmNhbGwodCk7aWYoIltvYmplY3QgQXJyYXldIj09PWkpe2lmKCFtdCh0KSl7ZT1bXTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspZVtuXT1PKHRbbl0pfX1lbHNlIGlmKE1baV0pe2lmKCFtdCh0KSl7dmFyIGE9dC5jb25zdHJ1Y3RvcjtpZih0LmNvbnN0cnVjdG9yLmZyb20pZT1hLmZyb20odCk7ZWxzZXtlPW5ldyBhKHQubGVuZ3RoKTtmb3Iobj0wLHI9dC5sZW5ndGg7bjxyO24rKyllW25dPU8odFtuXSl9fX1lbHNlIGlmKCFTW2ldJiYhbXQodCkmJiFydCh0KSlmb3IodmFyIHMgaW4gZT17fSx0KXQuaGFzT3duUHJvcGVydHkocykmJihlW3NdPU8odFtzXSkpO3JldHVybiBlfWZ1bmN0aW9uIEUodCxlLGkpe2lmKCFpdChlKXx8IWl0KHQpKXJldHVybiBpP08oZSk6dDtmb3IodmFyIG4gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgbz10W25dLHI9ZVtuXTshaXQocil8fCFpdChvKXx8UShyKXx8UShvKXx8cnQocil8fHJ0KG8pfHxudChyKXx8bnQobyl8fG10KHIpfHxtdChvKT8haSYmbiBpbiB0fHwodFtuXT1PKGVbbl0pKTpFKG8scixpKX1yZXR1cm4gdH1mdW5jdGlvbiB6KHQsZSl7Zm9yKHZhciBpPXRbMF0sbj0xLG89dC5sZW5ndGg7bjxvO24rKylpPUUoaSx0W25dLGUpO3JldHVybiBpfWZ1bmN0aW9uIFIodCxlKXtmb3IodmFyIGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdH1mdW5jdGlvbiBCKHQsZSxpKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYoaT9udWxsIT1lW25dOm51bGw9PXRbbl0pJiYodFtuXT1lW25dKTtyZXR1cm4gdH12YXIgVixHPWZ1bmN0aW9uKCl7cmV0dXJuIFAuY3JlYXRlQ2FudmFzKCl9O2Z1bmN0aW9uIEYoKXtyZXR1cm4gVnx8KFY9RygpLmdldENvbnRleHQoIjJkIikpLFZ9ZnVuY3Rpb24gVyh0LGUpe2lmKHQpe2lmKHQuaW5kZXhPZilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgaT0wLG49dC5sZW5ndGg7aTxuO2krKylpZih0W2ldPT09ZSlyZXR1cm4gaX1yZXR1cm4tMX1mdW5jdGlvbiBIKHQsZSl7dmFyIGk9dC5wcm90b3R5cGU7ZnVuY3Rpb24gbigpe31mb3IodmFyIG8gaW4gbi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IG4saSlpLmhhc093blByb3BlcnR5KG8pJiYodC5wcm90b3R5cGVbb109aVtvXSk7dC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnN1cGVyQ2xhc3M9ZX1mdW5jdGlvbiBaKHQsZSxpKXtCKHQ9InByb3RvdHlwZSJpbiB0P3QucHJvdG90eXBlOnQsZT0icHJvdG90eXBlImluIGU/ZS5wcm90b3R5cGU6ZSxpKX1mdW5jdGlvbiBVKHQpe2lmKHQpcmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofWZ1bmN0aW9uIGoodCxlLGkpe2lmKHQmJmUpaWYodC5mb3JFYWNoJiZ0LmZvckVhY2g9PT1BKXQuZm9yRWFjaChlLGkpO2Vsc2UgaWYodC5sZW5ndGg9PT0rdC5sZW5ndGgpZm9yKHZhciBuPTAsbz10Lmxlbmd0aDtuPG87bisrKWUuY2FsbChpLHRbbl0sbix0KTtlbHNlIGZvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJmUuY2FsbChpLHRbcl0scix0KX1mdW5jdGlvbiBYKHQsZSxpKXtpZih0JiZlKXtpZih0Lm1hcCYmdC5tYXA9PT1MKXJldHVybiB0Lm1hcChlLGkpO2Zvcih2YXIgbj1bXSxvPTAscj10Lmxlbmd0aDtvPHI7bysrKW4ucHVzaChlLmNhbGwoaSx0W29dLG8sdCkpO3JldHVybiBufX1mdW5jdGlvbiBZKHQsZSxpLG4pe2lmKHQmJmUpe2lmKHQucmVkdWNlJiZ0LnJlZHVjZT09PWspcmV0dXJuIHQucmVkdWNlKGUsaSxuKTtmb3IodmFyIG89MCxyPXQubGVuZ3RoO288cjtvKyspaT1lLmNhbGwobixpLHRbb10sbyx0KTtyZXR1cm4gaX19ZnVuY3Rpb24gcSh0LGUsaSl7aWYodCYmZSl7aWYodC5maWx0ZXImJnQuZmlsdGVyPT09RClyZXR1cm4gdC5maWx0ZXIoZSxpKTtmb3IodmFyIG49W10sbz0wLHI9dC5sZW5ndGg7bzxyO28rKyllLmNhbGwoaSx0W29dLG8sdCkmJm4ucHVzaCh0W29dKTtyZXR1cm4gbn19ZnVuY3Rpb24gSyh0LGUsaSl7aWYodCYmZSlmb3IodmFyIG49MCxvPXQubGVuZ3RoO248bztuKyspaWYoZS5jYWxsKGksdFtuXSxuLHQpKXJldHVybiB0W25dfWZ1bmN0aW9uICQodCxlKXt2YXIgaT1DLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsaS5jb25jYXQoQy5jYWxsKGFyZ3VtZW50cykpKX19ZnVuY3Rpb24gSih0KXt2YXIgZT1DLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsZS5jb25jYXQoQy5jYWxsKGFyZ3VtZW50cykpKX19ZnVuY3Rpb24gUSh0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09SS5jYWxsKHQpfWZ1bmN0aW9uIHR0KHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGV0KHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09SS5jYWxsKHQpfWZ1bmN0aW9uIGl0KHQpe3ZhciBlPW8odCk7cmV0dXJuImZ1bmN0aW9uIj09PWV8fCEhdCYmIm9iamVjdCI9PT1lfWZ1bmN0aW9uIG50KHQpe3JldHVybiEhU1tJLmNhbGwodCldfWZ1bmN0aW9uIG90KHQpe3JldHVybiEhTVtJLmNhbGwodCldfWZ1bmN0aW9uIHJ0KHQpe3JldHVybiJvYmplY3QiPT09byh0KSYmIm51bWJlciI9PXR5cGVvZiB0Lm5vZGVUeXBlJiYib2JqZWN0Ij09PW8odC5vd25lckRvY3VtZW50KX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gdCE9dH1mdW5jdGlvbiBzdCh0KXtmb3IodmFyIGU9MCxpPWFyZ3VtZW50cy5sZW5ndGg7ZTxpO2UrKylpZihudWxsIT1hcmd1bWVudHNbZV0pcmV0dXJuIGFyZ3VtZW50c1tlXX1mdW5jdGlvbiBsdCh0LGUpe3JldHVybiBudWxsIT10P3Q6ZX1mdW5jdGlvbiB1dCh0LGUsaSl7cmV0dXJuIG51bGwhPXQ/dDpudWxsIT1lP2U6aX1mdW5jdGlvbiBodCgpe3JldHVybiBGdW5jdGlvbi5jYWxsLmFwcGx5KEMsYXJndW1lbnRzKX1mdW5jdGlvbiBjdCh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuW3QsdCx0LHRdO3ZhciBlPXQubGVuZ3RoO3JldHVybiAyPT09ZT9bdFswXSx0WzFdLHRbMF0sdFsxXV06Mz09PWU/W3RbMF0sdFsxXSx0WzJdLHRbMV1dOnR9ZnVuY3Rpb24gZHQodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdC50cmltP3QudHJpbSgpOnQucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpfVAuY3JlYXRlQ2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpfTt2YXIgcHQ9Il9fZWNfcHJpbWl0aXZlX18iO2Z1bmN0aW9uIGd0KHQpe3RbcHRdPSEwfWZ1bmN0aW9uIG10KHQpe3JldHVybiB0W3B0XX1mdW5jdGlvbiB2dCh0KXt2YXIgZT1RKHQpO3RoaXMuZGF0YT17fTt2YXIgaT10aGlzO2Z1bmN0aW9uIG4odCxuKXtlP2kuc2V0KHQsbik6aS5zZXQobix0KX10IGluc3RhbmNlb2YgdnQ/dC5lYWNoKG4pOnQmJmoodCxuKX1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gbmV3IHZ0KHQpfWZ1bmN0aW9uIHh0KHQsZSl7Zm9yKHZhciBpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspaVtuXT10W25dO3ZhciBvPXQubGVuZ3RoO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaVtuK29dPWVbbl07cmV0dXJuIGl9ZnVuY3Rpb24gX3QoKXt9dnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2dCxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eSh0KT90aGlzLmRhdGFbdF06bnVsbH0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YVt0XT1lfSxlYWNoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIHZvaWQgMCE9PWUmJih0PSQodCxlKSksdGhpcy5kYXRhKXRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShpKSYmdCh0aGlzLmRhdGFbaV0saSl9LHJlbW92ZUtleTpmdW5jdGlvbih0KXtkZWxldGUgdGhpcy5kYXRhW3RdfX07dmFyIHd0PShPYmplY3QuZnJlZXplfHxPYmplY3QpKHskb3ZlcnJpZGU6TixjbG9uZTpPLG1lcmdlOkUsbWVyZ2VBbGw6eixleHRlbmQ6UixkZWZhdWx0czpCLGNyZWF0ZUNhbnZhczpHLGdldENvbnRleHQ6RixpbmRleE9mOlcsaW5oZXJpdHM6SCxtaXhpbjpaLGlzQXJyYXlMaWtlOlUsZWFjaDpqLG1hcDpYLHJlZHVjZTpZLGZpbHRlcjpxLGZpbmQ6SyxiaW5kOiQsY3Vycnk6Sixpc0FycmF5OlEsaXNGdW5jdGlvbjp0dCxpc1N0cmluZzpldCxpc09iamVjdDppdCxpc0J1aWx0SW5PYmplY3Q6bnQsaXNUeXBlZEFycmF5Om90LGlzRG9tOnJ0LGVxTmFOOmF0LHJldHJpZXZlOnN0LHJldHJpZXZlMjpsdCxyZXRyaWV2ZTM6dXQsc2xpY2U6aHQsbm9ybWFsaXplQ3NzQXJyYXk6Y3QsYXNzZXJ0OmR0LHRyaW06ZnQsc2V0QXNQcmltaXRpdmU6Z3QsaXNQcmltaXRpdmU6bXQsY3JlYXRlSGFzaE1hcDp5dCxjb25jYXRBcnJheTp4dCxub29wOl90fSksYnQ9InVuZGVmaW5lZCI9PXR5cGVvZiBGbG9hdDMyQXJyYXk/QXJyYXk6RmxvYXQzMkFycmF5O2Z1bmN0aW9uIFN0KHQsZSl7dmFyIGk9bmV3IGJ0KDIpO3JldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxpWzBdPXQsaVsxXT1lLGl9ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0fWZ1bmN0aW9uIEl0KHQpe3ZhciBlPW5ldyBidCgyKTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlfWZ1bmN0aW9uIFR0KHQsZSxpKXtyZXR1cm4gdFswXT1lLHRbMV09aSx0fWZ1bmN0aW9uIEF0KHQsZSxpKXtyZXR1cm4gdFswXT1lWzBdK2lbMF0sdFsxXT1lWzFdK2lbMV0sdH1mdW5jdGlvbiBEdCh0LGUsaSxuKXtyZXR1cm4gdFswXT1lWzBdK2lbMF0qbix0WzFdPWVbMV0raVsxXSpuLHR9ZnVuY3Rpb24gQ3QodCxlLGkpe3JldHVybiB0WzBdPWVbMF0taVswXSx0WzFdPWVbMV0taVsxXSx0fWZ1bmN0aW9uIEx0KHQpe3JldHVybiBNYXRoLnNxcnQoUHQodCkpfXZhciBrdD1MdDtmdW5jdGlvbiBQdCh0KXtyZXR1cm4gdFswXSp0WzBdK3RbMV0qdFsxXX12YXIgTnQ9UHQ7ZnVuY3Rpb24gT3QodCxlLGkpe3JldHVybiB0WzBdPWVbMF0qaSx0WzFdPWVbMV0qaSx0fWZ1bmN0aW9uIEV0KHQsZSl7dmFyIGk9THQoZSk7cmV0dXJuIDA9PT1pPyh0WzBdPTAsdFsxXT0wKToodFswXT1lWzBdL2ksdFsxXT1lWzFdL2kpLHR9ZnVuY3Rpb24genQodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KCh0WzBdLWVbMF0pKih0WzBdLWVbMF0pKyh0WzFdLWVbMV0pKih0WzFdLWVbMV0pKX12YXIgUnQ9enQ7ZnVuY3Rpb24gQnQodCxlKXtyZXR1cm4odFswXS1lWzBdKSoodFswXS1lWzBdKSsodFsxXS1lWzFdKSoodFsxXS1lWzFdKX12YXIgVnQ9QnQ7ZnVuY3Rpb24gR3QodCxlLGksbil7cmV0dXJuIHRbMF09ZVswXStuKihpWzBdLWVbMF0pLHRbMV09ZVsxXStuKihpWzFdLWVbMV0pLHR9ZnVuY3Rpb24gRnQodCxlLGkpe3ZhciBuPWVbMF0sbz1lWzFdO3JldHVybiB0WzBdPWlbMF0qbitpWzJdKm8raVs0XSx0WzFdPWlbMV0qbitpWzNdKm8raVs1XSx0fWZ1bmN0aW9uIFd0KHQsZSxpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLGlbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxpWzFdKSx0fWZ1bmN0aW9uIEh0KHQsZSxpKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLGlbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxpWzFdKSx0fXZhciBadD0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7Y3JlYXRlOlN0LGNvcHk6TXQsY2xvbmU6SXQsc2V0OlR0LGFkZDpBdCxzY2FsZUFuZEFkZDpEdCxzdWI6Q3QsbGVuOkx0LGxlbmd0aDprdCxsZW5TcXVhcmU6UHQsbGVuZ3RoU3F1YXJlOk50LG11bDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRbMF09ZVswXSppWzBdLHRbMV09ZVsxXSppWzFdLHR9LGRpdjpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRbMF09ZVswXS9pWzBdLHRbMV09ZVsxXS9pWzFdLHR9LGRvdDpmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdfSxzY2FsZTpPdCxub3JtYWxpemU6RXQsZGlzdGFuY2U6enQsZGlzdDpSdCxkaXN0YW5jZVNxdWFyZTpCdCxkaXN0U3F1YXJlOlZ0LG5lZ2F0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdH0sbGVycDpHdCxhcHBseVRyYW5zZm9ybTpGdCxtaW46V3QsbWF4Okh0fSk7ZnVuY3Rpb24gVXQoKXt0aGlzLm9uKCJtb3VzZWRvd24iLHRoaXMuX2RyYWdTdGFydCx0aGlzKSx0aGlzLm9uKCJtb3VzZW1vdmUiLHRoaXMuX2RyYWcsdGhpcyksdGhpcy5vbigibW91c2V1cCIsdGhpcy5fZHJhZ0VuZCx0aGlzKX1mdW5jdGlvbiBqdCh0LGUpe3JldHVybnt0YXJnZXQ6dCx0b3BUYXJnZXQ6ZSYmZS50b3BUYXJnZXR9fVV0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VXQsX2RyYWdTdGFydDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC50YXJnZXQ7ZSYmIWUuZHJhZ2dhYmxlOyllPWUucGFyZW50O2UmJih0aGlzLl9kcmFnZ2luZ1RhcmdldD1lLGUuZHJhZ2dpbmc9ITAsdGhpcy5feD10Lm9mZnNldFgsdGhpcy5feT10Lm9mZnNldFksdGhpcy5kaXNwYXRjaFRvRWxlbWVudChqdChlLHQpLCJkcmFnc3RhcnQiLHQuZXZlbnQpKX0sX2RyYWc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZHJhZ2dpbmdUYXJnZXQ7aWYoZSl7dmFyIGk9dC5vZmZzZXRYLG49dC5vZmZzZXRZLG89aS10aGlzLl94LHI9bi10aGlzLl95O3RoaXMuX3g9aSx0aGlzLl95PW4sZS5kcmlmdChvLHIsdCksdGhpcy5kaXNwYXRjaFRvRWxlbWVudChqdChlLHQpLCJkcmFnIix0LmV2ZW50KTt2YXIgYT10aGlzLmZpbmRIb3ZlcihpLG4sZSkudGFyZ2V0LHM9dGhpcy5fZHJvcFRhcmdldDt0aGlzLl9kcm9wVGFyZ2V0PWEsZSE9PWEmJihzJiZhIT09cyYmdGhpcy5kaXNwYXRjaFRvRWxlbWVudChqdChzLHQpLCJkcmFnbGVhdmUiLHQuZXZlbnQpLGEmJmEhPT1zJiZ0aGlzLmRpc3BhdGNoVG9FbGVtZW50KGp0KGEsdCksImRyYWdlbnRlciIsdC5ldmVudCkpfX0sX2RyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZHJhZ2dpbmdUYXJnZXQ7ZSYmKGUuZHJhZ2dpbmc9ITEpLHRoaXMuZGlzcGF0Y2hUb0VsZW1lbnQoanQoZSx0KSwiZHJhZ2VuZCIsdC5ldmVudCksdGhpcy5fZHJvcFRhcmdldCYmdGhpcy5kaXNwYXRjaFRvRWxlbWVudChqdCh0aGlzLl9kcm9wVGFyZ2V0LHQpLCJkcm9wIix0LmV2ZW50KSx0aGlzLl9kcmFnZ2luZ1RhcmdldD1udWxsLHRoaXMuX2Ryb3BUYXJnZXQ9bnVsbH19O3ZhciBYdD1BcnJheS5wcm90b3R5cGUuc2xpY2UsWXQ9ZnVuY3Rpb24odCl7dGhpcy5fJGhhbmRsZXJzPXt9LHRoaXMuXyRldmVudFByb2Nlc3Nvcj10fTtmdW5jdGlvbiBxdCh0LGUsaSxuLG8scil7dmFyIGE9dC5fJGhhbmRsZXJzO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYobz1uLG49aSxpPW51bGwpLCFufHwhZSlyZXR1cm4gdDtpPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5fJGV2ZW50UHJvY2Vzc29yO3JldHVybiBudWxsIT1lJiZpJiZpLm5vcm1hbGl6ZVF1ZXJ5JiYoZT1pLm5vcm1hbGl6ZVF1ZXJ5KGUpKSxlfSh0LGkpLGFbZV18fChhW2VdPVtdKTtmb3IodmFyIHM9MDtzPGFbZV0ubGVuZ3RoO3MrKylpZihhW2VdW3NdLmg9PT1uKXJldHVybiB0O3ZhciBsPXtoOm4sb25lOnIscXVlcnk6aSxjdHg6b3x8dCxjYWxsQXRMYXN0Om4uenJFdmVudGZ1bENhbGxBdExhc3R9LHU9YVtlXS5sZW5ndGgtMSxoPWFbZV1bdV07cmV0dXJuIGgmJmguY2FsbEF0TGFzdD9hW2VdLnNwbGljZSh1LDAsbCk6YVtlXS5wdXNoKGwpLHR9WXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpZdCxvbmU6ZnVuY3Rpb24odCxlLGksbil7cmV0dXJuIHF0KHRoaXMsdCxlLGksbiwhMCl9LG9uOmZ1bmN0aW9uKHQsZSxpLG4pe3JldHVybiBxdCh0aGlzLHQsZSxpLG4sITEpfSxpc1NpbGVudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl8kaGFuZGxlcnM7cmV0dXJuIWVbdF18fCFlW3RdLmxlbmd0aH0sb2ZmOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fJGhhbmRsZXJzO2lmKCF0KXJldHVybiB0aGlzLl8kaGFuZGxlcnM9e30sdGhpcztpZihlKXtpZihpW3RdKXtmb3IodmFyIG49W10sbz0wLHI9aVt0XS5sZW5ndGg7bzxyO28rKylpW3RdW29dLmghPT1lJiZuLnB1c2goaVt0XVtvXSk7aVt0XT1ufWlbdF0mJjA9PT1pW3RdLmxlbmd0aCYmZGVsZXRlIGlbdF19ZWxzZSBkZWxldGUgaVt0XTtyZXR1cm4gdGhpc30sdHJpZ2dlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl8kaGFuZGxlcnNbdF0saT10aGlzLl8kZXZlbnRQcm9jZXNzb3I7aWYoZSl7dmFyIG49YXJndW1lbnRzLG89bi5sZW5ndGg7bz4zJiYobj1YdC5jYWxsKG4sMSkpO2Zvcih2YXIgcj1lLmxlbmd0aCxhPTA7YTxyOyl7dmFyIHM9ZVthXTtpZihpJiZpLmZpbHRlciYmbnVsbCE9cy5xdWVyeSYmIWkuZmlsdGVyKHQscy5xdWVyeSkpYSsrO2Vsc2V7c3dpdGNoKG8pe2Nhc2UgMTpzLmguY2FsbChzLmN0eCk7YnJlYWs7Y2FzZSAyOnMuaC5jYWxsKHMuY3R4LG5bMV0pO2JyZWFrO2Nhc2UgMzpzLmguY2FsbChzLmN0eCxuWzFdLG5bMl0pO2JyZWFrO2RlZmF1bHQ6cy5oLmFwcGx5KHMuY3R4LG4pfXMub25lPyhlLnNwbGljZShhLDEpLHItLSk6YSsrfX19cmV0dXJuIGkmJmkuYWZ0ZXJUcmlnZ2VyJiZpLmFmdGVyVHJpZ2dlcih0KSx0aGlzfSx0cmlnZ2VyV2l0aENvbnRleHQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fJGhhbmRsZXJzW3RdLGk9dGhpcy5fJGV2ZW50UHJvY2Vzc29yO2lmKGUpe3ZhciBuPWFyZ3VtZW50cyxvPW4ubGVuZ3RoO28+NCYmKG49WHQuY2FsbChuLDEsbi5sZW5ndGgtMSkpO2Zvcih2YXIgcj1uW24ubGVuZ3RoLTFdLGE9ZS5sZW5ndGgscz0wO3M8YTspe3ZhciBsPWVbc107aWYoaSYmaS5maWx0ZXImJm51bGwhPWwucXVlcnkmJiFpLmZpbHRlcih0LGwucXVlcnkpKXMrKztlbHNle3N3aXRjaChvKXtjYXNlIDE6bC5oLmNhbGwocik7YnJlYWs7Y2FzZSAyOmwuaC5jYWxsKHIsblsxXSk7YnJlYWs7Y2FzZSAzOmwuaC5jYWxsKHIsblsxXSxuWzJdKTticmVhaztkZWZhdWx0OmwuaC5hcHBseShyLG4pfWwub25lPyhlLnNwbGljZShzLDEpLGEtLSk6cysrfX19cmV0dXJuIGkmJmkuYWZ0ZXJUcmlnZ2VyJiZpLmFmdGVyVHJpZ2dlcih0KSx0aGlzfX07dmFyIEt0PU1hdGgubG9nKDIpO2Z1bmN0aW9uICR0KHQsZSxpLG4sbyxyKXt2YXIgYT1uKyItIitvLHM9dC5sZW5ndGg7aWYoci5oYXNPd25Qcm9wZXJ0eShhKSlyZXR1cm4gclthXTtpZigxPT09ZSl7dmFyIGw9TWF0aC5yb3VuZChNYXRoLmxvZygoMTw8cyktMSZ+bykvS3QpO3JldHVybiB0W2ldW2xdfWZvcih2YXIgdT1ufDE8PGksaD1pKzE7biYxPDxoOyloKys7Zm9yKHZhciBjPTAsZD0wLGY9MDtkPHM7ZCsrKXt2YXIgcD0xPDxkO3Amb3x8KGMrPShmJTI/LTE6MSkqdFtpXVtkXSokdCh0LGUtMSxoLHUsb3xwLHIpLGYrKyl9cmV0dXJuIHJbYV09YyxjfWZ1bmN0aW9uIEp0KHQsZSl7dmFyIGk9W1t0WzBdLHRbMV0sMSwwLDAsMCwtZVswXSp0WzBdLC1lWzBdKnRbMV1dLFswLDAsMCx0WzBdLHRbMV0sMSwtZVsxXSp0WzBdLC1lWzFdKnRbMV1dLFt0WzJdLHRbM10sMSwwLDAsMCwtZVsyXSp0WzJdLC1lWzJdKnRbM11dLFswLDAsMCx0WzJdLHRbM10sMSwtZVszXSp0WzJdLC1lWzNdKnRbM11dLFt0WzRdLHRbNV0sMSwwLDAsMCwtZVs0XSp0WzRdLC1lWzRdKnRbNV1dLFswLDAsMCx0WzRdLHRbNV0sMSwtZVs1XSp0WzRdLC1lWzVdKnRbNV1dLFt0WzZdLHRbN10sMSwwLDAsMCwtZVs2XSp0WzZdLC1lWzZdKnRbN11dLFswLDAsMCx0WzZdLHRbN10sMSwtZVs3XSp0WzZdLC1lWzddKnRbN11dXSxuPXt9LG89JHQoaSw4LDAsMCwwLG4pO2lmKDAhPT1vKXtmb3IodmFyIHI9W10sYT0wO2E8ODthKyspZm9yKHZhciBzPTA7czw4O3MrKyludWxsPT1yW3NdJiYocltzXT0wKSxyW3NdKz0oKGErcyklMj8tMToxKSokdChpLDcsMD09PWE/MTowLDE8PGEsMTw8cyxuKS9vKmVbYV07cmV0dXJuIGZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1lKnJbNl0raSpyWzddKzE7dFswXT0oZSpyWzBdK2kqclsxXStyWzJdKS9uLHRbMV09KGUqclszXStpKnJbNF0rcls1XSkvbn19fXZhciBRdD1bXTtmdW5jdGlvbiB0ZSh0LGUsaSxuLG8pe2lmKGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiZiLmRvbVN1cHBvcnRlZCYmIWVlKGUpKXt2YXIgcj1lLl9fX3pyRVZFTlRTQVZFRHx8KGUuX19fenJFVkVOVFNBVkVEPXt9KSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG49aT8iaW52VHJhbnMiOiJ0cmFucyIsbz1lW25dLHI9ZS5zcmNDb29yZHMsYT0hMCxzPVtdLGw9W10sdT0wO3U8NDt1Kyspe3ZhciBoPXRbdV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz0yKnUsZD1oLmxlZnQsZj1oLnRvcDtzLnB1c2goZCxmKSxhPWEmJnImJmQ9PT1yW2NdJiZmPT09cltjKzFdLGwucHVzaCh0W3VdLm9mZnNldExlZnQsdFt1XS5vZmZzZXRUb3ApfXJldHVybiBhJiZvP286KGUuc3JjQ29vcmRzPXMsZVtuXT1pP0p0KGwscyk6SnQocyxsKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5tYXJrZXJzO2lmKGkpcmV0dXJuIGk7aT1lLm1hcmtlcnM9W107Zm9yKHZhciBuPVsibGVmdCIsInJpZ2h0Il0sbz1bInRvcCIsImJvdHRvbSJdLHI9MDtyPDQ7cisrKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxzPXIlMixsPShyPj4xKSUyO2Euc3R5bGUuY3NzVGV4dD1bInBvc2l0aW9uOiBhYnNvbHV0ZSIsInZpc2liaWxpdHk6IGhpZGRlbiIsInBhZGRpbmc6IDAiLCJtYXJnaW46IDAiLCJib3JkZXItd2lkdGg6IDAiLCJ1c2VyLXNlbGVjdDogbm9uZSIsIndpZHRoOjAiLCJoZWlnaHQ6MCIsbltzXSsiOjAiLG9bbF0rIjowIixuWzEtc10rIjphdXRvIixvWzEtbF0rIjphdXRvIiwiIl0uam9pbigiIWltcG9ydGFudDsiKSx0LmFwcGVuZENoaWxkKGEpLGkucHVzaChhKX1yZXR1cm4gaX0oZSxyKSxyLG8pO2lmKGEpcmV0dXJuIGEodCxpLG4pLCEwfXJldHVybiExfWZ1bmN0aW9uIGVlKHQpe3JldHVybiJDQU5WQVMiPT09dC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpfXZhciBpZT0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcixuZT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sb2U9W107ZnVuY3Rpb24gcmUodCxlLGksbil7cmV0dXJuIGk9aXx8e30sbnx8IWIuY2FudmFzU3VwcG9ydGVkP2FlKHQsZSxpKTpiLmJyb3dzZXIuZmlyZWZveCYmbnVsbCE9ZS5sYXllclgmJmUubGF5ZXJYIT09ZS5vZmZzZXRYPyhpLnpyWD1lLmxheWVyWCxpLnpyWT1lLmxheWVyWSk6bnVsbCE9ZS5vZmZzZXRYPyhpLnpyWD1lLm9mZnNldFgsaS56clk9ZS5vZmZzZXRZKTphZSh0LGUsaSksaX1mdW5jdGlvbiBhZSh0LGUsaSl7aWYoYi5kb21TdXBwb3J0ZWQmJnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgbj1lLmNsaWVudFgsbz1lLmNsaWVudFk7aWYoZWUodCkpe3ZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGkuenJYPW4tci5sZWZ0LHZvaWQoaS56clk9by1yLnRvcCl9aWYodGUob2UsdCxuLG8pKXJldHVybiBpLnpyWD1vZVswXSx2b2lkKGkuenJZPW9lWzFdKX1pLnpyWD1pLnpyWT0wfWZ1bmN0aW9uIHNlKHQpe3JldHVybiB0fHx3aW5kb3cuZXZlbnR9ZnVuY3Rpb24gbGUodCxlLGkpe2lmKG51bGwhPShlPXNlKGUpKS56clgpcmV0dXJuIGU7dmFyIG49ZS50eXBlO2lmKG4mJm4uaW5kZXhPZigidG91Y2giKT49MCl7dmFyIG89InRvdWNoZW5kIiE9PW4/ZS50YXJnZXRUb3VjaGVzWzBdOmUuY2hhbmdlZFRvdWNoZXNbMF07byYmcmUodCxvLGUsaSl9ZWxzZSByZSh0LGUsZSxpKSxlLnpyRGVsdGE9ZS53aGVlbERlbHRhP2Uud2hlZWxEZWx0YS8xMjA6LShlLmRldGFpbHx8MCkvMzt2YXIgcj1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmdm9pZCAwIT09ciYmbmUudGVzdChlLnR5cGUpJiYoZS53aGljaD0xJnI/MToyJnI/Mzo0JnI/MjowKSxlfWZ1bmN0aW9uIHVlKHQsZSxpLG4pe2llP3QuYWRkRXZlbnRMaXN0ZW5lcihlLGksbik6dC5hdHRhY2hFdmVudCgib24iK2UsaSl9ZnVuY3Rpb24gaGUodCxlLGksbil7aWU/dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxuKTp0LmRldGFjaEV2ZW50KCJvbiIrZSxpKX12YXIgY2U9aWU/ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksdC5jYW5jZWxCdWJibGU9ITB9OmZ1bmN0aW9uKHQpe3QucmV0dXJuVmFsdWU9ITEsdC5jYW5jZWxCdWJibGU9ITB9O2Z1bmN0aW9uIGRlKHQpe3JldHVybiAyPT09dC53aGljaHx8Mz09PXQud2hpY2h9dmFyIGZlPWZ1bmN0aW9uKCl7dGhpcy5fdHJhY2s9W119O2Z1bmN0aW9uIHBlKHQpe3ZhciBlPXRbMV1bMF0tdFswXVswXSxpPXRbMV1bMV0tdFswXVsxXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStpKmkpfWZlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZmUscmVjb2duaXplOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fZG9UcmFjayh0LGUsaSksdGhpcy5fcmVjb2duaXplKHQpfSxjbGVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFjay5sZW5ndGg9MCx0aGlzfSxfZG9UcmFjazpmdW5jdGlvbih0LGUsaSl7dmFyIG49dC50b3VjaGVzO2lmKG4pe2Zvcih2YXIgbz17cG9pbnRzOltdLHRvdWNoZXM6W10sdGFyZ2V0OmUsZXZlbnQ6dH0scj0wLGE9bi5sZW5ndGg7cjxhO3IrKyl7dmFyIHM9bltyXSxsPXJlKGkscyx7fSk7by5wb2ludHMucHVzaChbbC56clgsbC56clldKSxvLnRvdWNoZXMucHVzaChzKX10aGlzLl90cmFjay5wdXNoKG8pfX0sX3JlY29nbml6ZTpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gZ2UpaWYoZ2UuaGFzT3duUHJvcGVydHkoZSkpe3ZhciBpPWdlW2VdKHRoaXMuX3RyYWNrLHQpO2lmKGkpcmV0dXJuIGl9fX07dmFyIGdlPXtwaW5jaDpmdW5jdGlvbih0LGUpe3ZhciBpPXQubGVuZ3RoO2lmKGkpe3ZhciBuLG89KHRbaS0xXXx8e30pLnBvaW50cyxyPSh0W2ktMl18fHt9KS5wb2ludHN8fG87aWYociYmci5sZW5ndGg+MSYmbyYmby5sZW5ndGg+MSl7dmFyIGE9cGUobykvcGUocik7IWlzRmluaXRlKGEpJiYoYT0xKSxlLnBpbmNoU2NhbGU9YTt2YXIgcz1bKChuPW8pWzBdWzBdK25bMV1bMF0pLzIsKG5bMF1bMV0rblsxXVsxXSkvMl07cmV0dXJuIGUucGluY2hYPXNbMF0sZS5waW5jaFk9c1sxXSx7dHlwZToicGluY2giLHRhcmdldDp0WzBdLnRhcmdldCxldmVudDplfX19fX0sbWU9InNpbGVudCI7ZnVuY3Rpb24gdmUoKXtjZSh0aGlzLmV2ZW50KX1mdW5jdGlvbiB5ZSgpe315ZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe307dmFyIHhlPVsiY2xpY2siLCJkYmxjbGljayIsIm1vdXNld2hlZWwiLCJtb3VzZW91dCIsIm1vdXNldXAiLCJtb3VzZWRvd24iLCJtb3VzZW1vdmUiLCJjb250ZXh0bWVudSJdLF9lPWZ1bmN0aW9uKHQsZSxpLG4pe1l0LmNhbGwodGhpcyksdGhpcy5zdG9yYWdlPXQsdGhpcy5wYWludGVyPWUsdGhpcy5wYWludGVyUm9vdD1uLGk9aXx8bmV3IHllLHRoaXMucHJveHk9bnVsbCx0aGlzLl9ob3ZlcmVkPXt9LHRoaXMuX2xhc3RUb3VjaE1vbWVudCx0aGlzLl9sYXN0WCx0aGlzLl9sYXN0WSx0aGlzLl9nZXN0dXJlTWdyLFV0LmNhbGwodGhpcyksdGhpcy5zZXRIYW5kbGVyUHJveHkoaSl9O2Z1bmN0aW9uIHdlKHQsZSxpKXtpZih0W3QucmVjdEhvdmVyPyJyZWN0Q29udGFpbiI6ImNvbnRhaW4iXShlLGkpKXtmb3IodmFyIG4sbz10O287KXtpZihvLmNsaXBQYXRoJiYhby5jbGlwUGF0aC5jb250YWluKGUsaSkpcmV0dXJuITE7by5zaWxlbnQmJihuPSEwKSxvPW8ucGFyZW50fXJldHVybiFufHxtZX1yZXR1cm4hMX1mdW5jdGlvbiBiZSh0LGUsaSl7dmFyIG49dC5wYWludGVyO3JldHVybiBlPDB8fGU+bi5nZXRXaWR0aCgpfHxpPDB8fGk+bi5nZXRIZWlnaHQoKX1fZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9lLHNldEhhbmRsZXJQcm94eTpmdW5jdGlvbih0KXt0aGlzLnByb3h5JiZ0aGlzLnByb3h5LmRpc3Bvc2UoKSx0JiYoaih4ZSwoZnVuY3Rpb24oZSl7dC5vbiYmdC5vbihlLHRoaXNbZV0sdGhpcyl9KSx0aGlzKSx0LmhhbmRsZXI9dGhpcyksdGhpcy5wcm94eT10fSxtb3VzZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC56clgsaT10LnpyWSxuPWJlKHRoaXMsZSxpKSxvPXRoaXMuX2hvdmVyZWQscj1vLnRhcmdldDtyJiYhci5fX3pyJiYocj0obz10aGlzLmZpbmRIb3ZlcihvLngsby55KSkudGFyZ2V0KTt2YXIgYT10aGlzLl9ob3ZlcmVkPW4/e3g6ZSx5Oml9OnRoaXMuZmluZEhvdmVyKGUsaSkscz1hLnRhcmdldCxsPXRoaXMucHJveHk7bC5zZXRDdXJzb3ImJmwuc2V0Q3Vyc29yKHM/cy5jdXJzb3I6ImRlZmF1bHQiKSxyJiZzIT09ciYmdGhpcy5kaXNwYXRjaFRvRWxlbWVudChvLCJtb3VzZW91dCIsdCksdGhpcy5kaXNwYXRjaFRvRWxlbWVudChhLCJtb3VzZW1vdmUiLHQpLHMmJnMhPT1yJiZ0aGlzLmRpc3BhdGNoVG9FbGVtZW50KGEsIm1vdXNlb3ZlciIsdCl9LG1vdXNlb3V0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuenJFdmVudENvbnRyb2wsaT10LnpySXNUb0xvY2FsRE9NOyJvbmx5X2dsb2JhbG91dCIhPT1lJiZ0aGlzLmRpc3BhdGNoVG9FbGVtZW50KHRoaXMuX2hvdmVyZWQsIm1vdXNlb3V0Iix0KSwibm9fZ2xvYmFsb3V0IiE9PWUmJiFpJiZ0aGlzLnRyaWdnZXIoImdsb2JhbG91dCIse3R5cGU6Imdsb2JhbG91dCIsZXZlbnQ6dH0pfSxyZXNpemU6ZnVuY3Rpb24odCl7dGhpcy5faG92ZXJlZD17fX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzW3RdO2kmJmkuY2FsbCh0aGlzLGUpfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5wcm94eS5kaXNwb3NlKCksdGhpcy5zdG9yYWdlPXRoaXMucHJveHk9dGhpcy5wYWludGVyPW51bGx9LHNldEN1cnNvclN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJveHk7ZS5zZXRDdXJzb3ImJmUuc2V0Q3Vyc29yKHQpfSxkaXNwYXRjaFRvRWxlbWVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG49KHQ9dHx8e30pLnRhcmdldDtpZighbnx8IW4uc2lsZW50KXtmb3IodmFyIG89Im9uIitlLHI9ZnVuY3Rpb24odCxlLGkpe3JldHVybnt0eXBlOnQsZXZlbnQ6aSx0YXJnZXQ6ZS50YXJnZXQsdG9wVGFyZ2V0OmUudG9wVGFyZ2V0LGNhbmNlbEJ1YmJsZTohMSxvZmZzZXRYOmkuenJYLG9mZnNldFk6aS56clksZ2VzdHVyZUV2ZW50OmkuZ2VzdHVyZUV2ZW50LHBpbmNoWDppLnBpbmNoWCxwaW5jaFk6aS5waW5jaFkscGluY2hTY2FsZTppLnBpbmNoU2NhbGUsd2hlZWxEZWx0YTppLnpyRGVsdGEsenJCeVRvdWNoOmkuenJCeVRvdWNoLHdoaWNoOmkud2hpY2gsc3RvcDp2ZX19KGUsdCxpKTtuJiYobltvXSYmKHIuY2FuY2VsQnViYmxlPW5bb10uY2FsbChuLHIpKSxuLnRyaWdnZXIoZSxyKSxuPW4ucGFyZW50LCFyLmNhbmNlbEJ1YmJsZSk7KTtyLmNhbmNlbEJ1YmJsZXx8KHRoaXMudHJpZ2dlcihlLHIpLHRoaXMucGFpbnRlciYmdGhpcy5wYWludGVyLmVhY2hPdGhlckxheWVyKChmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdFtvXSYmdFtvXS5jYWxsKHQsciksdC50cmlnZ2VyJiZ0LnRyaWdnZXIoZSxyKX0pKSl9fSxmaW5kSG92ZXI6ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbj10aGlzLnN0b3JhZ2UuZ2V0RGlzcGxheUxpc3QoKSxvPXt4OnQseTplfSxyPW4ubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBhO2lmKG5bcl0hPT1pJiYhbltyXS5pZ25vcmUmJihhPXdlKG5bcl0sdCxlKSkmJighby50b3BUYXJnZXQmJihvLnRvcFRhcmdldD1uW3JdKSxhIT09bWUpKXtvLnRhcmdldD1uW3JdO2JyZWFrfX1yZXR1cm4gb30scHJvY2Vzc0dlc3R1cmU6ZnVuY3Rpb24odCxlKXt0aGlzLl9nZXN0dXJlTWdyfHwodGhpcy5fZ2VzdHVyZU1ncj1uZXcgZmUpO3ZhciBpPXRoaXMuX2dlc3R1cmVNZ3I7InN0YXJ0Ij09PWUmJmkuY2xlYXIoKTt2YXIgbj1pLnJlY29nbml6ZSh0LHRoaXMuZmluZEhvdmVyKHQuenJYLHQuenJZLG51bGwpLnRhcmdldCx0aGlzLnByb3h5LmRvbSk7aWYoImVuZCI9PT1lJiZpLmNsZWFyKCksbil7dmFyIG89bi50eXBlO3QuZ2VzdHVyZUV2ZW50PW8sdGhpcy5kaXNwYXRjaFRvRWxlbWVudCh7dGFyZ2V0Om4udGFyZ2V0fSxvLG4uZXZlbnQpfX19LGooWyJjbGljayIsIm1vdXNlZG93biIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwiZGJsY2xpY2siLCJjb250ZXh0bWVudSJdLChmdW5jdGlvbih0KXtfZS5wcm90b3R5cGVbdF09ZnVuY3Rpb24oZSl7dmFyIGksbixvPWUuenJYLHI9ZS56clksYT1iZSh0aGlzLG8scik7aWYoIm1vdXNldXAiPT09dCYmYXx8KG49KGk9dGhpcy5maW5kSG92ZXIobyxyKSkudGFyZ2V0KSwibW91c2Vkb3duIj09PXQpdGhpcy5fZG93bkVsPW4sdGhpcy5fZG93blBvaW50PVtlLnpyWCxlLnpyWV0sdGhpcy5fdXBFbD1uO2Vsc2UgaWYoIm1vdXNldXAiPT09dCl0aGlzLl91cEVsPW47ZWxzZSBpZigiY2xpY2siPT09dCl7aWYodGhpcy5fZG93bkVsIT09dGhpcy5fdXBFbHx8IXRoaXMuX2Rvd25Qb2ludHx8UnQodGhpcy5fZG93blBvaW50LFtlLnpyWCxlLnpyWV0pPjQpcmV0dXJuO3RoaXMuX2Rvd25Qb2ludD1udWxsfXRoaXMuZGlzcGF0Y2hUb0VsZW1lbnQoaSx0LGUpfX0pKSxaKF9lLFl0KSxaKF9lLFV0KTt2YXIgU2U9InVuZGVmaW5lZCI9PXR5cGVvZiBGbG9hdDMyQXJyYXk/QXJyYXk6RmxvYXQzMkFycmF5O2Z1bmN0aW9uIE1lKCl7dmFyIHQ9bmV3IFNlKDYpO3JldHVybiBJZSh0KSx0fWZ1bmN0aW9uIEllKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT0wLHRbNV09